movehat 0.1.3 → 0.1.4

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.
Files changed (58) hide show
  1. package/README.md +159 -80
  2. package/dist/commands/run.d.ts.map +1 -1
  3. package/dist/commands/run.js +40 -3
  4. package/dist/commands/run.js.map +1 -1
  5. package/dist/core/AccountManager.d.ts +186 -0
  6. package/dist/core/AccountManager.d.ts.map +1 -0
  7. package/dist/core/AccountManager.js +363 -0
  8. package/dist/core/AccountManager.js.map +1 -0
  9. package/dist/fork/manager.d.ts +33 -0
  10. package/dist/fork/manager.d.ts.map +1 -1
  11. package/dist/fork/manager.js +61 -0
  12. package/dist/fork/manager.js.map +1 -1
  13. package/dist/fork/storage.d.ts +10 -0
  14. package/dist/fork/storage.d.ts.map +1 -1
  15. package/dist/fork/storage.js +28 -1
  16. package/dist/fork/storage.js.map +1 -1
  17. package/dist/helpers/index.d.ts +8 -1
  18. package/dist/helpers/index.d.ts.map +1 -1
  19. package/dist/helpers/index.js +4 -0
  20. package/dist/helpers/index.js.map +1 -1
  21. package/dist/helpers/setup.d.ts.map +1 -1
  22. package/dist/helpers/setup.js +5 -4
  23. package/dist/helpers/setup.js.map +1 -1
  24. package/dist/helpers/setupLocalTesting.d.ts +60 -0
  25. package/dist/helpers/setupLocalTesting.d.ts.map +1 -0
  26. package/dist/helpers/setupLocalTesting.js +277 -0
  27. package/dist/helpers/setupLocalTesting.js.map +1 -0
  28. package/dist/helpers/testFixtures.d.ts +115 -0
  29. package/dist/helpers/testFixtures.d.ts.map +1 -0
  30. package/dist/helpers/testFixtures.js +163 -0
  31. package/dist/helpers/testFixtures.js.map +1 -0
  32. package/dist/node/LocalNodeManager.d.ts +68 -0
  33. package/dist/node/LocalNodeManager.d.ts.map +1 -0
  34. package/dist/node/LocalNodeManager.js +237 -0
  35. package/dist/node/LocalNodeManager.js.map +1 -0
  36. package/dist/runtime.d.ts.map +1 -1
  37. package/dist/runtime.js +91 -46
  38. package/dist/runtime.js.map +1 -1
  39. package/dist/templates/README.md +17 -4
  40. package/dist/templates/move/sources/Counter.move +12 -4
  41. package/dist/templates/tests/Counter.test.ts +98 -57
  42. package/dist/types/config.d.ts +24 -0
  43. package/dist/types/config.d.ts.map +1 -1
  44. package/package.json +1 -1
  45. package/src/commands/run.ts +43 -3
  46. package/src/core/AccountManager.ts +439 -0
  47. package/src/fork/manager.ts +74 -0
  48. package/src/fork/storage.ts +33 -1
  49. package/src/helpers/index.ts +18 -1
  50. package/src/helpers/setup.ts +4 -3
  51. package/src/helpers/setupLocalTesting.ts +335 -0
  52. package/src/helpers/testFixtures.ts +222 -0
  53. package/src/node/LocalNodeManager.ts +297 -0
  54. package/src/runtime.ts +108 -47
  55. package/src/templates/README.md +17 -4
  56. package/src/templates/move/sources/Counter.move +12 -4
  57. package/src/templates/tests/Counter.test.ts +98 -57
  58. package/src/types/config.ts +32 -0
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/helpers/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,EAIN,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,wBAAsB,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA0BzF;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/helpers/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,EAIN,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;CACvB;AAED,wBAAsB,oBAAoB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA0BzF;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
@@ -1,5 +1,6 @@
1
- import { Account, Aptos, AptosConfig, Ed25519PrivateKey, } from "@aptos-labs/ts-sdk";
1
+ import { Aptos, AptosConfig, } from "@aptos-labs/ts-sdk";
2
2
  import { loadUserConfig, resolveNetworkConfig } from "../core/config.js";
3
+ import { AccountManager } from "../core/AccountManager.js";
3
4
  export async function setupTestEnvironment(networkName) {
4
5
  // Load and resolve config for selected network
5
6
  const userConfig = await loadUserConfig();
@@ -10,8 +11,8 @@ export async function setupTestEnvironment(networkName) {
10
11
  fullnode: config.rpc,
11
12
  });
12
13
  const aptos = new Aptos(aptosConfig);
13
- const privateKey = new Ed25519PrivateKey(config.privateKey);
14
- const account = Account.fromPrivateKey({ privateKey });
14
+ // Load account using AccountManager
15
+ const account = AccountManager.loadAccountFromPrivateKey(config.privateKey);
15
16
  console.log(`✅ Test environment ready`);
16
17
  console.log(` Account: ${account.accountAddress.toString()}`);
17
18
  console.log(` Network: ${config.network}`);
@@ -23,6 +24,6 @@ export async function setupTestEnvironment(networkName) {
23
24
  };
24
25
  }
25
26
  export function createTestAccount() {
26
- return Account.generate();
27
+ return AccountManager.createAccount();
27
28
  }
28
29
  //# sourceMappingURL=setup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/helpers/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,KAAK,EACL,WAAW,EACX,iBAAiB,GAElB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AASzE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAoB;IAC7D,+CAA+C;IAC/C,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAE/D,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;QAClC,OAAO,EAAE,MAAM,CAAC,OAAkB;QAClC,QAAQ,EAAE,MAAM,CAAC,GAAG;KACrB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IAErC,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAEvC,OAAO;QACL,KAAK;QACL,OAAO;QACP,MAAM;KACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,OAAO,OAAO,CAAC,QAAQ,EAAE,CAAC;AAC9B,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/helpers/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EACL,WAAW,GAGZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAQ3D,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAoB;IAC7D,+CAA+C;IAC/C,MAAM,UAAU,GAAG,MAAM,cAAc,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAC1D,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAE/D,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;QAClC,OAAO,EAAE,MAAM,CAAC,OAAkB;QAClC,QAAQ,EAAE,MAAM,CAAC,GAAG;KACrB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IAErC,oCAAoC;IACpC,MAAM,OAAO,GAAG,cAAc,CAAC,yBAAyB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAE5E,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAEvC,OAAO;QACL,KAAK;QACL,OAAO;QACP,MAAM;KACP,CAAA;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC7B,OAAO,cAAc,CAAC,aAAa,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,60 @@
1
+ import type { MovehatRuntime } from "../types/runtime.js";
2
+ import { ForkManager } from "../fork/manager.js";
3
+ import { LocalNodeManager } from "../node/LocalNodeManager.js";
4
+ import type { LocalTestOptions } from "../types/config.js";
5
+ /**
6
+ * Setup a local testing environment with either a local node or fork server
7
+ *
8
+ * This function provides a complete local testing setup similar to Hardhat:
9
+ *
10
+ * **Local Node Mode** (default, recommended):
11
+ * 1. Starts a full Movement node locally
12
+ * 2. Generates and funds test accounts from local faucet
13
+ * 3. Auto-deploys modules (works because node can process transactions)
14
+ * 4. Returns runtime ready to use
15
+ *
16
+ * **Fork Mode** (faster, read-only):
17
+ * 1. Creates/loads a fork of testnet
18
+ * 2. Starts a fork server
19
+ * 3. Generates and funds accounts (in fork state only)
20
+ * 4. Cannot auto-deploy (fork is read-only)
21
+ * 5. Returns runtime for reading data
22
+ *
23
+ * @param options Configuration options for local testing
24
+ * @returns MovehatRuntime configured for local testing
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * // Local node mode (default) - Full blockchain, can deploy
29
+ * const mh = await setupLocalTesting({
30
+ * mode: 'local-node',
31
+ * accountLabels: ['alice', 'bob'],
32
+ * autoDeploy: ['counter'], // ✅ Works!
33
+ * });
34
+ *
35
+ * // Fork mode - Fast, read-only
36
+ * const mh = await setupLocalTesting({
37
+ * mode: 'fork',
38
+ * accountLabels: ['alice', 'bob'],
39
+ * autoDeploy: ['counter'], // ❌ Won't work (fork can't deploy)
40
+ * });
41
+ * ```
42
+ */
43
+ export declare function setupLocalTesting(options?: LocalTestOptions): Promise<MovehatRuntime>;
44
+ /**
45
+ * Stop the local testing environment (cleanup)
46
+ */
47
+ export declare function stopLocalTesting(): Promise<void>;
48
+ /**
49
+ * Get the current fork manager (if fork mode is active)
50
+ */
51
+ export declare function getCurrentForkManager(): ForkManager | null;
52
+ /**
53
+ * Get the current local node (if local node mode is active)
54
+ */
55
+ export declare function getCurrentLocalNode(): LocalNodeManager | null;
56
+ /**
57
+ * Reset fork state to initial snapshot (fork mode only)
58
+ */
59
+ export declare function resetForkState(): Promise<void>;
60
+ //# sourceMappingURL=setupLocalTesting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupLocalTesting.d.ts","sourceRoot":"","sources":["../../src/helpers/setupLocalTesting.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAM3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAgBzB;AA2ND;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBtD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,GAAG,IAAI,CAE1D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAE7D;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAMpD"}
@@ -0,0 +1,277 @@
1
+ import { join } from "path";
2
+ import { existsSync } from "fs";
3
+ import { initRuntime } from "../runtime.js";
4
+ import { ForkManager } from "../fork/manager.js";
5
+ import { ForkServer } from "../fork/server.js";
6
+ import { LocalNodeManager } from "../node/LocalNodeManager.js";
7
+ import { AccountManager } from "../core/AccountManager.js";
8
+ let currentForkServer = null;
9
+ let currentForkManager = null;
10
+ let currentLocalNode = null;
11
+ /**
12
+ * Setup a local testing environment with either a local node or fork server
13
+ *
14
+ * This function provides a complete local testing setup similar to Hardhat:
15
+ *
16
+ * **Local Node Mode** (default, recommended):
17
+ * 1. Starts a full Movement node locally
18
+ * 2. Generates and funds test accounts from local faucet
19
+ * 3. Auto-deploys modules (works because node can process transactions)
20
+ * 4. Returns runtime ready to use
21
+ *
22
+ * **Fork Mode** (faster, read-only):
23
+ * 1. Creates/loads a fork of testnet
24
+ * 2. Starts a fork server
25
+ * 3. Generates and funds accounts (in fork state only)
26
+ * 4. Cannot auto-deploy (fork is read-only)
27
+ * 5. Returns runtime for reading data
28
+ *
29
+ * @param options Configuration options for local testing
30
+ * @returns MovehatRuntime configured for local testing
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * // Local node mode (default) - Full blockchain, can deploy
35
+ * const mh = await setupLocalTesting({
36
+ * mode: 'local-node',
37
+ * accountLabels: ['alice', 'bob'],
38
+ * autoDeploy: ['counter'], // ✅ Works!
39
+ * });
40
+ *
41
+ * // Fork mode - Fast, read-only
42
+ * const mh = await setupLocalTesting({
43
+ * mode: 'fork',
44
+ * accountLabels: ['alice', 'bob'],
45
+ * autoDeploy: ['counter'], // ❌ Won't work (fork can't deploy)
46
+ * });
47
+ * ```
48
+ */
49
+ export async function setupLocalTesting(options = {}) {
50
+ // Default options
51
+ const mode = options.mode || 'local-node'; // Default to local node
52
+ const autoFund = options.autoFund !== false; // default true
53
+ const defaultBalance = options.defaultBalance || 100_000_000; // 100 APT
54
+ const accountLabels = options.accountLabels || ["deployer", "alice", "bob"];
55
+ console.log(`\n🔧 Setting up local testing environment...`);
56
+ console.log(` Mode: ${mode}`);
57
+ console.log(` Accounts: ${accountLabels.join(", ")}\n`);
58
+ if (mode === 'local-node') {
59
+ return await setupWithLocalNode(options, accountLabels, autoFund, defaultBalance);
60
+ }
61
+ else {
62
+ return await setupWithFork(options, accountLabels, autoFund, defaultBalance);
63
+ }
64
+ }
65
+ /**
66
+ * Setup using local Movement node (full blockchain)
67
+ */
68
+ async function setupWithLocalNode(options, accountLabels, autoFund, defaultBalance) {
69
+ const nodeTestDir = options.nodeTestDir || join(process.cwd(), ".movehat", "local-node");
70
+ const nodeForceRestart = options.nodeForceRestart !== false; // default true
71
+ const nodeFaucetPort = options.nodeFaucetPort || 8081;
72
+ const nodeApiPort = options.nodeApiPort || 8080;
73
+ const nodeReadyPort = options.nodeReadyPort || 8070;
74
+ const nodeSilent = options.nodeSilent ?? false;
75
+ // 1. Start local node
76
+ const localNode = new LocalNodeManager({
77
+ testDir: nodeTestDir,
78
+ forceRestart: nodeForceRestart,
79
+ faucetPort: nodeFaucetPort,
80
+ apiPort: nodeApiPort,
81
+ readyPort: nodeReadyPort,
82
+ silent: nodeSilent,
83
+ });
84
+ currentLocalNode = localNode;
85
+ const nodeInfo = await localNode.start();
86
+ // 2. Generate accounts with AccountManager
87
+ console.log(`👥 Generating ${accountLabels.length} test accounts...`);
88
+ const accounts = AccountManager.createBatch(accountLabels);
89
+ for (const [label, account] of Object.entries(accounts)) {
90
+ console.log(` ${label}: ${account.accountAddress.toString()}`);
91
+ }
92
+ console.log();
93
+ // 3. Fund accounts from local faucet
94
+ if (autoFund) {
95
+ const accountsList = Object.values(accounts);
96
+ await localNode.fundAccounts(accountsList, defaultBalance);
97
+ }
98
+ // 4. Initialize runtime pointing to local node
99
+ console.log(`⚙️ Initializing runtime for local network...`);
100
+ const deployerPrivateKey = AccountManager.exportPrivateKeys(["deployer"]).deployer;
101
+ if (!deployerPrivateKey) {
102
+ throw new Error("Failed to get deployer private key");
103
+ }
104
+ const runtime = await initRuntime({
105
+ network: "local",
106
+ configOverride: {
107
+ networks: {
108
+ local: {
109
+ url: `${nodeInfo.rpcUrl}/v1`,
110
+ chainId: "local",
111
+ },
112
+ },
113
+ accounts: [deployerPrivateKey],
114
+ },
115
+ });
116
+ console.log(`✓ Runtime initialized\n`);
117
+ // 5. Auto-deploy modules if specified
118
+ if (options.autoDeploy && options.autoDeploy.length > 0) {
119
+ console.log(`📦 Auto-deploying ${options.autoDeploy.length} module(s)...`);
120
+ // Force redeploy in local-node mode (for testing)
121
+ const previousRedeploy = process.env.MH_CLI_REDEPLOY;
122
+ process.env.MH_CLI_REDEPLOY = 'true';
123
+ try {
124
+ for (const moduleName of options.autoDeploy) {
125
+ try {
126
+ console.log(` Deploying ${moduleName}...`);
127
+ await runtime.deployContract(moduleName);
128
+ console.log(` ✓ ${moduleName} deployed`);
129
+ }
130
+ catch (error) {
131
+ console.error(` ✗ Failed to deploy ${moduleName}: ${error.message}`);
132
+ throw error;
133
+ }
134
+ }
135
+ }
136
+ finally {
137
+ // Restore previous value
138
+ if (previousRedeploy === undefined) {
139
+ delete process.env.MH_CLI_REDEPLOY;
140
+ }
141
+ else {
142
+ process.env.MH_CLI_REDEPLOY = previousRedeploy;
143
+ }
144
+ }
145
+ console.log();
146
+ }
147
+ console.log(`✅ Local testing environment ready!\n`);
148
+ console.log(` Mode: local-node`);
149
+ console.log(` RPC: ${nodeInfo.rpcUrl}/v1`);
150
+ console.log(` Faucet: ${nodeInfo.faucetUrl}`);
151
+ console.log(` Accounts: ${Array.from(accountLabels).join(", ")}`);
152
+ console.log(` Balance per account: ${defaultBalance / 100_000_000} APT\n`);
153
+ return runtime;
154
+ }
155
+ /**
156
+ * Setup using fork server (read-only)
157
+ */
158
+ async function setupWithFork(options, accountLabels, autoFund, defaultBalance) {
159
+ const forkNetwork = options.forkNetwork || "testnet";
160
+ const forkName = options.forkName || "test-local";
161
+ const forkPort = options.forkPort || 8080;
162
+ const forkResetState = options.forkResetState !== false; // default true
163
+ console.log(` Fork network: ${forkNetwork}`);
164
+ console.log(` Fork name: ${forkName}`);
165
+ console.log(` Server port: ${forkPort}\n`);
166
+ // Warn about auto-deploy in fork mode
167
+ if (options.autoDeploy && options.autoDeploy.length > 0) {
168
+ console.warn(`⚠️ WARNING: Auto-deploy doesn't work in fork mode (read-only).`);
169
+ console.warn(` Switch to 'local-node' mode for deployment support.\n`);
170
+ }
171
+ // 1. Setup fork
172
+ const forkPath = join(process.cwd(), ".movehat", "forks", forkName);
173
+ const forkManager = new ForkManager(forkPath);
174
+ currentForkManager = forkManager;
175
+ const forkExists = existsSync(join(forkPath, "metadata.json"));
176
+ if (!forkExists) {
177
+ console.log(`📸 Creating fork from ${forkNetwork}...`);
178
+ const testnetRpc = "https://testnet.movementnetwork.xyz/v1";
179
+ await forkManager.initialize(testnetRpc, forkNetwork);
180
+ console.log(`✓ Fork created at ${forkPath}\n`);
181
+ }
182
+ else {
183
+ console.log(`✓ Loading existing fork from ${forkPath}`);
184
+ forkManager.load();
185
+ if (forkResetState) {
186
+ console.log(`🔄 Resetting fork state...`);
187
+ await forkManager.resetState();
188
+ }
189
+ console.log();
190
+ }
191
+ // 2. Start fork server
192
+ console.log(`🚀 Starting fork server on port ${forkPort}...`);
193
+ const forkServer = new ForkServer(forkPath, forkPort);
194
+ currentForkServer = forkServer;
195
+ await forkServer.start();
196
+ console.log(`✓ Fork server running at http://localhost:${forkPort}\n`);
197
+ await new Promise((resolve) => setTimeout(resolve, 500));
198
+ // 3. Generate accounts
199
+ console.log(`👥 Generating ${accountLabels.length} test accounts...`);
200
+ const accounts = AccountManager.createBatch(accountLabels);
201
+ for (const [label, account] of Object.entries(accounts)) {
202
+ console.log(` ${label}: ${account.accountAddress.toString()}`);
203
+ }
204
+ console.log();
205
+ // 4. Fund accounts in fork
206
+ if (autoFund) {
207
+ const addresses = Object.values(accounts).map((acc) => acc.accountAddress.toString());
208
+ await forkManager.fundMultipleAccounts(addresses, defaultBalance);
209
+ }
210
+ // 5. Initialize runtime pointing to fork
211
+ console.log(`⚙️ Initializing runtime for local network...`);
212
+ const deployerPrivateKey = AccountManager.exportPrivateKeys(["deployer"]).deployer;
213
+ if (!deployerPrivateKey) {
214
+ throw new Error("Failed to get deployer private key");
215
+ }
216
+ const runtime = await initRuntime({
217
+ network: "local",
218
+ configOverride: {
219
+ networks: {
220
+ local: {
221
+ url: `http://localhost:${forkPort}/v1`,
222
+ chainId: "local",
223
+ },
224
+ },
225
+ accounts: [deployerPrivateKey],
226
+ },
227
+ });
228
+ console.log(`✓ Runtime initialized\n`);
229
+ console.log(`✅ Local testing environment ready!\n`);
230
+ console.log(` Mode: fork (read-only)`);
231
+ console.log(` RPC: http://localhost:${forkPort}/v1`);
232
+ console.log(` Accounts: ${Array.from(accountLabels).join(", ")}`);
233
+ console.log(` Balance per account: ${defaultBalance / 100_000_000} APT\n`);
234
+ return runtime;
235
+ }
236
+ /**
237
+ * Stop the local testing environment (cleanup)
238
+ */
239
+ export async function stopLocalTesting() {
240
+ console.log(`\n🛑 Stopping local testing environment...`);
241
+ // Stop local node if running
242
+ if (currentLocalNode) {
243
+ await currentLocalNode.stop();
244
+ currentLocalNode = null;
245
+ }
246
+ // Stop fork server if running
247
+ if (currentForkServer) {
248
+ await currentForkServer.stop();
249
+ currentForkServer = null;
250
+ currentForkManager = null;
251
+ }
252
+ console.log(`✓ Environment stopped\n`);
253
+ }
254
+ /**
255
+ * Get the current fork manager (if fork mode is active)
256
+ */
257
+ export function getCurrentForkManager() {
258
+ return currentForkManager;
259
+ }
260
+ /**
261
+ * Get the current local node (if local node mode is active)
262
+ */
263
+ export function getCurrentLocalNode() {
264
+ return currentLocalNode;
265
+ }
266
+ /**
267
+ * Reset fork state to initial snapshot (fork mode only)
268
+ */
269
+ export async function resetForkState() {
270
+ if (currentForkManager) {
271
+ await currentForkManager.resetState();
272
+ }
273
+ else {
274
+ console.warn("Warning: No active fork manager to reset");
275
+ }
276
+ }
277
+ //# sourceMappingURL=setupLocalTesting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setupLocalTesting.js","sourceRoot":"","sources":["../../src/helpers/setupLocalTesting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,IAAI,iBAAiB,GAAsB,IAAI,CAAC;AAChD,IAAI,kBAAkB,GAAuB,IAAI,CAAC;AAClD,IAAI,gBAAgB,GAA4B,IAAI,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,UAA4B,EAAE;IAE9B,kBAAkB;IAClB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC,CAAE,wBAAwB;IACpE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,eAAe;IAC5D,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,WAAW,CAAC,CAAC,UAAU;IACxE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAE5E,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,gBAAgB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC1B,OAAO,MAAM,kBAAkB,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,OAAO,MAAM,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAC/B,OAAyB,EACzB,aAAgC,EAChC,QAAiB,EACjB,cAAsB;IAEtB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;IACzF,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,KAAK,KAAK,CAAC,CAAC,eAAe;IAC5E,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC;IACtD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC;IAChD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC;IAE/C,sBAAsB;IACtB,MAAM,SAAS,GAAG,IAAI,gBAAgB,CAAC;QACrC,OAAO,EAAE,WAAW;QACpB,YAAY,EAAE,gBAAgB;QAC9B,UAAU,EAAE,cAAc;QAC1B,OAAO,EAAE,WAAW;QACpB,SAAS,EAAE,aAAa;QACxB,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC;IAEH,gBAAgB,GAAG,SAAS,CAAC;IAE7B,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;IAEzC,2CAA2C;IAC3C,OAAO,CAAC,GAAG,CAAC,iBAAiB,aAAa,CAAC,MAAM,mBAAmB,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAE3D,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,qCAAqC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,SAAS,CAAC,YAAY,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAC7D,CAAC;IAED,+CAA+C;IAC/C,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE7D,MAAM,kBAAkB,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEnF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC;QAChC,OAAO,EAAE,OAAO;QAChB,cAAc,EAAE;YACd,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,GAAG,EAAE,GAAG,QAAQ,CAAC,MAAM,KAAK;oBAC5B,OAAO,EAAE,OAAO;iBACjB;aACF;YACD,QAAQ,EAAE,CAAC,kBAAkB,CAAC;SAC/B;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEvC,sCAAsC;IACtC,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,UAAU,CAAC,MAAM,eAAe,CAAC,CAAC;QAE3E,kDAAkD;QAClD,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC;QAErC,IAAI,CAAC;YACH,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC5C,IAAI,CAAC;oBACH,OAAO,CAAC,GAAG,CAAC,gBAAgB,UAAU,KAAK,CAAC,CAAC;oBAC7C,MAAM,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;oBACzC,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,WAAW,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,KAAU,EAAE,CAAC;oBACpB,OAAO,CAAC,KAAK,CAAC,yBAAyB,UAAU,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;oBACvE,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,yBAAyB;YACzB,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;gBACnC,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,gBAAgB,CAAC;YACjD,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,2BAA2B,cAAc,GAAG,WAAW,QAAQ,CAAC,CAAC;IAE7E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,OAAyB,EACzB,aAAgC,EAChC,QAAiB,EACjB,cAAsB;IAEtB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAC;IAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC1C,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,eAAe;IAExE,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,EAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,IAAI,CAAC,CAAC;IAE7C,sCAAsC;IACtC,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC3E,CAAC;IAED,gBAAgB;IAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9C,kBAAkB,GAAG,WAAW,CAAC;IAEjC,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC;IAE/D,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,KAAK,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,wCAAwC,CAAC;QAC5D,MAAM,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,IAAI,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;QACxD,WAAW,CAAC,IAAI,EAAE,CAAC;QAEnB,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,MAAM,WAAW,CAAC,UAAU,EAAE,CAAC;QACjC,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,uBAAuB;IACvB,OAAO,CAAC,GAAG,CAAC,mCAAmC,QAAQ,KAAK,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtD,iBAAiB,GAAG,UAAU,CAAC;IAE/B,MAAM,UAAU,CAAC,KAAK,EAAE,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,6CAA6C,QAAQ,IAAI,CAAC,CAAC;IAEvE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;IAEzD,uBAAuB;IACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,aAAa,CAAC,MAAM,mBAAmB,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAE3D,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,KAAK,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,2BAA2B;IAC3B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACpD,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,CAC9B,CAAC;QACF,MAAM,WAAW,CAAC,oBAAoB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACpE,CAAC;IAED,yCAAyC;IACzC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAE7D,MAAM,kBAAkB,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEnF,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC;QAChC,OAAO,EAAE,OAAO;QAChB,cAAc,EAAE;YACd,QAAQ,EAAE;gBACR,KAAK,EAAE;oBACL,GAAG,EAAE,oBAAoB,QAAQ,KAAK;oBACtC,OAAO,EAAE,OAAO;iBACjB;aACF;YACD,QAAQ,EAAE,CAAC,kBAAkB,CAAC;SAC/B;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,4BAA4B,QAAQ,KAAK,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,2BAA2B,cAAc,GAAG,WAAW,QAAQ,CAAC,CAAC;IAE7E,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;IAE1D,6BAA6B;IAC7B,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAC9B,gBAAgB,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,8BAA8B;IAC9B,IAAI,iBAAiB,EAAE,CAAC;QACtB,MAAM,iBAAiB,CAAC,IAAI,EAAE,CAAC;QAC/B,iBAAiB,GAAG,IAAI,CAAC;QACzB,kBAAkB,GAAG,IAAI,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,kBAAkB,CAAC,UAAU,EAAE,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
@@ -0,0 +1,115 @@
1
+ import type { Account } from "@aptos-labs/ts-sdk";
2
+ import type { MovehatRuntime } from "../types/runtime.js";
3
+ import type { MoveContract } from "../core/contract.js";
4
+ import type { LocalTestOptions } from "../types/config.js";
5
+ /**
6
+ * Test fixture with pre-configured accounts and contracts
7
+ *
8
+ * @template TModules - Union type of module names for type-safe contract access
9
+ */
10
+ export interface TestFixture<TModules extends string = string> {
11
+ /** Movehat runtime instance */
12
+ mh: MovehatRuntime;
13
+ /** Named accounts (deployer, alice, bob, etc.) */
14
+ accounts: {
15
+ deployer: Account;
16
+ alice: Account;
17
+ bob: Account;
18
+ [key: string]: Account;
19
+ };
20
+ /** Deployed contracts by module name - type-safe based on modules parameter */
21
+ contracts: Record<TModules, MoveContract>;
22
+ }
23
+ /**
24
+ * Setup a complete test fixture with local fork, accounts, and deployed contracts
25
+ *
26
+ * This is the recommended way to setup tests in movehat. It provides:
27
+ * - Local fork server (no testnet required)
28
+ * - Pre-funded labeled accounts
29
+ * - Auto-deployment of specified modules
30
+ * - Contract instances ready to use
31
+ *
32
+ * @param modules Array of module names to auto-deploy
33
+ * @param accountLabels Optional array of account labels (defaults to ['alice', 'bob'])
34
+ * @param options Optional LocalTestOptions for advanced configuration
35
+ * @returns TestFixture with runtime, accounts, and contracts
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * import { setupTestFixture } from "movehat/helpers";
40
+ *
41
+ * describe("Counter Contract", () => {
42
+ * let fixture: TestFixture;
43
+ *
44
+ * before(async function () {
45
+ * this.timeout(60000); // Allow time for fork + deployment
46
+ *
47
+ * fixture = await setupTestFixture(['counter'], ['alice', 'bob']);
48
+ * });
49
+ *
50
+ * it("should initialize with value 0", async () => {
51
+ * const counter = fixture.contracts.counter;
52
+ * const value = await counter.view<number>("get", [
53
+ * fixture.accounts.deployer.accountAddress.toString()
54
+ * ]);
55
+ *
56
+ * expect(value).to.equal(0);
57
+ * });
58
+ *
59
+ * it("alice can increment counter", async () => {
60
+ * const tx = await fixture.contracts.counter.call(
61
+ * fixture.accounts.alice,
62
+ * "increment",
63
+ * []
64
+ * );
65
+ *
66
+ * expect(tx.success).to.be.true;
67
+ * });
68
+ *
69
+ * after(async () => {
70
+ * await teardownTestFixture();
71
+ * });
72
+ * });
73
+ * ```
74
+ */
75
+ export declare function setupTestFixture<TModules extends readonly string[]>(modules: TModules, accountLabels?: string[], options?: Partial<LocalTestOptions>): Promise<TestFixture<TModules[number]>>;
76
+ /**
77
+ * Teardown test fixture and cleanup resources
78
+ *
79
+ * Call this in your test suite's `after` hook to properly cleanup:
80
+ * - Stops fork server
81
+ * - Clears account pool
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * after(async () => {
86
+ * await teardownTestFixture();
87
+ * });
88
+ * ```
89
+ */
90
+ export declare function teardownTestFixture(): Promise<void>;
91
+ /**
92
+ * Create a minimal test fixture without auto-deployment
93
+ * Useful when you want to deploy contracts manually in tests
94
+ *
95
+ * @param accountLabels Account labels to create (defaults to ['alice', 'bob'])
96
+ * @param options Optional LocalTestOptions
97
+ * @returns Partial TestFixture (without contracts)
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * let fixture: Partial<TestFixture>;
102
+ *
103
+ * before(async function () {
104
+ * this.timeout(30000);
105
+ * fixture = await setupMinimalFixture(['alice', 'bob', 'charlie']);
106
+ * });
107
+ *
108
+ * it("should deploy contract manually", async () => {
109
+ * await fixture.mh!.deployContract("counter");
110
+ * // ...
111
+ * });
112
+ * ```
113
+ */
114
+ export declare function setupMinimalFixture(accountLabels?: string[], options?: Partial<LocalTestOptions>): Promise<Omit<TestFixture, "contracts">>;
115
+ //# sourceMappingURL=testFixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testFixtures.d.ts","sourceRoot":"","sources":["../../src/helpers/testFixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,WAAW,WAAW,CAAC,QAAQ,SAAS,MAAM,GAAG,MAAM;IAC3D,+BAA+B;IAC/B,EAAE,EAAE,cAAc,CAAC;IAEnB,kDAAkD;IAClD,QAAQ,EAAE;QACR,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,OAAO,CAAC;QACf,GAAG,EAAE,OAAO,CAAC;QACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IAEF,+EAA+E;IAC/E,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,SAAS,SAAS,MAAM,EAAE,EACvE,OAAO,EAAE,QAAQ,EACjB,aAAa,GAAE,MAAM,EAAqB,EAC1C,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACtC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAsDxC;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAUzD;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,mBAAmB,CACvC,aAAa,GAAE,MAAM,EAAqB,EAC1C,OAAO,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACtC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CA6BzC"}