@acala-network/chopsticks-testing 0.8.0-4 → 0.8.0-5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/check.js +8 -17
- package/lib/index.js +34 -63
- package/package.json +3 -3
package/lib/check.js
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.checkHrmp = exports.checkUmp = exports.checkSystemEvents = exports.checkEvents = exports.check = exports.Checker = void 0;
|
|
4
|
-
const vitest_1 = require("vitest");
|
|
1
|
+
import { expect } from 'vitest';
|
|
5
2
|
const processCodecOrArray = (codec, fn) => Array.isArray(codec) ? codec.map(fn) : fn(codec);
|
|
6
3
|
const toHuman = (codec) => processCodecOrArray(codec, (c) => c?.toHuman?.() ?? c);
|
|
7
4
|
const toHex = (codec) => processCodecOrArray(codec, (c) => c?.toHex?.() ?? c);
|
|
8
5
|
const toJson = (codec) => processCodecOrArray(codec, (c) => c?.toJSON?.() ?? c);
|
|
9
|
-
class Checker {
|
|
6
|
+
export class Checker {
|
|
10
7
|
#value;
|
|
11
8
|
#pipeline = [];
|
|
12
9
|
#format = 'json';
|
|
@@ -148,11 +145,10 @@ class Checker {
|
|
|
148
145
|
return value;
|
|
149
146
|
}
|
|
150
147
|
async toMatchSnapshot(msg) {
|
|
151
|
-
return
|
|
148
|
+
return expect(await this.value()).toMatchSnapshot(msg ?? this.#message);
|
|
152
149
|
}
|
|
153
150
|
}
|
|
154
|
-
|
|
155
|
-
const check = (value, msg) => {
|
|
151
|
+
export const check = (value, msg) => {
|
|
156
152
|
if (value instanceof Checker) {
|
|
157
153
|
if (msg) {
|
|
158
154
|
return value.message(msg);
|
|
@@ -161,19 +157,14 @@ const check = (value, msg) => {
|
|
|
161
157
|
}
|
|
162
158
|
return new Checker(value, msg);
|
|
163
159
|
};
|
|
164
|
-
|
|
165
|
-
const checkEvents = ({ events }, ...filters) => (0, exports.check)(events, 'events')
|
|
160
|
+
export const checkEvents = ({ events }, ...filters) => check(events, 'events')
|
|
166
161
|
.filterEvents(...filters)
|
|
167
162
|
.redact();
|
|
168
|
-
|
|
169
|
-
const checkSystemEvents = ({ api }, ...filters) => (0, exports.check)(api.query.system.events(), 'system events')
|
|
163
|
+
export const checkSystemEvents = ({ api }, ...filters) => check(api.query.system.events(), 'system events')
|
|
170
164
|
.filterEvents(...filters)
|
|
171
165
|
.redact();
|
|
172
|
-
|
|
173
|
-
const
|
|
174
|
-
exports.checkUmp = checkUmp;
|
|
175
|
-
const checkHrmp = ({ api }) => (0, exports.check)(api.query.parachainSystem.hrmpOutboundMessages(), 'hrmp').map((value) => value.map(({ recipient, data }) => ({
|
|
166
|
+
export const checkUmp = ({ api }) => check(api.query.parachainSystem.upwardMessages(), 'ump').map((value) => api.createType('Vec<XcmVersionedXcm>', value).toJSON());
|
|
167
|
+
export const checkHrmp = ({ api }) => check(api.query.parachainSystem.hrmpOutboundMessages(), 'hrmp').map((value) => value.map(({ recipient, data }) => ({
|
|
176
168
|
data: api.createType('(XcmpMessageFormat, XcmVersionedXcm)', data),
|
|
177
169
|
recipient,
|
|
178
170
|
})));
|
|
179
|
-
exports.checkHrmp = checkHrmp;
|
package/lib/index.js
CHANGED
|
@@ -1,26 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.testingPairs = exports.sendTransaction = exports.defer = exports.redact = exports.matchSystemEvents = exports.matchEvents = exports.expectHex = exports.expectJson = exports.setupNetworks = exports.setupContextWithConfig = exports.setupContext = exports.createConfig = void 0;
|
|
18
|
-
const api_1 = require("@polkadot/api");
|
|
19
|
-
const chopsticks_1 = require("@acala-network/chopsticks");
|
|
20
|
-
const keyring_1 = require("@polkadot/keyring");
|
|
21
|
-
const vitest_1 = require("vitest");
|
|
22
|
-
__exportStar(require("./check"), exports);
|
|
23
|
-
const createConfig = ({ endpoint, blockNumber, blockHash, wasmOverride, db, timeout, port, maxMemoryBlockCount, }) => {
|
|
1
|
+
import { ApiPromise, WsProvider } from '@polkadot/api';
|
|
2
|
+
import { BuildBlockMode, connectParachains, connectVertical, fetchConfig, setupWithServer, } from '@acala-network/chopsticks';
|
|
3
|
+
import { Keyring, createTestKeyring } from '@polkadot/keyring';
|
|
4
|
+
import { expect } from 'vitest';
|
|
5
|
+
export * from './check';
|
|
6
|
+
export const createConfig = ({ endpoint, blockNumber, blockHash, wasmOverride, db, timeout, port, maxMemoryBlockCount, }) => {
|
|
24
7
|
// random port if not specified
|
|
25
8
|
port = port ?? Math.floor(Math.random() * 10000) + 10000;
|
|
26
9
|
const config = {
|
|
@@ -28,7 +11,7 @@ const createConfig = ({ endpoint, blockNumber, blockHash, wasmOverride, db, time
|
|
|
28
11
|
port,
|
|
29
12
|
block: blockNumber || blockHash,
|
|
30
13
|
mockSignatureHost: true,
|
|
31
|
-
'build-block-mode':
|
|
14
|
+
'build-block-mode': BuildBlockMode.Manual,
|
|
32
15
|
'max-memory-block-count': maxMemoryBlockCount ?? 100,
|
|
33
16
|
db,
|
|
34
17
|
'wasm-override': wasmOverride,
|
|
@@ -36,16 +19,14 @@ const createConfig = ({ endpoint, blockNumber, blockHash, wasmOverride, db, time
|
|
|
36
19
|
};
|
|
37
20
|
return config;
|
|
38
21
|
};
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
return (0, exports.setupContextWithConfig)((0, exports.createConfig)(option));
|
|
22
|
+
export const setupContext = async (option) => {
|
|
23
|
+
return setupContextWithConfig(createConfig(option));
|
|
42
24
|
};
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
const { chain, listenPort, close } = await (0, chopsticks_1.setupWithServer)(config);
|
|
25
|
+
export const setupContextWithConfig = async ({ timeout, ...config }) => {
|
|
26
|
+
const { chain, listenPort, close } = await setupWithServer(config);
|
|
46
27
|
const url = `ws://localhost:${listenPort}`;
|
|
47
|
-
const ws = new
|
|
48
|
-
const api = await
|
|
28
|
+
const ws = new WsProvider(url, undefined, undefined, timeout);
|
|
29
|
+
const api = await ApiPromise.create({
|
|
49
30
|
provider: ws,
|
|
50
31
|
signedExtensions: {
|
|
51
32
|
SetEvmOrigin: {
|
|
@@ -79,32 +60,31 @@ const setupContextWithConfig = async ({ timeout, ...config }) => {
|
|
|
79
60
|
await close();
|
|
80
61
|
},
|
|
81
62
|
async pause() {
|
|
82
|
-
await ws.send('dev_setBlockBuildMode', [
|
|
63
|
+
await ws.send('dev_setBlockBuildMode', [BuildBlockMode.Instant]);
|
|
83
64
|
// log a bit later to ensure the message is visible
|
|
84
65
|
setTimeout(() => console.log(`Test paused. Polkadot.js apps URL: https://polkadot.js.org/apps/?rpc=${url}`), 100);
|
|
85
66
|
return new Promise((_resolve) => { }); // wait forever
|
|
86
67
|
},
|
|
87
68
|
};
|
|
88
69
|
};
|
|
89
|
-
|
|
90
|
-
const setupNetworks = async (networkOptions) => {
|
|
70
|
+
export const setupNetworks = async (networkOptions) => {
|
|
91
71
|
const ret = {};
|
|
92
72
|
let wasmOverriden = false;
|
|
93
73
|
for (const [name, options] of Object.entries(networkOptions)) {
|
|
94
|
-
const config = typeof options === 'string' ? await
|
|
95
|
-
ret[name] = await
|
|
74
|
+
const config = typeof options === 'string' ? await fetchConfig(options) : options ?? (await fetchConfig(name));
|
|
75
|
+
ret[name] = await setupContextWithConfig(config);
|
|
96
76
|
wasmOverriden ||= config['wasm-override'] != null;
|
|
97
77
|
}
|
|
98
78
|
const relaychainName = Object.keys(ret).filter((x) => ['polkadot', 'kusama'].includes(x.toLocaleLowerCase()))[0];
|
|
99
79
|
const { [relaychainName]: relaychain, ...parachains } = ret;
|
|
100
80
|
if (relaychain) {
|
|
101
81
|
for (const parachain of Object.values(parachains)) {
|
|
102
|
-
await
|
|
82
|
+
await connectVertical(relaychain.chain, parachain.chain);
|
|
103
83
|
}
|
|
104
84
|
}
|
|
105
85
|
const parachainList = Object.values(parachains).map((i) => i.chain);
|
|
106
86
|
if (parachainList.length > 0) {
|
|
107
|
-
await
|
|
87
|
+
await connectParachains(parachainList);
|
|
108
88
|
}
|
|
109
89
|
if (wasmOverriden) {
|
|
110
90
|
// trigger runtime upgrade if needed (due to wasm override)
|
|
@@ -118,19 +98,16 @@ const setupNetworks = async (networkOptions) => {
|
|
|
118
98
|
}
|
|
119
99
|
return ret;
|
|
120
100
|
};
|
|
121
|
-
exports.setupNetworks = setupNetworks;
|
|
122
101
|
const processCodecOrArray = (codec, fn) => Array.isArray(codec) ? codec.map(fn) : fn(codec);
|
|
123
102
|
const toHuman = (codec) => processCodecOrArray(codec, (c) => c?.toHuman?.() ?? c);
|
|
124
103
|
const toJson = (codec) => processCodecOrArray(codec, (c) => c?.toJSON?.() ?? c);
|
|
125
104
|
const toHex = (codec) => processCodecOrArray(codec, (c) => c?.toHex?.() ?? c);
|
|
126
|
-
const expectJson = (codec) => {
|
|
127
|
-
return
|
|
105
|
+
export const expectJson = (codec) => {
|
|
106
|
+
return expect(toJson(codec));
|
|
128
107
|
};
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
return (0, vitest_1.expect)(toHex(codec));
|
|
108
|
+
export const expectHex = (codec) => {
|
|
109
|
+
return expect(toHex(codec));
|
|
132
110
|
};
|
|
133
|
-
exports.expectHex = expectHex;
|
|
134
111
|
const _matchEvents = async (msg, events, ...filters) => {
|
|
135
112
|
let data = toHuman(await events).map(({ event: { index: _, ...event } }) => event);
|
|
136
113
|
if (filters.length > 0) {
|
|
@@ -145,17 +122,15 @@ const _matchEvents = async (msg, events, ...filters) => {
|
|
|
145
122
|
});
|
|
146
123
|
});
|
|
147
124
|
}
|
|
148
|
-
return
|
|
125
|
+
return expect(data).toMatchSnapshot(msg);
|
|
149
126
|
};
|
|
150
|
-
const matchEvents = async (events, ...filters) => {
|
|
151
|
-
return _matchEvents('events',
|
|
127
|
+
export const matchEvents = async (events, ...filters) => {
|
|
128
|
+
return _matchEvents('events', redact(events), ...filters);
|
|
152
129
|
};
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
await _matchEvents('system events', (0, exports.redact)(api.query.system.events()), ...filters);
|
|
130
|
+
export const matchSystemEvents = async ({ api }, ...filters) => {
|
|
131
|
+
await _matchEvents('system events', redact(api.query.system.events()), ...filters);
|
|
156
132
|
};
|
|
157
|
-
|
|
158
|
-
const redact = async (data) => {
|
|
133
|
+
export const redact = async (data) => {
|
|
159
134
|
const json = toHuman(await data);
|
|
160
135
|
const process = (obj) => {
|
|
161
136
|
if (obj == null) {
|
|
@@ -192,8 +167,7 @@ const redact = async (data) => {
|
|
|
192
167
|
};
|
|
193
168
|
return process(json);
|
|
194
169
|
};
|
|
195
|
-
|
|
196
|
-
function defer() {
|
|
170
|
+
export function defer() {
|
|
197
171
|
const deferred = {};
|
|
198
172
|
deferred.promise = new Promise((resolve, reject) => {
|
|
199
173
|
deferred.resolve = resolve;
|
|
@@ -201,8 +175,7 @@ function defer() {
|
|
|
201
175
|
});
|
|
202
176
|
return deferred;
|
|
203
177
|
}
|
|
204
|
-
|
|
205
|
-
const sendTransaction = async (tx) => {
|
|
178
|
+
export const sendTransaction = async (tx) => {
|
|
206
179
|
const signed = await tx;
|
|
207
180
|
const deferred = defer();
|
|
208
181
|
await signed.send((status) => {
|
|
@@ -218,11 +191,10 @@ const sendTransaction = async (tx) => {
|
|
|
218
191
|
events: deferred.promise,
|
|
219
192
|
};
|
|
220
193
|
};
|
|
221
|
-
|
|
222
|
-
const
|
|
223
|
-
const keyringEth = (0, keyring_1.createTestKeyring)({ type: 'ethereum' });
|
|
194
|
+
export const testingPairs = (keyringType = 'ed25519', ss58Format) => {
|
|
195
|
+
const keyringEth = createTestKeyring({ type: 'ethereum' });
|
|
224
196
|
// default to ed25519 because sr25519 signature is non-deterministic
|
|
225
|
-
const keyring = new
|
|
197
|
+
const keyring = new Keyring({ type: keyringType, ss58Format });
|
|
226
198
|
return {
|
|
227
199
|
alice: keyring.addFromUri('//Alice'),
|
|
228
200
|
bob: keyring.addFromUri('//Bob'),
|
|
@@ -238,4 +210,3 @@ const testingPairs = (keyringType = 'ed25519', ss58Format) => {
|
|
|
238
210
|
keyringEth,
|
|
239
211
|
};
|
|
240
212
|
};
|
|
241
|
-
exports.testingPairs = testingPairs;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acala-network/chopsticks-testing",
|
|
3
|
-
"version": "0.8.0-
|
|
3
|
+
"version": "0.8.0-5",
|
|
4
4
|
"author": "Bryan Chen <xlchen1291@gmail.com>",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"scripts": {
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
"build": "tsc -p ./tsconfig.json"
|
|
9
9
|
},
|
|
10
10
|
"dependencies": {
|
|
11
|
-
"@acala-network/chopsticks": "0.8.0-
|
|
11
|
+
"@acala-network/chopsticks": "0.8.0-5"
|
|
12
12
|
},
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"vitest": "^0.
|
|
14
|
+
"vitest": "^0.34.0"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@types/chai": "^4.3.5",
|