@0xsequence/catapult 1.4.0 → 1.5.0

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 (163) hide show
  1. package/README.md +27 -0
  2. package/dist/lib/__tests__/network-loader.spec.js.map +1 -1
  3. package/dist/lib/core/__tests__/resolver.spec.js +22 -0
  4. package/dist/lib/core/__tests__/resolver.spec.js.map +1 -1
  5. package/dist/lib/core/__tests__/sign-actions.spec.d.ts +2 -0
  6. package/dist/lib/core/__tests__/sign-actions.spec.d.ts.map +1 -0
  7. package/dist/lib/core/__tests__/sign-actions.spec.js +128 -0
  8. package/dist/lib/core/__tests__/sign-actions.spec.js.map +1 -0
  9. package/dist/lib/core/__tests__/signer.spec.d.ts +2 -0
  10. package/dist/lib/core/__tests__/signer.spec.d.ts.map +1 -0
  11. package/dist/lib/core/__tests__/signer.spec.js +40 -0
  12. package/dist/lib/core/__tests__/signer.spec.js.map +1 -0
  13. package/dist/lib/core/context.d.ts +3 -2
  14. package/dist/lib/core/context.d.ts.map +1 -1
  15. package/dist/lib/core/context.js +3 -2
  16. package/dist/lib/core/context.js.map +1 -1
  17. package/dist/lib/core/engine.d.ts +4 -0
  18. package/dist/lib/core/engine.d.ts.map +1 -1
  19. package/dist/lib/core/engine.js +173 -0
  20. package/dist/lib/core/engine.js.map +1 -1
  21. package/dist/lib/core/signer.d.ts +7 -0
  22. package/dist/lib/core/signer.d.ts.map +1 -0
  23. package/dist/lib/core/signer.js +60 -0
  24. package/dist/lib/core/signer.js.map +1 -0
  25. package/dist/lib/parsers/__tests__/source.spec.js +37 -0
  26. package/dist/lib/parsers/__tests__/source.spec.js.map +1 -1
  27. package/dist/lib/parsers/source.js +1 -1
  28. package/dist/lib/parsers/source.js.map +1 -1
  29. package/dist/lib/provenance.js +51 -2
  30. package/dist/lib/provenance.js.map +1 -1
  31. package/dist/lib/types/actions.d.ts +26 -2
  32. package/dist/lib/types/actions.d.ts.map +1 -1
  33. package/dist/lib/types/actions.js +3 -0
  34. package/dist/lib/types/actions.js.map +1 -1
  35. package/dist/lib/types/source.d.ts +2 -0
  36. package/dist/lib/types/source.d.ts.map +1 -1
  37. package/package.json +4 -1
  38. package/.eslintrc.json +0 -29
  39. package/.github/workflows/ci.yml +0 -181
  40. package/CONCEPT.md +0 -24
  41. package/contracts/checked-call.huff +0 -65
  42. package/eslint.config.js +0 -48
  43. package/examples/jobs/guards-v1.yaml +0 -17
  44. package/examples/jobs/sequence-seq-0001-patch.yaml +0 -59
  45. package/examples/jobs/sequence-v1.yaml +0 -59
  46. package/examples/templates/sequence-factory-v1.yaml +0 -56
  47. package/jest.config.js +0 -25
  48. package/src/cli.ts +0 -18
  49. package/src/commands/common.ts +0 -61
  50. package/src/commands/dry.ts +0 -209
  51. package/src/commands/etherscan.ts +0 -360
  52. package/src/commands/index.ts +0 -6
  53. package/src/commands/list.ts +0 -262
  54. package/src/commands/provenance.ts +0 -120
  55. package/src/commands/run.ts +0 -146
  56. package/src/commands/utils.ts +0 -215
  57. package/src/index.ts +0 -67
  58. package/src/lib/__tests__/deployer-events.spec.ts +0 -338
  59. package/src/lib/__tests__/deployer.spec.ts +0 -2269
  60. package/src/lib/__tests__/network-loader.spec.ts +0 -150
  61. package/src/lib/__tests__/network-selection.spec.ts +0 -41
  62. package/src/lib/__tests__/network-utils.spec.ts +0 -230
  63. package/src/lib/__tests__/provenance.spec.ts +0 -208
  64. package/src/lib/artifacts/__tests__/fixtures/contract1.json +0 -19
  65. package/src/lib/artifacts/__tests__/fixtures/contract2.json +0 -19
  66. package/src/lib/artifacts/__tests__/fixtures/duplicate-name.json +0 -19
  67. package/src/lib/artifacts/__tests__/fixtures/nested/nested-contract.json +0 -18
  68. package/src/lib/artifacts/__tests__/fixtures/not-an-artifact.json +0 -8
  69. package/src/lib/artifacts/__tests__/fixtures/readme.txt +0 -2
  70. package/src/lib/contracts/__tests__/repository.spec.ts +0 -612
  71. package/src/lib/contracts/repository.ts +0 -411
  72. package/src/lib/core/__tests__/assert-action.spec.ts +0 -474
  73. package/src/lib/core/__tests__/context.spec.ts +0 -37
  74. package/src/lib/core/__tests__/engine.spec.ts +0 -2005
  75. package/src/lib/core/__tests__/graph.spec.ts +0 -125
  76. package/src/lib/core/__tests__/json-integration.spec.ts +0 -425
  77. package/src/lib/core/__tests__/loader.spec.ts +0 -367
  78. package/src/lib/core/__tests__/multi-platform-verification.spec.ts +0 -406
  79. package/src/lib/core/__tests__/resolver.spec.ts +0 -2496
  80. package/src/lib/core/__tests__/static-action.spec.ts +0 -172
  81. package/src/lib/core/context.ts +0 -127
  82. package/src/lib/core/engine.ts +0 -1834
  83. package/src/lib/core/graph.ts +0 -252
  84. package/src/lib/core/loader.ts +0 -253
  85. package/src/lib/core/resolver.ts +0 -873
  86. package/src/lib/deployer.ts +0 -1005
  87. package/src/lib/events/__tests__/event-system.spec.ts +0 -392
  88. package/src/lib/events/cli-adapter.ts +0 -369
  89. package/src/lib/events/emitter.ts +0 -62
  90. package/src/lib/events/index.ts +0 -3
  91. package/src/lib/events/types.ts +0 -520
  92. package/src/lib/index.ts +0 -17
  93. package/src/lib/network-loader.ts +0 -90
  94. package/src/lib/network-selection.ts +0 -73
  95. package/src/lib/network-utils.ts +0 -64
  96. package/src/lib/parsers/__tests__/buildinfo.spec.ts +0 -122
  97. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-bytecode-buildinfo.json +0 -62
  98. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-json.txt +0 -2
  99. package/src/lib/parsers/__tests__/fixtures/buildinfo/multi-contract-buildinfo.json +0 -89
  100. package/src/lib/parsers/__tests__/fixtures/buildinfo/no-contracts-buildinfo.json +0 -17
  101. package/src/lib/parsers/__tests__/fixtures/buildinfo/simple-buildinfo.json +0 -63
  102. package/src/lib/parsers/__tests__/fixtures/buildinfo/wrong-format.json +0 -4
  103. package/src/lib/parsers/__tests__/job.spec.ts +0 -439
  104. package/src/lib/parsers/__tests__/source.spec.ts +0 -134
  105. package/src/lib/parsers/__tests__/template.spec.ts +0 -111
  106. package/src/lib/parsers/artifact/__tests__/artifact.spec.ts +0 -117
  107. package/src/lib/parsers/artifact/__tests__/fixtures/empty-bytecode.json +0 -5
  108. package/src/lib/parsers/artifact/__tests__/fixtures/hardhat-artifact.json +0 -67
  109. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-bytecode.json +0 -5
  110. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-json.txt +0 -11
  111. package/src/lib/parsers/artifact/__tests__/fixtures/minimal-artifact.json +0 -5
  112. package/src/lib/parsers/artifact/__tests__/fixtures/missing-abi.json +0 -4
  113. package/src/lib/parsers/artifact/__tests__/fixtures/missing-bytecode.json +0 -11
  114. package/src/lib/parsers/artifact/__tests__/fixtures/missing-contract-name.json +0 -11
  115. package/src/lib/parsers/artifact/__tests__/fixtures/simple-artifact.json +0 -40
  116. package/src/lib/parsers/artifact/__tests__/fixtures/wrong-types.json +0 -7
  117. package/src/lib/parsers/artifact/foundry-1.2.ts +0 -72
  118. package/src/lib/parsers/artifact/index.ts +0 -27
  119. package/src/lib/parsers/artifact/types.ts +0 -9
  120. package/src/lib/parsers/buildinfo.ts +0 -127
  121. package/src/lib/parsers/constants.ts +0 -56
  122. package/src/lib/parsers/index.ts +0 -6
  123. package/src/lib/parsers/job.ts +0 -160
  124. package/src/lib/parsers/source.ts +0 -129
  125. package/src/lib/parsers/template.ts +0 -135
  126. package/src/lib/provenance.ts +0 -785
  127. package/src/lib/std/templates/arachnid-deterministic-deployment-proxy.yaml +0 -68
  128. package/src/lib/std/templates/assured-deployment.yaml +0 -46
  129. package/src/lib/std/templates/era-evm-predeploy.yaml +0 -35
  130. package/src/lib/std/templates/erc-2470.yaml +0 -70
  131. package/src/lib/std/templates/min-balance.yaml +0 -35
  132. package/src/lib/std/templates/nano-universal-deployer.yaml +0 -61
  133. package/src/lib/std/templates/raw-erc-2470.yaml +0 -62
  134. package/src/lib/std/templates/raw-nano-universal-deployer.yaml +0 -54
  135. package/src/lib/std/templates/raw-sequence-universal-deployer-2.yaml +0 -52
  136. package/src/lib/std/templates/sequence-universal-deployer-2.yaml +0 -61
  137. package/src/lib/types/__tests__/json-request-action.spec.ts +0 -243
  138. package/src/lib/types/__tests__/read-json-value.spec.ts +0 -278
  139. package/src/lib/types/__tests__/resolve-json-value.spec.ts +0 -769
  140. package/src/lib/types/actions.ts +0 -148
  141. package/src/lib/types/artifacts.ts +0 -21
  142. package/src/lib/types/buildinfo.ts +0 -116
  143. package/src/lib/types/conditions.ts +0 -50
  144. package/src/lib/types/contracts.ts +0 -26
  145. package/src/lib/types/definitions.ts +0 -77
  146. package/src/lib/types/index.ts +0 -9
  147. package/src/lib/types/network.ts +0 -33
  148. package/src/lib/types/project.ts +0 -9
  149. package/src/lib/types/source.ts +0 -26
  150. package/src/lib/types/task.ts +0 -9
  151. package/src/lib/types/values.ts +0 -221
  152. package/src/lib/utils/assertion.ts +0 -24
  153. package/src/lib/utils/validation.ts +0 -116
  154. package/src/lib/validation/contract-references.ts +0 -210
  155. package/src/lib/validation/index.ts +0 -1
  156. package/src/lib/verification/__tests__/etherscan.spec.ts +0 -710
  157. package/src/lib/verification/__tests__/sourcify.spec.ts +0 -288
  158. package/src/lib/verification/etherscan.ts +0 -547
  159. package/src/lib/verification/sourcify.ts +0 -248
  160. package/test_validation/artifacts/TestContract.json +0 -9
  161. package/test_validation/jobs/test-missing.yaml +0 -16
  162. package/test_validation/networks.yaml +0 -3
  163. package/tsconfig.json +0 -36
@@ -1,392 +0,0 @@
1
- import { DeploymentEventEmitter, CLIEventAdapter } from '../index'
2
- import { DeploymentEvent } from '../types'
3
-
4
- describe('Event System', () => {
5
- let eventEmitter: DeploymentEventEmitter
6
- let cliAdapter: CLIEventAdapter
7
- let consoleLogSpy: jest.SpyInstance
8
- let consoleErrorSpy: jest.SpyInstance
9
- let consoleWarnSpy: jest.SpyInstance
10
-
11
- beforeEach(() => {
12
- eventEmitter = new DeploymentEventEmitter()
13
- cliAdapter = new CLIEventAdapter(eventEmitter, 3)
14
-
15
- // Mock console methods
16
- consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(() => {})
17
- consoleErrorSpy = jest.spyOn(console, 'error').mockImplementation(() => {})
18
- consoleWarnSpy = jest.spyOn(console, 'warn').mockImplementation(() => {})
19
- })
20
-
21
- afterEach(() => {
22
- cliAdapter.destroy()
23
- consoleLogSpy.mockRestore()
24
- consoleErrorSpy.mockRestore()
25
- consoleWarnSpy.mockRestore()
26
- })
27
-
28
- describe('DeploymentEventEmitter', () => {
29
- it('should emit events with automatic timestamp', () => {
30
- const eventHandler = jest.fn()
31
- eventEmitter.onAnyEvent(eventHandler)
32
-
33
- eventEmitter.emitEvent({
34
- type: 'deployment_started',
35
- level: 'info',
36
- data: {
37
- projectRoot: '/test/project'
38
- }
39
- })
40
-
41
- expect(eventHandler).toHaveBeenCalledWith(
42
- expect.objectContaining({
43
- type: 'deployment_started',
44
- level: 'info',
45
- data: {
46
- projectRoot: '/test/project'
47
- },
48
- timestamp: expect.any(Date)
49
- })
50
- )
51
- })
52
-
53
- it('should emit on both specific event type and general event channel', () => {
54
- const specificHandler = jest.fn()
55
- const generalHandler = jest.fn()
56
-
57
- eventEmitter.onEvent('job_started', specificHandler)
58
- eventEmitter.onAnyEvent(generalHandler)
59
-
60
- eventEmitter.emitEvent({
61
- type: 'job_started',
62
- level: 'info',
63
- data: {
64
- jobName: 'test-job',
65
- jobVersion: '1.0.0',
66
- networkName: 'localhost',
67
- chainId: 1337
68
- }
69
- })
70
-
71
- expect(specificHandler).toHaveBeenCalledTimes(1)
72
- expect(generalHandler).toHaveBeenCalledTimes(1)
73
- })
74
-
75
- it('should handle events without data property', () => {
76
- const eventHandler = jest.fn()
77
- eventEmitter.onAnyEvent(eventHandler)
78
-
79
- eventEmitter.emitEvent({
80
- type: 'deployment_completed',
81
- level: 'info'
82
- })
83
-
84
- expect(eventHandler).toHaveBeenCalledWith(
85
- expect.objectContaining({
86
- type: 'deployment_completed',
87
- level: 'info',
88
- timestamp: expect.any(Date)
89
- })
90
- )
91
- })
92
- })
93
-
94
- describe('CLIEventAdapter', () => {
95
- it('should output deployment started event', () => {
96
- eventEmitter.emitEvent({
97
- type: 'deployment_started',
98
- level: 'info',
99
- data: {
100
- projectRoot: '/test/project'
101
- }
102
- })
103
-
104
- expect(consoleLogSpy).toHaveBeenCalledWith(
105
- expect.stringContaining('CATAPULT: STARTING DEPLOYMENT RUN')
106
- )
107
- })
108
-
109
- it('should output project loading events', () => {
110
- eventEmitter.emitEvent({
111
- type: 'project_loading_started',
112
- level: 'info',
113
- data: {
114
- projectRoot: '/test/project'
115
- }
116
- })
117
-
118
- eventEmitter.emitEvent({
119
- type: 'project_loaded',
120
- level: 'info',
121
- data: {
122
- jobCount: 3,
123
- templateCount: 5
124
- }
125
- })
126
-
127
- expect(consoleLogSpy).toHaveBeenCalledWith(
128
- expect.stringContaining('1. Loading project from: /test/project')
129
- )
130
- expect(consoleLogSpy).toHaveBeenCalledWith(
131
- expect.stringContaining('Loaded 3 jobs, 5 templates, and registered artifacts.')
132
- )
133
- })
134
-
135
- it('should output execution plan', () => {
136
- eventEmitter.emitEvent({
137
- type: 'execution_plan',
138
- level: 'info',
139
- data: {
140
- targetNetworks: [
141
- { name: 'localhost', chainId: 1337 },
142
- { name: 'sepolia', chainId: 11155111 }
143
- ],
144
- jobExecutionOrder: ['deploy-factory', 'deploy-proxy']
145
- }
146
- })
147
-
148
- expect(consoleLogSpy).toHaveBeenCalledWith(
149
- expect.stringContaining('2. Execution Plan')
150
- )
151
- expect(consoleLogSpy).toHaveBeenCalledWith(
152
- expect.stringContaining('Target Networks: localhost (ChainID: 1337), sepolia (ChainID: 11155111)')
153
- )
154
- expect(consoleLogSpy).toHaveBeenCalledWith(
155
- expect.stringContaining('Job Execution Order: deploy-factory -> deploy-proxy')
156
- )
157
- })
158
-
159
- it('should output job execution events', () => {
160
- eventEmitter.emitEvent({
161
- type: 'job_started',
162
- level: 'info',
163
- data: {
164
- jobName: 'test-job',
165
- jobVersion: '1.0.0',
166
- networkName: 'localhost',
167
- chainId: 1337
168
- }
169
- })
170
-
171
- eventEmitter.emitEvent({
172
- type: 'job_completed',
173
- level: 'info',
174
- data: {
175
- jobName: 'test-job',
176
- networkName: 'localhost',
177
- chainId: 1337
178
- }
179
- })
180
-
181
- expect(consoleLogSpy).toHaveBeenCalledWith(
182
- expect.stringContaining('🚀 Starting job: test-job (v1.0.0)')
183
- )
184
- expect(consoleLogSpy).toHaveBeenCalledWith(
185
- expect.stringContaining('✅ Job "test-job" completed successfully')
186
- )
187
- })
188
-
189
- it('should output transaction events', () => {
190
- eventEmitter.emitEvent({
191
- type: 'transaction_sent',
192
- level: 'info',
193
- data: {
194
- to: '0x1234567890123456789012345678901234567890',
195
- value: '1000000000000000000',
196
- dataPreview: '0x1234567890abcdef',
197
- txHash: '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890'
198
- }
199
- })
200
-
201
- eventEmitter.emitEvent({
202
- type: 'transaction_confirmed',
203
- level: 'info',
204
- data: {
205
- txHash: '0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890',
206
- blockNumber: 12345
207
- }
208
- })
209
-
210
- expect(consoleLogSpy).toHaveBeenCalledWith(
211
- expect.stringContaining('to: 0x1234567890123456789012345678901234567890')
212
- )
213
- expect(consoleLogSpy).toHaveBeenCalledWith(
214
- expect.stringContaining('tx hash: 0xabcdef')
215
- )
216
- expect(consoleLogSpy).toHaveBeenCalledWith(
217
- expect.stringContaining('tx confirmed in block: 12345')
218
- )
219
- })
220
-
221
- it('should output error events', () => {
222
- eventEmitter.emitEvent({
223
- type: 'deployment_failed',
224
- level: 'error',
225
- data: {
226
- error: 'Test error message',
227
- stack: 'Error stack trace'
228
- }
229
- })
230
-
231
- expect(consoleErrorSpy).toHaveBeenCalledWith(
232
- expect.stringContaining('💥 DEPLOYMENT FAILED!')
233
- )
234
- expect(consoleErrorSpy).toHaveBeenCalledWith(
235
- expect.stringContaining('Error stack trace')
236
- )
237
- })
238
-
239
- it('should output warning events', () => {
240
- eventEmitter.emitEvent({
241
- type: 'duplicate_artifact_warning',
242
- level: 'warn',
243
- data: {
244
- contractName: 'TestContract',
245
- path: '/path/to/artifact.json'
246
- }
247
- })
248
-
249
- eventEmitter.emitEvent({
250
- type: 'missing_network_config_warning',
251
- level: 'warn',
252
- data: {
253
- missingChainIds: [1, 137]
254
- }
255
- })
256
-
257
- expect(consoleWarnSpy).toHaveBeenCalledWith(
258
- expect.stringContaining('Duplicate artifact contractName found: "TestContract"')
259
- )
260
- expect(consoleWarnSpy).toHaveBeenCalledWith(
261
- expect.stringContaining('Could not find network configurations for specified chain IDs: 1, 137')
262
- )
263
- })
264
-
265
- it('should handle unknown event types gracefully', () => {
266
- const unknownEvent = {
267
- type: 'unknown_event_type',
268
- level: 'info',
269
- timestamp: new Date(),
270
- data: { test: 'data' }
271
- } as any
272
-
273
- // Manually emit to test fallback handling
274
- eventEmitter.emit('event', unknownEvent)
275
-
276
- // At default verbosity (0), unknown events are suppressed.
277
- // Increase verbosity to 3 to enable concise unknown-event logging.
278
- cliAdapter.setVerbosity(3)
279
-
280
- // Re-emit under high verbosity to trigger default handler logging path
281
- eventEmitter.emit('event', unknownEvent)
282
-
283
- // Under verbosity 3, unknown events only log a concise line if data.message exists.
284
- // Since our unknown event has no "data.message", no console.log call is expected.
285
- expect(consoleLogSpy).not.toHaveBeenCalled()
286
- })
287
- })
288
-
289
- describe('Event Integration', () => {
290
- it('should maintain type safety for event data', () => {
291
- const eventHandler = jest.fn()
292
- eventEmitter.onEvent('job_started', eventHandler)
293
-
294
- eventEmitter.emitEvent({
295
- type: 'job_started',
296
- level: 'info',
297
- data: {
298
- jobName: 'test-job',
299
- jobVersion: '1.0.0',
300
- networkName: 'localhost',
301
- chainId: 1337
302
- }
303
- })
304
-
305
- const receivedEvent = eventHandler.mock.calls[0][0]
306
- expect(receivedEvent.data.jobName).toBe('test-job')
307
- expect(receivedEvent.data.chainId).toBe(1337)
308
- })
309
-
310
- it('should support multiple listeners for the same event', () => {
311
- const handler1 = jest.fn()
312
- const handler2 = jest.fn()
313
-
314
- eventEmitter.onEvent('deployment_completed', handler1)
315
- eventEmitter.onEvent('deployment_completed', handler2)
316
-
317
- eventEmitter.emitEvent({
318
- type: 'deployment_completed',
319
- level: 'info'
320
- })
321
-
322
- expect(handler1).toHaveBeenCalledTimes(1)
323
- expect(handler2).toHaveBeenCalledTimes(1)
324
- })
325
-
326
- it('should remove event listeners correctly', () => {
327
- const handler = jest.fn()
328
-
329
- eventEmitter.onEvent('deployment_started', handler)
330
- eventEmitter.offEvent('deployment_started', handler)
331
-
332
- eventEmitter.emitEvent({
333
- type: 'deployment_started',
334
- level: 'info',
335
- data: {
336
- projectRoot: '/test/project'
337
- }
338
- })
339
-
340
- expect(handler).not.toHaveBeenCalled()
341
- })
342
-
343
- it('should respect debug_info event level for verbosity filtering', () => {
344
- // Test with verbosity 0 (default) - should NOT show any debug_info events
345
- cliAdapter.setVerbosity(0)
346
-
347
- eventEmitter.emitEvent({
348
- type: 'debug_info',
349
- level: 'warn',
350
- data: {
351
- message: 'This warning should NOT be shown at verbosity 0'
352
- }
353
- })
354
-
355
- expect(consoleLogSpy).not.toHaveBeenCalled()
356
-
357
- // Clear previous calls
358
- consoleLogSpy.mockClear()
359
-
360
- // Test with verbosity 3 - should show warn level with correct formatting
361
- cliAdapter.setVerbosity(3)
362
-
363
- eventEmitter.emitEvent({
364
- type: 'debug_info',
365
- level: 'warn',
366
- data: {
367
- message: 'This warning should be shown at verbosity 3'
368
- }
369
- })
370
-
371
- expect(consoleLogSpy).toHaveBeenCalledWith(
372
- expect.stringContaining('[WARN] This warning should be shown at verbosity 3')
373
- )
374
-
375
- // Clear previous calls
376
- consoleLogSpy.mockClear()
377
-
378
- // Test with verbosity 3 - should show debug level with correct formatting
379
- eventEmitter.emitEvent({
380
- type: 'debug_info',
381
- level: 'debug',
382
- data: {
383
- message: 'This debug message should be shown at verbosity 3'
384
- }
385
- })
386
-
387
- expect(consoleLogSpy).toHaveBeenCalledWith(
388
- expect.stringContaining('[DEBUG] This debug message should be shown at verbosity 3')
389
- )
390
- })
391
- })
392
- })