genlayer 0.33.1 → 0.34.1

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 (128) hide show
  1. package/dist/index.js +68 -31
  2. package/package.json +11 -2
  3. package/.eslintignore +0 -2
  4. package/.github/workflows/cli-docs.yml +0 -121
  5. package/.github/workflows/publish-beta.yml +0 -41
  6. package/.github/workflows/publish.yml +0 -43
  7. package/.github/workflows/validate-code.yml +0 -47
  8. package/.prettierignore +0 -19
  9. package/.prettierrc +0 -12
  10. package/.release-it.json +0 -64
  11. package/CHANGELOG.md +0 -419
  12. package/CLAUDE.md +0 -55
  13. package/CONTRIBUTING.md +0 -117
  14. package/docker-compose.yml +0 -154
  15. package/docs/delegator-guide.md +0 -203
  16. package/docs/validator-guide.md +0 -329
  17. package/esbuild.config.dev.js +0 -17
  18. package/esbuild.config.js +0 -22
  19. package/esbuild.config.prod.js +0 -17
  20. package/eslint.config.js +0 -60
  21. package/renovate.json +0 -22
  22. package/src/commands/account/create.ts +0 -29
  23. package/src/commands/account/export.ts +0 -106
  24. package/src/commands/account/import.ts +0 -135
  25. package/src/commands/account/index.ts +0 -126
  26. package/src/commands/account/list.ts +0 -34
  27. package/src/commands/account/lock.ts +0 -39
  28. package/src/commands/account/remove.ts +0 -30
  29. package/src/commands/account/send.ts +0 -156
  30. package/src/commands/account/show.ts +0 -74
  31. package/src/commands/account/unlock.ts +0 -51
  32. package/src/commands/account/use.ts +0 -21
  33. package/src/commands/config/getSetReset.ts +0 -51
  34. package/src/commands/config/index.ts +0 -30
  35. package/src/commands/contracts/call.ts +0 -39
  36. package/src/commands/contracts/code.ts +0 -33
  37. package/src/commands/contracts/deploy.ts +0 -157
  38. package/src/commands/contracts/index.ts +0 -86
  39. package/src/commands/contracts/schema.ts +0 -31
  40. package/src/commands/contracts/write.ts +0 -49
  41. package/src/commands/general/index.ts +0 -45
  42. package/src/commands/general/init.ts +0 -179
  43. package/src/commands/general/start.ts +0 -116
  44. package/src/commands/general/stop.ts +0 -26
  45. package/src/commands/localnet/index.ts +0 -100
  46. package/src/commands/localnet/validators.ts +0 -269
  47. package/src/commands/network/index.ts +0 -29
  48. package/src/commands/network/setNetwork.ts +0 -77
  49. package/src/commands/scaffold/index.ts +0 -16
  50. package/src/commands/scaffold/new.ts +0 -34
  51. package/src/commands/staking/StakingAction.ts +0 -267
  52. package/src/commands/staking/delegatorClaim.ts +0 -41
  53. package/src/commands/staking/delegatorExit.ts +0 -56
  54. package/src/commands/staking/delegatorJoin.ts +0 -44
  55. package/src/commands/staking/index.ts +0 -346
  56. package/src/commands/staking/setIdentity.ts +0 -78
  57. package/src/commands/staking/setOperator.ts +0 -46
  58. package/src/commands/staking/stakingInfo.ts +0 -584
  59. package/src/commands/staking/validatorClaim.ts +0 -43
  60. package/src/commands/staking/validatorDeposit.ts +0 -48
  61. package/src/commands/staking/validatorExit.ts +0 -63
  62. package/src/commands/staking/validatorHistory.ts +0 -298
  63. package/src/commands/staking/validatorJoin.ts +0 -47
  64. package/src/commands/staking/validatorPrime.ts +0 -73
  65. package/src/commands/staking/wizard.ts +0 -809
  66. package/src/commands/transactions/appeal.ts +0 -39
  67. package/src/commands/transactions/index.ts +0 -39
  68. package/src/commands/transactions/receipt.ts +0 -90
  69. package/src/commands/update/index.ts +0 -25
  70. package/src/commands/update/ollama.ts +0 -103
  71. package/src/lib/actions/BaseAction.ts +0 -295
  72. package/src/lib/clients/jsonRpcClient.ts +0 -41
  73. package/src/lib/clients/system.ts +0 -73
  74. package/src/lib/config/ConfigFileManager.ts +0 -194
  75. package/src/lib/config/KeychainManager.ts +0 -89
  76. package/src/lib/config/simulator.ts +0 -68
  77. package/src/lib/config/text.ts +0 -2
  78. package/src/lib/errors/missingRequirement.ts +0 -9
  79. package/src/lib/errors/versionRequired.ts +0 -9
  80. package/src/lib/interfaces/ISimulatorService.ts +0 -37
  81. package/src/lib/services/simulator.ts +0 -351
  82. package/src/types/node-fetch.d.ts +0 -1
  83. package/tests/actions/appeal.test.ts +0 -99
  84. package/tests/actions/call.test.ts +0 -94
  85. package/tests/actions/code.test.ts +0 -87
  86. package/tests/actions/create.test.ts +0 -65
  87. package/tests/actions/deploy.test.ts +0 -420
  88. package/tests/actions/getSetReset.test.ts +0 -88
  89. package/tests/actions/init.test.ts +0 -467
  90. package/tests/actions/lock.test.ts +0 -86
  91. package/tests/actions/new.test.ts +0 -80
  92. package/tests/actions/ollama.test.ts +0 -193
  93. package/tests/actions/receipt.test.ts +0 -261
  94. package/tests/actions/schema.test.ts +0 -94
  95. package/tests/actions/setNetwork.test.ts +0 -160
  96. package/tests/actions/staking.test.ts +0 -279
  97. package/tests/actions/start.test.ts +0 -235
  98. package/tests/actions/stop.test.ts +0 -77
  99. package/tests/actions/unlock.test.ts +0 -139
  100. package/tests/actions/validators.test.ts +0 -750
  101. package/tests/actions/write.test.ts +0 -102
  102. package/tests/commands/account.test.ts +0 -146
  103. package/tests/commands/appeal.test.ts +0 -58
  104. package/tests/commands/call.test.ts +0 -78
  105. package/tests/commands/code.test.ts +0 -69
  106. package/tests/commands/config.test.ts +0 -54
  107. package/tests/commands/deploy.test.ts +0 -83
  108. package/tests/commands/init.test.ts +0 -101
  109. package/tests/commands/localnet.test.ts +0 -131
  110. package/tests/commands/network.test.ts +0 -60
  111. package/tests/commands/new.test.ts +0 -68
  112. package/tests/commands/receipt.test.ts +0 -142
  113. package/tests/commands/schema.test.ts +0 -67
  114. package/tests/commands/staking.test.ts +0 -329
  115. package/tests/commands/stop.test.ts +0 -27
  116. package/tests/commands/up.test.ts +0 -105
  117. package/tests/commands/update.test.ts +0 -45
  118. package/tests/commands/write.test.ts +0 -76
  119. package/tests/index.test.ts +0 -56
  120. package/tests/libs/baseAction.test.ts +0 -516
  121. package/tests/libs/configFileManager.test.ts +0 -117
  122. package/tests/libs/jsonRpcClient.test.ts +0 -59
  123. package/tests/libs/keychainManager.test.ts +0 -156
  124. package/tests/libs/system.test.ts +0 -148
  125. package/tests/services/simulator.test.ts +0 -705
  126. package/tests/utils.ts +0 -13
  127. package/tsconfig.json +0 -120
  128. package/vitest.config.ts +0 -12
@@ -1,193 +0,0 @@
1
- import { describe, test, vi, beforeEach, afterEach, expect, Mock } from "vitest";
2
- import { OllamaAction } from "../../src/commands/update/ollama";
3
- import { rpcClient } from "../../src/lib/clients/jsonRpcClient";
4
- import Docker from "dockerode";
5
-
6
- vi.mock("dockerode");
7
- vi.mock("../../src/lib/clients/jsonRpcClient");
8
-
9
- describe("OllamaAction", () => {
10
- let ollamaAction: OllamaAction;
11
- let mockGetContainer: Mock;
12
- let mockExec: Mock;
13
- let mockStart: Mock;
14
- let mockStream: any;
15
-
16
- beforeEach(() => {
17
- vi.clearAllMocks();
18
- ollamaAction = new OllamaAction();
19
-
20
- mockGetContainer = vi.mocked(Docker.prototype.getContainer);
21
- mockExec = vi.fn();
22
- mockStart = vi.fn();
23
-
24
- mockStream = {
25
- on: vi.fn(),
26
- };
27
-
28
- mockExec.mockResolvedValue({
29
- start: mockStart,
30
- });
31
-
32
- mockStart.mockResolvedValue(mockStream);
33
-
34
- mockGetContainer.mockReturnValue({
35
- exec: mockExec,
36
- } as unknown as Docker.Container);
37
-
38
- Docker.prototype.getContainer = mockGetContainer;
39
-
40
- vi.spyOn(ollamaAction as any, "startSpinner").mockImplementation(() => {});
41
- vi.spyOn(ollamaAction as any, "setSpinnerText").mockImplementation(() => {});
42
- vi.spyOn(ollamaAction as any, "succeedSpinner").mockImplementation(() => {});
43
- vi.spyOn(ollamaAction as any, "failSpinner").mockImplementation(() => {});
44
- });
45
-
46
- afterEach(() => {
47
- vi.restoreAllMocks();
48
- });
49
-
50
- test("should update the model using 'pull'", async () => {
51
- const mockProvider = {
52
- plugin: "ollama",
53
- config: { key: "value" },
54
- plugin_config: { pluginKey: "pluginValue" },
55
- };
56
-
57
- vi.mocked(rpcClient.request).mockResolvedValueOnce({
58
- result: [mockProvider],
59
- });
60
-
61
- mockStream.on.mockImplementation((event: any, callback: any) => {
62
- if (event === "data") {
63
- callback(Buffer.from("Mocked output success"));
64
- }
65
- if (event === "end") {
66
- callback();
67
- }
68
- });
69
-
70
- await ollamaAction.updateModel("mocked_model");
71
-
72
- expect(ollamaAction["startSpinner"]).toHaveBeenCalledWith(`Updating model "mocked_model"...`);
73
- expect(mockGetContainer).toHaveBeenCalledWith("genlayer-ollama");
74
- expect(mockExec).toHaveBeenCalledWith({
75
- Cmd: ["ollama", "pull", "mocked_model"],
76
- AttachStdout: true,
77
- AttachStderr: true,
78
- });
79
- expect(mockStart).toHaveBeenCalledWith({ Detach: false, Tty: false });
80
- expect(ollamaAction["setSpinnerText"]).toHaveBeenCalledWith("Mocked output success");
81
- expect(ollamaAction["succeedSpinner"]).toHaveBeenCalledWith(`Model "mocked_model" updated successfully`);
82
- });
83
-
84
- test("should remove the model using 'rm'", async () => {
85
- mockStream.on.mockImplementation((event: any, callback: any) => {
86
- if (event === "data") {
87
- callback(Buffer.from("Mocked output success"));
88
- }
89
- if (event === "end") {
90
- callback();
91
- }
92
- });
93
-
94
- await ollamaAction.removeModel("mocked_model");
95
-
96
- expect(ollamaAction["startSpinner"]).toHaveBeenCalledWith(`Executing 'rm' command on model "mocked_model"...`);
97
- expect(mockGetContainer).toHaveBeenCalledWith("genlayer-ollama");
98
- expect(mockExec).toHaveBeenCalledWith({
99
- Cmd: ["ollama", "rm", "mocked_model"],
100
- AttachStdout: true,
101
- AttachStderr: true,
102
- });
103
- expect(mockStart).toHaveBeenCalledWith({ Detach: false, Tty: false });
104
- expect(ollamaAction["setSpinnerText"]).toHaveBeenCalledWith("Mocked output success");
105
- expect(ollamaAction["succeedSpinner"]).toHaveBeenCalledWith(`Model "mocked_model" removed successfully`);
106
- });
107
-
108
- test("should log an error if an exception occurs during 'pull'", async () => {
109
- const mockProvider = {
110
- plugin: "ollama",
111
- config: { key: "value" },
112
- plugin_config: { pluginKey: "pluginValue" },
113
- };
114
-
115
- vi.mocked(rpcClient.request).mockResolvedValueOnce({
116
- result: [mockProvider],
117
- });
118
-
119
- const error = new Error("Mocked error");
120
- mockExec.mockRejectedValue(error);
121
-
122
- await ollamaAction.updateModel("mocked_model");
123
-
124
- expect(ollamaAction["failSpinner"]).toHaveBeenCalledWith(`Error executing command "pull" on model "mocked_model"`, error);
125
- });
126
-
127
- test("should log an error if an exception occurs during 'rm'", async () => {
128
- const error = new Error("Mocked error");
129
- mockExec.mockRejectedValue(error);
130
-
131
- await ollamaAction.removeModel("mocked_model");
132
-
133
- expect(ollamaAction["failSpinner"]).toHaveBeenCalledWith(`Error executing command "rm" on model "mocked_model"`, error);
134
- });
135
-
136
- test("should throw an error if no 'ollama' provider exists during updateModel", async () => {
137
- vi.mocked(rpcClient.request).mockResolvedValueOnce({
138
- result: [],
139
- });
140
-
141
- await ollamaAction.updateModel("mocked_model");
142
-
143
- expect(ollamaAction["failSpinner"]).toHaveBeenCalledWith(
144
- "No existing 'ollama' provider found. Unable to add/update a model."
145
- );
146
- });
147
-
148
- test("should reject with an error if success is not set to true", async () => {
149
- const mockProvider = {
150
- plugin: "ollama",
151
- config: { key: "value" },
152
- plugin_config: { pluginKey: "pluginValue" },
153
- };
154
-
155
- vi.mocked(rpcClient.request).mockResolvedValueOnce({
156
- result: [mockProvider],
157
- });
158
-
159
- mockStream.on.mockImplementation((event: any, callback: any) => {
160
- if (event === "data") {
161
- callback(Buffer.from("Mocked output failure"));
162
- }
163
- if (event === "end") {
164
- callback();
165
- }
166
- });
167
-
168
- await ollamaAction.updateModel("mocked_model");
169
-
170
- expect(ollamaAction["failSpinner"]).toHaveBeenCalledWith(
171
- `Failed to execute 'pull' on model "mocked_model".`
172
- );
173
- });
174
-
175
- test("should log an error if an exception occurs inside updateModel", async () => {
176
- const mockError = new Error("Mocked error");
177
-
178
- vi.mocked(rpcClient.request).mockRejectedValue(mockError);
179
-
180
- await ollamaAction.updateModel("mocked_model");
181
-
182
- expect(ollamaAction["failSpinner"]).toHaveBeenCalledWith(`Error updating model "mocked_model"`, mockError);
183
- });
184
-
185
- test("should call get config if modelName is empty", async () => {
186
- const defaultModel = "default_model";
187
- vi.spyOn(ollamaAction as any, "getConfig").mockReturnValue({ defaultOllamaModel: defaultModel });
188
-
189
- await ollamaAction.updateModel("");
190
- expect(ollamaAction.getConfig).toHaveBeenCalledTimes(1);
191
- });
192
-
193
- });
@@ -1,261 +0,0 @@
1
- import {describe, test, vi, beforeEach, afterEach, expect} from "vitest";
2
- import {createClient, createAccount} from "genlayer-js";
3
- import type {TransactionHash} from "genlayer-js/types";
4
- import {TransactionStatus} from "genlayer-js/types";
5
- import {ReceiptAction, type ReceiptParams} from "../../src/commands/transactions/receipt";
6
-
7
- vi.mock("genlayer-js");
8
-
9
- describe("ReceiptAction", () => {
10
- let receiptAction: ReceiptAction;
11
- const mockClient = {
12
- waitForTransactionReceipt: vi.fn(),
13
- initializeConsensusSmartContract: vi.fn(),
14
- };
15
-
16
- const mockPrivateKey = "mocked_private_key";
17
- const mockTxId = "0x1234567890123456789012345678901234567890123456789012345678901234" as TransactionHash;
18
- const defaultRetries = 100;
19
- const defaultInterval = 5000;
20
-
21
- beforeEach(() => {
22
- vi.clearAllMocks();
23
- vi.mocked(createClient).mockReturnValue(mockClient as any);
24
- vi.mocked(createAccount).mockReturnValue({privateKey: mockPrivateKey} as any);
25
- receiptAction = new ReceiptAction();
26
- vi.spyOn(receiptAction as any, "getAccount").mockResolvedValue({privateKey: mockPrivateKey});
27
-
28
- vi.spyOn(receiptAction as any, "startSpinner").mockImplementation(() => {});
29
- vi.spyOn(receiptAction as any, "succeedSpinner").mockImplementation(() => {});
30
- vi.spyOn(receiptAction as any, "failSpinner").mockImplementation(() => {});
31
- });
32
-
33
- afterEach(() => {
34
- vi.restoreAllMocks();
35
- });
36
-
37
- test("retrieves transaction receipt successfully with default options", async () => {
38
- const mockReceipt = {status: "FINALIZED", data: {hash: mockTxId}};
39
-
40
- vi.mocked(mockClient.waitForTransactionReceipt).mockResolvedValue(mockReceipt);
41
-
42
- await receiptAction.receipt({
43
- txId: mockTxId,
44
- retries: defaultRetries,
45
- interval: defaultInterval,
46
- });
47
-
48
- expect(mockClient.waitForTransactionReceipt).toHaveBeenCalledWith({
49
- hash: mockTxId,
50
- status: TransactionStatus.FINALIZED,
51
- retries: defaultRetries,
52
- interval: defaultInterval,
53
- });
54
- expect(receiptAction["succeedSpinner"]).toHaveBeenCalledWith(
55
- "Transaction receipt retrieved successfully",
56
- mockReceipt,
57
- );
58
- });
59
-
60
- test("retrieves transaction receipt with custom options", async () => {
61
- const mockReceipt = {status: "ACCEPTED", data: {hash: mockTxId}};
62
-
63
- vi.mocked(mockClient.waitForTransactionReceipt).mockResolvedValue(mockReceipt);
64
-
65
- await receiptAction.receipt({
66
- txId: mockTxId,
67
- status: "ACCEPTED",
68
- retries: 50,
69
- interval: 3000,
70
- });
71
-
72
- expect(mockClient.waitForTransactionReceipt).toHaveBeenCalledWith({
73
- hash: mockTxId,
74
- status: TransactionStatus.ACCEPTED,
75
- retries: 50,
76
- interval: 3000,
77
- });
78
- expect(receiptAction["succeedSpinner"]).toHaveBeenCalledWith(
79
- "Transaction receipt retrieved successfully",
80
- mockReceipt,
81
- );
82
- });
83
-
84
- test("handles waitForTransactionReceipt errors", async () => {
85
- vi.mocked(mockClient.waitForTransactionReceipt).mockRejectedValue(new Error("Mocked receipt error"));
86
-
87
- await receiptAction.receipt({
88
- txId: mockTxId,
89
- retries: defaultRetries,
90
- interval: defaultInterval,
91
- });
92
-
93
- expect(receiptAction["failSpinner"]).toHaveBeenCalledWith(
94
- "Error retrieving transaction receipt",
95
- expect.any(Error),
96
- );
97
- });
98
-
99
- test("uses custom RPC URL for receipt operations", async () => {
100
- const rpcUrl = "https://custom-rpc-url.com";
101
- const mockReceipt = {status: "FINALIZED", data: {hash: mockTxId}};
102
-
103
- vi.mocked(mockClient.waitForTransactionReceipt).mockResolvedValue(mockReceipt);
104
-
105
- await receiptAction.receipt({
106
- txId: mockTxId,
107
- retries: defaultRetries,
108
- interval: defaultInterval,
109
- rpc: rpcUrl,
110
- });
111
-
112
- expect(createClient).toHaveBeenCalledWith(
113
- expect.objectContaining({
114
- endpoint: rpcUrl,
115
- }),
116
- );
117
- expect(mockClient.waitForTransactionReceipt).toHaveBeenCalledWith({
118
- hash: mockTxId,
119
- status: TransactionStatus.FINALIZED,
120
- retries: defaultRetries,
121
- interval: defaultInterval,
122
- });
123
- expect(receiptAction["succeedSpinner"]).toHaveBeenCalledWith(
124
- "Transaction receipt retrieved successfully",
125
- mockReceipt,
126
- );
127
- });
128
-
129
- test("validates transaction status and shows error for invalid status", async () => {
130
- await receiptAction.receipt({
131
- txId: mockTxId,
132
- status: "INVALID_STATUS",
133
- retries: defaultRetries,
134
- interval: defaultInterval,
135
- });
136
-
137
- expect(receiptAction["failSpinner"]).toHaveBeenCalledWith(
138
- "Invalid transaction status",
139
- expect.stringContaining("Invalid status: INVALID_STATUS")
140
- );
141
-
142
- expect(mockClient.waitForTransactionReceipt).not.toHaveBeenCalled();
143
- });
144
-
145
- test("accepts valid transaction statuses", async () => {
146
- const mockReceipt = {status: "PENDING", data: {hash: mockTxId}};
147
- vi.mocked(mockClient.waitForTransactionReceipt).mockResolvedValue(mockReceipt);
148
-
149
- const testStatuses = [
150
- {input: "accepted", expected: TransactionStatus.ACCEPTED},
151
- {input: "FINALIZED", expected: TransactionStatus.FINALIZED},
152
- {input: "pending", expected: TransactionStatus.PENDING},
153
- {input: "COMMITTING", expected: TransactionStatus.COMMITTING},
154
- ];
155
-
156
- for (const {input, expected} of testStatuses) {
157
- await receiptAction.receipt({
158
- txId: mockTxId,
159
- status: input,
160
- retries: defaultRetries,
161
- interval: defaultInterval,
162
- });
163
-
164
- expect(mockClient.waitForTransactionReceipt).toHaveBeenCalledWith({
165
- hash: mockTxId,
166
- status: expected,
167
- retries: defaultRetries,
168
- interval: defaultInterval,
169
- });
170
- }
171
- });
172
-
173
- test("prints only stdout when --stdout is provided", async () => {
174
- const mockReceipt = {
175
- consensus_data: {
176
- leader_receipt: [
177
- {
178
- genvm_result: {
179
- stdout: "program stdout",
180
- stderr: "program stderr",
181
- },
182
- },
183
- ],
184
- },
185
- };
186
-
187
- vi.mocked(mockClient.waitForTransactionReceipt).mockResolvedValue(mockReceipt as any);
188
-
189
- await receiptAction.receipt({
190
- txId: mockTxId,
191
- retries: defaultRetries,
192
- interval: defaultInterval,
193
- stdout: true,
194
- } as ReceiptParams);
195
-
196
- expect(receiptAction["succeedSpinner"]).toHaveBeenCalledWith(
197
- "Transaction stdout retrieved successfully",
198
- "program stdout",
199
- );
200
- });
201
-
202
- test("prints only stderr when --stderr is provided", async () => {
203
- const mockReceipt = {
204
- consensus_data: {
205
- leader_receipt: [
206
- {
207
- genvm_result: {
208
- stdout: "program stdout",
209
- stderr: "program stderr",
210
- },
211
- },
212
- ],
213
- },
214
- };
215
-
216
- vi.mocked(mockClient.waitForTransactionReceipt).mockResolvedValue(mockReceipt as any);
217
-
218
- await receiptAction.receipt({
219
- txId: mockTxId,
220
- retries: defaultRetries,
221
- interval: defaultInterval,
222
- stderr: true,
223
- } as ReceiptParams);
224
-
225
- expect(receiptAction["succeedSpinner"]).toHaveBeenCalledWith(
226
- "Transaction stderr retrieved successfully",
227
- "program stderr",
228
- );
229
- });
230
-
231
- test("prints both stdout and stderr when both flags are provided", async () => {
232
- const mockReceipt = {
233
- consensus_data: {
234
- leader_receipt: [
235
- {
236
- genvm_result: {
237
- stdout: "program stdout",
238
- stderr: "program stderr",
239
- },
240
- },
241
- ],
242
- },
243
- };
244
-
245
- vi.mocked(mockClient.waitForTransactionReceipt).mockResolvedValue(mockReceipt as any);
246
-
247
- await receiptAction.receipt({
248
- txId: mockTxId,
249
- retries: defaultRetries,
250
- interval: defaultInterval,
251
- stdout: true,
252
- stderr: true,
253
- } as ReceiptParams);
254
-
255
- expect(receiptAction["succeedSpinner"]).toHaveBeenCalledWith(
256
- "Transaction stdout and stderr",
257
- { stdout: "program stdout", stderr: "program stderr" },
258
- );
259
- });
260
-
261
- });
@@ -1,94 +0,0 @@
1
- import {describe, test, vi, beforeEach, afterEach, expect} from "vitest";
2
- import {createClient, createAccount} from "genlayer-js";
3
- import {SchemaAction} from "../../src/commands/contracts/schema";
4
-
5
- vi.mock("genlayer-js");
6
-
7
- describe("SchemaAction", () => {
8
- let schemaAction: SchemaAction;
9
- const mockClient = {
10
- getContractSchema: vi.fn(),
11
- initializeConsensusSmartContract: vi.fn(),
12
- };
13
-
14
- const mockPrivateKey = "mocked_private_key";
15
-
16
- beforeEach(() => {
17
- vi.clearAllMocks();
18
- vi.mocked(createClient).mockReturnValue(mockClient as any);
19
- vi.mocked(createAccount).mockReturnValue({privateKey: mockPrivateKey} as any);
20
- schemaAction = new SchemaAction();
21
- vi.spyOn(schemaAction as any, "getAccount").mockResolvedValue({privateKey: mockPrivateKey});
22
-
23
- vi.spyOn(schemaAction as any, "startSpinner").mockImplementation(() => {});
24
- vi.spyOn(schemaAction as any, "succeedSpinner").mockImplementation(() => {});
25
- vi.spyOn(schemaAction as any, "failSpinner").mockImplementation(() => {});
26
- vi.spyOn(schemaAction as any, "log").mockImplementation(() => {});
27
- });
28
-
29
- afterEach(() => {
30
- vi.restoreAllMocks();
31
- });
32
-
33
- test("gets contract schema successfully", async () => {
34
- const mockResult = {
35
- methods: {
36
- getData: {
37
- params: [["value", "int"]],
38
- ret: "int",
39
- readonly: true,
40
- },
41
- },
42
- };
43
-
44
- vi.mocked(mockClient.getContractSchema).mockResolvedValue(mockResult);
45
-
46
- await schemaAction.schema({
47
- contractAddress: "0xMockedContract",
48
- });
49
-
50
- expect(mockClient.getContractSchema).toHaveBeenCalledWith("0xMockedContract");
51
- expect(schemaAction["succeedSpinner"]).toHaveBeenCalledWith(
52
- "Contract schema retrieved successfully",
53
- mockResult,
54
- );
55
- });
56
-
57
- test("handles getContractSchema errors", async () => {
58
- vi.mocked(mockClient.getContractSchema).mockRejectedValue(new Error("Mocked schema error"));
59
-
60
- await schemaAction.schema({contractAddress: "0xMockedContract"});
61
-
62
- expect(schemaAction["failSpinner"]).toHaveBeenCalledWith("Error retrieving contract schema", expect.any(Error));
63
- });
64
-
65
- test("uses custom RPC URL when provided", async () => {
66
- const mockResult = {methods: {}};
67
- vi.mocked(mockClient.getContractSchema).mockResolvedValue(mockResult);
68
-
69
- await schemaAction.schema({
70
- contractAddress: "0xMockedContract",
71
- rpc: "https://custom-rpc-url.com",
72
- });
73
-
74
- expect(createClient).toHaveBeenCalledWith(
75
- expect.objectContaining({
76
- endpoint: "https://custom-rpc-url.com",
77
- }),
78
- );
79
- expect(mockClient.getContractSchema).toHaveBeenCalledWith("0xMockedContract");
80
- expect(schemaAction["succeedSpinner"]).toHaveBeenCalledWith(
81
- "Contract schema retrieved successfully",
82
- mockResult,
83
- );
84
- });
85
-
86
- test("initializes consensus smart contract", async () => {
87
- const mockResult = {methods: {}};
88
- vi.mocked(mockClient.getContractSchema).mockResolvedValue(mockResult);
89
-
90
- await schemaAction.schema({contractAddress: "0xMockedContract"});
91
-
92
- expect(mockClient.initializeConsensusSmartContract).toHaveBeenCalled();
93
- });
94
- });