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