refactor: Metadata overhaul (#913)

* Replace part1

* Replace part2

* Replace part3

* Replace part5

* Replace part6

* Fix small bugs

* Fix double map toString

* Small fixes

* Update to v4

* Fix docs script

* Grumbles

* Alphabetical

* Reads better

* comment

* module to modul
This commit is contained in:
Amaury Martiny
2019-06-12 16:45:45 +12:00
committed by Ian He
parent 194077033a
commit 2699dcfc9c
77 changed files with 1198 additions and 4550 deletions
+81 -65
View File
@@ -3,78 +3,94 @@
// of the Apache-2.0 license. See the LICENSE file for details.
import BN from 'bn.js';
import storage from '@plugnet/storage/static';
import fromMetadata from '@plugnet/storage/fromMetadata';
import { Storage } from '@plugnet/storage/types';
import Metadata from '@plugnet/types/Metadata';
import rpcMetadataV3 from '@plugnet/types/Metadata/v3/static';
import rpcMetadataV4 from '@plugnet/types/Metadata/v4/static';
import Api from '.';
const ADDR_ONE = '5DkQbYAExs3M2sZgT1Ec3mKfZnAQCL4Dt9beTCknkCUn5jzo';
const ADDR_TWO = '5C62W7ELLAAfix9LYrcx5smtcffbhvThkM5x7xfMeYXCtGwF';
const ENC_ONE = '0x4af2c53fce3ec33c6ccccf22e926f1a7';
const ENC_TWO = '0x3e62f7ed6e788e1337bce2a97b68a12a';
function formattingTests (version: string, storage: Storage, encodedValues: [String, String]) {
const [ENC_ONE, ENC_TWO] = encodedValues;
describe('formatting', () => {
let api: Api;
let provider: any;
describe(`formatting with Metadata ${version}`, () => {
let api: Api;
let provider: any;
beforeEach(() => {
provider = {
send: jest.fn((method, params) =>
Promise.resolve('0x0102')
),
subscribe: jest.fn((type, method, params, subscription) =>
subscription(null, {
block: '0x1234',
changes: [
[ENC_ONE, '0x0102'],
[ENC_TWO, '0x0201']
]
})
)
};
api = new Api(provider);
beforeEach(() => {
provider = {
send: jest.fn((method, params) =>
Promise.resolve('0x0102')
),
subscribe: jest.fn((type, method, params, subscription) =>
subscription(null, {
block: '0x1234',
changes: [
[ENC_ONE, '0x0102'],
[ENC_TWO, '0x0201']
]
})
)
};
api = new Api(provider);
});
it('encodes key (with params), decoding response', () => {
return api.state
.getStorage(
[storage.balances.freeBalance, ADDR_ONE]
)
.then((value) => {
expect(
provider.send
).toHaveBeenCalledWith(
'state_getStorage',
[ENC_ONE]
);
expect(value.toNumber()).toEqual(513);
});
});
it('encodes multiple keys, decoding multiple results', (done) => {
return api.state.subscribeStorage(
[
[storage.balances.freeBalance, ADDR_ONE],
[storage.balances.freeBalance, ADDR_TWO]
],
(value: any) => {
console.error(value);
expect(
provider.subscribe
).toHaveBeenCalledWith(
'state_storage',
'state_subscribeStorage',
[[ENC_ONE, ENC_TWO]],
expect.anything()
);
expect(
value.map((balance: BN) =>
balance.toNumber()
)
).toEqual([513, 258]);
done();
});
});
});
}
it('encodes key (with params), decoding response', () => {
return api.state
.getStorage(
[storage.balances.freeBalance, ADDR_ONE]
)
.then((value) => {
expect(
provider.send
).toHaveBeenCalledWith(
'state_getStorage',
[ENC_ONE]
);
expect(value.toNumber()).toEqual(513);
});
});
it('encodes multiple keys, decoding multiple results', (done) => {
return api.state.subscribeStorage(
[
[storage.balances.freeBalance, ADDR_ONE],
[storage.balances.freeBalance, ADDR_TWO]
],
(value: any) => {
console.error(value);
expect(
provider.subscribe
).toHaveBeenCalledWith(
'state_storage',
'state_subscribeStorage',
[[ENC_ONE, ENC_TWO]],
expect.anything()
);
expect(
value.map((balance: BN) =>
balance.toNumber()
)
).toEqual([513, 258]);
done();
});
});
});
formattingTests(
'v3',
fromMetadata(new Metadata(rpcMetadataV3)),
['0x4af2c53fce3ec33c6ccccf22e926f1a7', '0x3e62f7ed6e788e1337bce2a97b68a12a']
);
formattingTests(
'v4',
fromMetadata(new Metadata(rpcMetadataV4)),
['0xec8f96437274a883afcac82d01a9defeb68209cd4f2c084632813692aa5e65ad', '0x1dbb0224910f42a14e7f1406b24c6fe8157296691b02a78756e01946038fffab']
);