@clarigen/test 1.0.0-next.22 → 1.0.0-next.26
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/dist/index.d.ts +30 -11
- package/dist/index.js +57 -6
- package/dist/index.mjs +58 -7
- package/package.json +6 -7
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CoreNodeEvent, ResultAssets, Contracts, ContractFactory,
|
|
2
|
-
import { Costs, NativeClarityBinProvider, ClarinetAccounts } from '@clarigen/native-bin';
|
|
1
|
+
import { CoreNodeEvent, ResultAssets, Project, AllContracts, DeploymentsForContracts, ProjectFactory, Contracts, ContractFactory, ContractCall, Response, ContractCalls, ContractInstances, ResponseOk, ResponseErr } from '@clarigen/core';
|
|
2
|
+
import { Costs, ClarinetAccount, NativeClarityBinProvider, ClarinetAccounts } from '@clarigen/native-bin';
|
|
3
3
|
export { Allocation, createClarityBin, evalJson, executeJson } from '@clarigen/native-bin';
|
|
4
4
|
import { ClarityValue, ResponseCV } from 'micro-stacks/clarity';
|
|
5
5
|
import { StacksNetworkVersion } from 'micro-stacks/crypto';
|
|
@@ -29,7 +29,22 @@ interface PublicResultOk<T> extends PublicResultBase<T> {
|
|
|
29
29
|
assets: ResultAssets;
|
|
30
30
|
prints: any[];
|
|
31
31
|
}
|
|
32
|
-
declare type PublicResult<
|
|
32
|
+
declare type PublicResult<R> = PublicResultOk<R> | PublicResultErr<R>;
|
|
33
|
+
|
|
34
|
+
declare type Account = Omit<ClarinetAccount, 'balance'> & {
|
|
35
|
+
balance: number;
|
|
36
|
+
};
|
|
37
|
+
interface Simnet {
|
|
38
|
+
accounts: {
|
|
39
|
+
deployer: Account;
|
|
40
|
+
[key: string]: Account;
|
|
41
|
+
};
|
|
42
|
+
deployment: {
|
|
43
|
+
identifier: string;
|
|
44
|
+
file: string;
|
|
45
|
+
}[];
|
|
46
|
+
}
|
|
47
|
+
declare function testFactory<P extends Project<C, D>, C extends AllContracts, D extends DeploymentsForContracts<C>>(project: P): ProjectFactory<P, 'simnet'>;
|
|
33
48
|
|
|
34
49
|
declare type Provider = NativeClarityBinProvider | {
|
|
35
50
|
clarityBin: NativeClarityBinProvider;
|
|
@@ -47,29 +62,33 @@ interface FromContractsOptions {
|
|
|
47
62
|
accounts?: ClarinetAccounts;
|
|
48
63
|
clarityBin?: NativeClarityBinProvider;
|
|
49
64
|
coverageFolder?: string;
|
|
65
|
+
clarinetPath?: string;
|
|
50
66
|
}
|
|
51
67
|
interface FromContracts<T extends Contracts<any>> {
|
|
52
68
|
deployed: ContractInstances<T>;
|
|
53
69
|
provider: TestProvider;
|
|
54
70
|
}
|
|
71
|
+
declare type OkType<T> = T extends ResponseOk<infer Ok, unknown> ? Ok : never;
|
|
72
|
+
declare type ErrType<T> = T extends ResponseErr<unknown, infer Err> ? Err : never;
|
|
55
73
|
declare class TestProvider {
|
|
56
74
|
clarityBin: NativeClarityBinProvider;
|
|
57
75
|
coverageFolder?: string;
|
|
58
76
|
constructor(clarityBin: NativeClarityBinProvider);
|
|
59
77
|
static fromContracts<T extends Contracts<any>>(contracts: T, options?: FromContractsOptions): Promise<FromContracts<T>>;
|
|
78
|
+
static fromProject(simnet: Simnet, options?: FromContractsOptions): Promise<TestProvider>;
|
|
60
79
|
static fromFactory(contracts: ContractFactory<AllContracts>, options?: FromContractsOptions): Promise<TestProvider>;
|
|
61
80
|
ro<T>(tx: ContractCall<T>): Promise<ReadOnlyResult<T>>;
|
|
62
81
|
rov<T>(tx: ContractCall<T>): Promise<T>;
|
|
63
|
-
roOk<
|
|
64
|
-
roErr<
|
|
65
|
-
rovOk<
|
|
66
|
-
rovErr<
|
|
67
|
-
tx<
|
|
68
|
-
txOk<
|
|
69
|
-
txErr<
|
|
82
|
+
roOk<R extends Response<unknown, unknown>>(tx: ContractCall<R>): Promise<ReadOnlyResult<OkType<R>>>;
|
|
83
|
+
roErr<R extends Response<unknown, unknown>>(tx: ContractCall<R>): Promise<ReadOnlyResult<ErrType<R>>>;
|
|
84
|
+
rovOk<R extends Response<unknown, unknown>>(tx: ContractCall<R>): Promise<OkType<R>>;
|
|
85
|
+
rovErr<R extends Response<unknown, unknown>>(tx: ContractCall<R>): Promise<ErrType<R>>;
|
|
86
|
+
tx<R extends Response<unknown, unknown>>(tx: ContractCall<R>, senderAddress: string): Promise<PublicResult<R>>;
|
|
87
|
+
txOk<R extends Response<unknown, unknown>>(tx: ContractCall<R>, senderAddress: string): Promise<PublicResultOk<OkType<R>>>;
|
|
88
|
+
txErr<R extends Response<unknown, unknown>>(tx: ContractCall<R>, senderAddress: string): Promise<PublicResultErr<ErrType<R>>>;
|
|
70
89
|
evalCode<T>(code: string, contractAddress?: string): Promise<ReadOnlyResult<T>>;
|
|
71
90
|
eval<T>(code: string, contractAddress?: string): Promise<T>;
|
|
72
91
|
mapGet<T extends ContractCalls.Map<any, Val>, Val>(map: T): Promise<Val | null>;
|
|
73
92
|
}
|
|
74
93
|
|
|
75
|
-
export { PublicResultErr, PublicResultOk, ReadOnlyResult, TestProvider, finishCoverage, getBlockHeight, getStxBalance, makeRandomAddress, mineBlocks, setupCoverage };
|
|
94
|
+
export { PublicResultErr, PublicResultOk, ReadOnlyResult, Simnet, TestProvider, finishCoverage, getBlockHeight, getStxBalance, makeRandomAddress, mineBlocks, setupCoverage, testFactory };
|
package/dist/index.js
CHANGED
|
@@ -141,6 +141,8 @@ function makeRandomAddress(version = _crypto.StacksNetworkVersion.testnetP2PKH)
|
|
|
141
141
|
|
|
142
142
|
|
|
143
143
|
|
|
144
|
+
|
|
145
|
+
|
|
144
146
|
function getPrints(events) {
|
|
145
147
|
return _core.filterEvents.call(void 0, events, _core.CoreNodeEventType.ContractEvent).map((e) => {
|
|
146
148
|
const hex = e.contract_event.raw_value;
|
|
@@ -213,10 +215,11 @@ async function tx({
|
|
|
213
215
|
});
|
|
214
216
|
const resultCV = _clarity.hexToCV.call(void 0, result.output_serialized);
|
|
215
217
|
const value = _core.cvToValue.call(void 0, resultCV);
|
|
218
|
+
const resp = result.success ? _core.ok.call(void 0, value) : _core.err.call(void 0, value);
|
|
216
219
|
const baseReturn = {
|
|
217
|
-
value,
|
|
218
220
|
logs: getLogs(result.stderr),
|
|
219
|
-
costs: result.costs
|
|
221
|
+
costs: result.costs,
|
|
222
|
+
value: resp
|
|
220
223
|
};
|
|
221
224
|
if (result.success) {
|
|
222
225
|
return __spreadProps(__spreadValues({}, baseReturn), {
|
|
@@ -248,6 +251,16 @@ async function mapGet({
|
|
|
248
251
|
// src/index.ts
|
|
249
252
|
|
|
250
253
|
|
|
254
|
+
// src/utils/test-factory.ts
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
function testFactory(project) {
|
|
259
|
+
return _core.projectFactory.call(void 0, project, "simnet");
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// src/index.ts
|
|
263
|
+
|
|
251
264
|
var TestProvider = class {
|
|
252
265
|
constructor(clarityBin) {
|
|
253
266
|
this.clarityBin = clarityBin;
|
|
@@ -286,6 +299,34 @@ var TestProvider = class {
|
|
|
286
299
|
provider
|
|
287
300
|
};
|
|
288
301
|
}
|
|
302
|
+
static async fromProject(simnet, options = {}) {
|
|
303
|
+
const allocations = Object.fromEntries(Object.entries(simnet.accounts).map(([name, account]) => {
|
|
304
|
+
return [name, __spreadProps(__spreadValues({}, account), { balance: BigInt(account.balance) })];
|
|
305
|
+
}));
|
|
306
|
+
const clarityBin = options.clarityBin || await _nativebin.createClarityBin.call(void 0, {
|
|
307
|
+
allocations
|
|
308
|
+
});
|
|
309
|
+
let coverageFolder = options.coverageFolder;
|
|
310
|
+
if (process.env.CLARIGEN_COVERAGE) {
|
|
311
|
+
coverageFolder = _path.resolve.call(void 0, process.cwd(), "coverage");
|
|
312
|
+
}
|
|
313
|
+
await deployUtilContract(clarityBin);
|
|
314
|
+
for (const contract of simnet.deployment) {
|
|
315
|
+
let contractFilePath = contract.file;
|
|
316
|
+
if (options.clarinetPath) {
|
|
317
|
+
contractFilePath = _path.resolve.call(void 0, process.cwd(), options.clarinetPath, contractFilePath);
|
|
318
|
+
}
|
|
319
|
+
await _nativebin.deployContract.call(void 0, {
|
|
320
|
+
contractIdentifier: contract.identifier,
|
|
321
|
+
contractFilePath,
|
|
322
|
+
provider: clarityBin,
|
|
323
|
+
coverageFolder
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
const provider = new this(clarityBin);
|
|
327
|
+
provider.coverageFolder = coverageFolder;
|
|
328
|
+
return provider;
|
|
329
|
+
}
|
|
289
330
|
static async fromFactory(contracts, options = {}) {
|
|
290
331
|
const clarityBin = options.clarityBin || await _nativebin.createClarityBin.call(void 0, {
|
|
291
332
|
allocations: options.accounts
|
|
@@ -298,7 +339,10 @@ var TestProvider = class {
|
|
|
298
339
|
for (const k in contracts) {
|
|
299
340
|
if (Object.prototype.hasOwnProperty.call(contracts, k)) {
|
|
300
341
|
const contract = contracts[k];
|
|
301
|
-
|
|
342
|
+
let contractFilePath = contract.contractFile;
|
|
343
|
+
if (options.clarinetPath) {
|
|
344
|
+
contractFilePath = _path.resolve.call(void 0, process.cwd(), options.clarinetPath, contractFilePath);
|
|
345
|
+
}
|
|
302
346
|
if (typeof contractFilePath === "undefined") {
|
|
303
347
|
throw new Error("Cannot setup @clarigen/test - missing contract file.");
|
|
304
348
|
}
|
|
@@ -351,15 +395,21 @@ var TestProvider = class {
|
|
|
351
395
|
}
|
|
352
396
|
async txOk(tx2, senderAddress) {
|
|
353
397
|
const result = await this.tx(tx2, senderAddress);
|
|
398
|
+
const value = _core.expectOk.call(void 0, result.value);
|
|
354
399
|
if (!result.isOk)
|
|
355
400
|
throw new Error(`Expected OK, received error: ${String(result.value)}`);
|
|
356
|
-
return result
|
|
401
|
+
return __spreadProps(__spreadValues({}, result), {
|
|
402
|
+
value
|
|
403
|
+
});
|
|
357
404
|
}
|
|
358
405
|
async txErr(tx2, senderAddress) {
|
|
359
406
|
const result = await this.tx(tx2, senderAddress);
|
|
407
|
+
const value = _core.expectErr.call(void 0, result.value);
|
|
360
408
|
if (result.isOk)
|
|
361
409
|
throw new Error(`Expected Err, received ok: ${String(result.value)}`);
|
|
362
|
-
return result
|
|
410
|
+
return __spreadProps(__spreadValues({}, result), {
|
|
411
|
+
value
|
|
412
|
+
});
|
|
363
413
|
}
|
|
364
414
|
evalCode(code, contractAddress = UTIL_CONTRACT_ID) {
|
|
365
415
|
return evalCode({
|
|
@@ -389,4 +439,5 @@ var TestProvider = class {
|
|
|
389
439
|
|
|
390
440
|
|
|
391
441
|
|
|
392
|
-
|
|
442
|
+
|
|
443
|
+
exports.Allocation = _nativebin.Allocation; exports.TestProvider = TestProvider; exports.createClarityBin = _nativebin.createClarityBin; exports.evalJson = _nativebin.evalJson; exports.executeJson = _nativebin.executeJson; exports.finishCoverage = finishCoverage; exports.getBlockHeight = getBlockHeight; exports.getStxBalance = getStxBalance; exports.makeRandomAddress = makeRandomAddress; exports.mineBlocks = mineBlocks; exports.setupCoverage = setupCoverage; exports.testFactory = testFactory;
|
package/dist/index.mjs
CHANGED
|
@@ -129,7 +129,9 @@ import {
|
|
|
129
129
|
cvToString,
|
|
130
130
|
cvToValue as cvToValue2,
|
|
131
131
|
filterEvents,
|
|
132
|
-
CoreNodeEventType
|
|
132
|
+
CoreNodeEventType,
|
|
133
|
+
ok,
|
|
134
|
+
err
|
|
133
135
|
} from "@clarigen/core";
|
|
134
136
|
import {
|
|
135
137
|
evalRaw,
|
|
@@ -213,10 +215,11 @@ async function tx({
|
|
|
213
215
|
});
|
|
214
216
|
const resultCV = hexToCV2(result.output_serialized);
|
|
215
217
|
const value = cvToValue2(resultCV);
|
|
218
|
+
const resp = result.success ? ok(value) : err(value);
|
|
216
219
|
const baseReturn = {
|
|
217
|
-
value,
|
|
218
220
|
logs: getLogs(result.stderr),
|
|
219
|
-
costs: result.costs
|
|
221
|
+
costs: result.costs,
|
|
222
|
+
value: resp
|
|
220
223
|
};
|
|
221
224
|
if (result.success) {
|
|
222
225
|
return __spreadProps(__spreadValues({}, baseReturn), {
|
|
@@ -247,6 +250,16 @@ async function mapGet({
|
|
|
247
250
|
|
|
248
251
|
// src/index.ts
|
|
249
252
|
import { resolve as resolve2 } from "path";
|
|
253
|
+
|
|
254
|
+
// src/utils/test-factory.ts
|
|
255
|
+
import {
|
|
256
|
+
projectFactory
|
|
257
|
+
} from "@clarigen/core";
|
|
258
|
+
function testFactory(project) {
|
|
259
|
+
return projectFactory(project, "simnet");
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// src/index.ts
|
|
250
263
|
import { Allocation, createClarityBin as createClarityBin2, executeJson as executeJson3, evalJson as evalJson3 } from "@clarigen/native-bin";
|
|
251
264
|
var TestProvider = class {
|
|
252
265
|
constructor(clarityBin) {
|
|
@@ -286,6 +299,34 @@ var TestProvider = class {
|
|
|
286
299
|
provider
|
|
287
300
|
};
|
|
288
301
|
}
|
|
302
|
+
static async fromProject(simnet, options = {}) {
|
|
303
|
+
const allocations = Object.fromEntries(Object.entries(simnet.accounts).map(([name, account]) => {
|
|
304
|
+
return [name, __spreadProps(__spreadValues({}, account), { balance: BigInt(account.balance) })];
|
|
305
|
+
}));
|
|
306
|
+
const clarityBin = options.clarityBin || await createClarityBin({
|
|
307
|
+
allocations
|
|
308
|
+
});
|
|
309
|
+
let coverageFolder = options.coverageFolder;
|
|
310
|
+
if (process.env.CLARIGEN_COVERAGE) {
|
|
311
|
+
coverageFolder = resolve2(process.cwd(), "coverage");
|
|
312
|
+
}
|
|
313
|
+
await deployUtilContract(clarityBin);
|
|
314
|
+
for (const contract of simnet.deployment) {
|
|
315
|
+
let contractFilePath = contract.file;
|
|
316
|
+
if (options.clarinetPath) {
|
|
317
|
+
contractFilePath = resolve2(process.cwd(), options.clarinetPath, contractFilePath);
|
|
318
|
+
}
|
|
319
|
+
await deployContract2({
|
|
320
|
+
contractIdentifier: contract.identifier,
|
|
321
|
+
contractFilePath,
|
|
322
|
+
provider: clarityBin,
|
|
323
|
+
coverageFolder
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
const provider = new this(clarityBin);
|
|
327
|
+
provider.coverageFolder = coverageFolder;
|
|
328
|
+
return provider;
|
|
329
|
+
}
|
|
289
330
|
static async fromFactory(contracts, options = {}) {
|
|
290
331
|
const clarityBin = options.clarityBin || await createClarityBin({
|
|
291
332
|
allocations: options.accounts
|
|
@@ -298,7 +339,10 @@ var TestProvider = class {
|
|
|
298
339
|
for (const k in contracts) {
|
|
299
340
|
if (Object.prototype.hasOwnProperty.call(contracts, k)) {
|
|
300
341
|
const contract = contracts[k];
|
|
301
|
-
|
|
342
|
+
let contractFilePath = contract.contractFile;
|
|
343
|
+
if (options.clarinetPath) {
|
|
344
|
+
contractFilePath = resolve2(process.cwd(), options.clarinetPath, contractFilePath);
|
|
345
|
+
}
|
|
302
346
|
if (typeof contractFilePath === "undefined") {
|
|
303
347
|
throw new Error("Cannot setup @clarigen/test - missing contract file.");
|
|
304
348
|
}
|
|
@@ -351,15 +395,21 @@ var TestProvider = class {
|
|
|
351
395
|
}
|
|
352
396
|
async txOk(tx2, senderAddress) {
|
|
353
397
|
const result = await this.tx(tx2, senderAddress);
|
|
398
|
+
const value = expectOk(result.value);
|
|
354
399
|
if (!result.isOk)
|
|
355
400
|
throw new Error(`Expected OK, received error: ${String(result.value)}`);
|
|
356
|
-
return result
|
|
401
|
+
return __spreadProps(__spreadValues({}, result), {
|
|
402
|
+
value
|
|
403
|
+
});
|
|
357
404
|
}
|
|
358
405
|
async txErr(tx2, senderAddress) {
|
|
359
406
|
const result = await this.tx(tx2, senderAddress);
|
|
407
|
+
const value = expectErr(result.value);
|
|
360
408
|
if (result.isOk)
|
|
361
409
|
throw new Error(`Expected Err, received ok: ${String(result.value)}`);
|
|
362
|
-
return result
|
|
410
|
+
return __spreadProps(__spreadValues({}, result), {
|
|
411
|
+
value
|
|
412
|
+
});
|
|
363
413
|
}
|
|
364
414
|
evalCode(code, contractAddress = UTIL_CONTRACT_ID) {
|
|
365
415
|
return evalCode({
|
|
@@ -388,5 +438,6 @@ export {
|
|
|
388
438
|
getStxBalance,
|
|
389
439
|
makeRandomAddress,
|
|
390
440
|
mineBlocks,
|
|
391
|
-
setupCoverage
|
|
441
|
+
setupCoverage,
|
|
442
|
+
testFactory
|
|
392
443
|
};
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.0.0-next.
|
|
2
|
+
"version": "1.0.0-next.26",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"types": "./dist/index.d.ts",
|
|
5
5
|
"main": "./dist/index.js",
|
|
@@ -16,12 +16,11 @@
|
|
|
16
16
|
"name": "@clarigen/test",
|
|
17
17
|
"author": "Hank Stoever",
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"jest-environment-node": "28.1.1"
|
|
20
|
-
"@clarigen/cli": "1.0.0-next.22"
|
|
19
|
+
"jest-environment-node": "28.1.1"
|
|
21
20
|
},
|
|
22
21
|
"dependencies": {
|
|
23
|
-
"@clarigen/core": "1.0.0-next.
|
|
24
|
-
"@clarigen/native-bin": "1.0.0-next.
|
|
22
|
+
"@clarigen/core": "1.0.0-next.29",
|
|
23
|
+
"@clarigen/native-bin": "1.0.0-next.26",
|
|
25
24
|
"micro-stacks": "^0.5.2"
|
|
26
25
|
},
|
|
27
26
|
"publishConfig": {
|
|
@@ -34,7 +33,7 @@
|
|
|
34
33
|
"test": "pnpm build-test-types && jest",
|
|
35
34
|
"lint": "eslint \"src/**/*.{ts,tsx}\" && prettier --check src/**/*.ts",
|
|
36
35
|
"typecheck": "tsc --noEmit",
|
|
37
|
-
"build-test-types": "
|
|
38
|
-
"publish:dev": "yalc publish --push"
|
|
36
|
+
"build-test-types": "sh build-types.sh",
|
|
37
|
+
"publish:dev": "pnpm build && yalc publish --push"
|
|
39
38
|
}
|
|
40
39
|
}
|