@0xsequence/catapult 1.3.17 → 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 (232) hide show
  1. package/README.md +276 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +1 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/index.d.ts +1 -0
  6. package/dist/commands/index.d.ts.map +1 -1
  7. package/dist/commands/index.js +1 -0
  8. package/dist/commands/index.js.map +1 -1
  9. package/dist/commands/list.d.ts.map +1 -1
  10. package/dist/commands/list.js +12 -0
  11. package/dist/commands/list.js.map +1 -1
  12. package/dist/commands/provenance.d.ts +3 -0
  13. package/dist/commands/provenance.d.ts.map +1 -0
  14. package/dist/commands/provenance.js +138 -0
  15. package/dist/commands/provenance.js.map +1 -0
  16. package/dist/lib/__tests__/deployer.spec.js +118 -1
  17. package/dist/lib/__tests__/deployer.spec.js.map +1 -1
  18. package/dist/lib/__tests__/network-loader.spec.js.map +1 -1
  19. package/dist/lib/__tests__/provenance.spec.d.ts +2 -0
  20. package/dist/lib/__tests__/provenance.spec.d.ts.map +1 -0
  21. package/dist/lib/__tests__/provenance.spec.js +205 -0
  22. package/dist/lib/__tests__/provenance.spec.js.map +1 -0
  23. package/dist/lib/contracts/__tests__/repository.spec.js +243 -0
  24. package/dist/lib/contracts/__tests__/repository.spec.js.map +1 -1
  25. package/dist/lib/contracts/repository.d.ts +9 -1
  26. package/dist/lib/contracts/repository.d.ts.map +1 -1
  27. package/dist/lib/contracts/repository.js +93 -7
  28. package/dist/lib/contracts/repository.js.map +1 -1
  29. package/dist/lib/core/__tests__/assert-action.spec.d.ts +2 -0
  30. package/dist/lib/core/__tests__/assert-action.spec.d.ts.map +1 -0
  31. package/dist/lib/core/__tests__/assert-action.spec.js +377 -0
  32. package/dist/lib/core/__tests__/assert-action.spec.js.map +1 -0
  33. package/dist/lib/core/__tests__/engine.spec.js +80 -0
  34. package/dist/lib/core/__tests__/engine.spec.js.map +1 -1
  35. package/dist/lib/core/__tests__/loader.spec.js +29 -0
  36. package/dist/lib/core/__tests__/loader.spec.js.map +1 -1
  37. package/dist/lib/core/__tests__/resolver.spec.js +405 -0
  38. package/dist/lib/core/__tests__/resolver.spec.js.map +1 -1
  39. package/dist/lib/core/__tests__/sign-actions.spec.d.ts +2 -0
  40. package/dist/lib/core/__tests__/sign-actions.spec.d.ts.map +1 -0
  41. package/dist/lib/core/__tests__/sign-actions.spec.js +128 -0
  42. package/dist/lib/core/__tests__/sign-actions.spec.js.map +1 -0
  43. package/dist/lib/core/__tests__/signer.spec.d.ts +2 -0
  44. package/dist/lib/core/__tests__/signer.spec.d.ts.map +1 -0
  45. package/dist/lib/core/__tests__/signer.spec.js +40 -0
  46. package/dist/lib/core/__tests__/signer.spec.js.map +1 -0
  47. package/dist/lib/core/context.d.ts +3 -2
  48. package/dist/lib/core/context.d.ts.map +1 -1
  49. package/dist/lib/core/context.js +3 -2
  50. package/dist/lib/core/context.js.map +1 -1
  51. package/dist/lib/core/engine.d.ts +4 -0
  52. package/dist/lib/core/engine.d.ts.map +1 -1
  53. package/dist/lib/core/engine.js +206 -0
  54. package/dist/lib/core/engine.js.map +1 -1
  55. package/dist/lib/core/loader.d.ts +1 -0
  56. package/dist/lib/core/loader.d.ts.map +1 -1
  57. package/dist/lib/core/loader.js +6 -1
  58. package/dist/lib/core/loader.js.map +1 -1
  59. package/dist/lib/core/resolver.d.ts +2 -0
  60. package/dist/lib/core/resolver.d.ts.map +1 -1
  61. package/dist/lib/core/resolver.js +89 -0
  62. package/dist/lib/core/resolver.js.map +1 -1
  63. package/dist/lib/core/signer.d.ts +7 -0
  64. package/dist/lib/core/signer.d.ts.map +1 -0
  65. package/dist/lib/core/signer.js +60 -0
  66. package/dist/lib/core/signer.js.map +1 -0
  67. package/dist/lib/deployer.d.ts.map +1 -1
  68. package/dist/lib/deployer.js +21 -4
  69. package/dist/lib/deployer.js.map +1 -1
  70. package/dist/lib/index.d.ts +1 -0
  71. package/dist/lib/index.d.ts.map +1 -1
  72. package/dist/lib/index.js +1 -0
  73. package/dist/lib/index.js.map +1 -1
  74. package/dist/lib/parsers/__tests__/job.spec.js +77 -0
  75. package/dist/lib/parsers/__tests__/job.spec.js.map +1 -1
  76. package/dist/lib/parsers/__tests__/source.spec.d.ts +2 -0
  77. package/dist/lib/parsers/__tests__/source.spec.d.ts.map +1 -0
  78. package/dist/lib/parsers/__tests__/source.spec.js +158 -0
  79. package/dist/lib/parsers/__tests__/source.spec.js.map +1 -0
  80. package/dist/lib/parsers/index.d.ts +1 -0
  81. package/dist/lib/parsers/index.d.ts.map +1 -1
  82. package/dist/lib/parsers/index.js +1 -0
  83. package/dist/lib/parsers/index.js.map +1 -1
  84. package/dist/lib/parsers/job.d.ts.map +1 -1
  85. package/dist/lib/parsers/job.js +11 -0
  86. package/dist/lib/parsers/job.js.map +1 -1
  87. package/dist/lib/parsers/source.d.ts +4 -0
  88. package/dist/lib/parsers/source.d.ts.map +1 -0
  89. package/dist/lib/parsers/source.js +107 -0
  90. package/dist/lib/parsers/source.js.map +1 -0
  91. package/dist/lib/provenance.d.ts +34 -0
  92. package/dist/lib/provenance.d.ts.map +1 -0
  93. package/dist/lib/provenance.js +694 -0
  94. package/dist/lib/provenance.js.map +1 -0
  95. package/dist/lib/types/actions.d.ts +42 -2
  96. package/dist/lib/types/actions.d.ts.map +1 -1
  97. package/dist/lib/types/actions.js +4 -0
  98. package/dist/lib/types/actions.js.map +1 -1
  99. package/dist/lib/types/contracts.d.ts +3 -0
  100. package/dist/lib/types/contracts.d.ts.map +1 -1
  101. package/dist/lib/types/definitions.d.ts +1 -0
  102. package/dist/lib/types/definitions.d.ts.map +1 -1
  103. package/dist/lib/types/index.d.ts +1 -0
  104. package/dist/lib/types/index.d.ts.map +1 -1
  105. package/dist/lib/types/index.js +1 -0
  106. package/dist/lib/types/index.js.map +1 -1
  107. package/dist/lib/types/source.d.ts +26 -0
  108. package/dist/lib/types/source.d.ts.map +1 -0
  109. package/dist/lib/types/source.js +3 -0
  110. package/dist/lib/types/source.js.map +1 -0
  111. package/dist/lib/types/values.d.ts +33 -1
  112. package/dist/lib/types/values.d.ts.map +1 -1
  113. package/package.json +4 -1
  114. package/.eslintrc.json +0 -29
  115. package/.github/workflows/ci.yml +0 -181
  116. package/CONCEPT.md +0 -24
  117. package/contracts/checked-call.huff +0 -65
  118. package/eslint.config.js +0 -48
  119. package/examples/jobs/guards-v1.yaml +0 -17
  120. package/examples/jobs/sequence-seq-0001-patch.yaml +0 -59
  121. package/examples/jobs/sequence-v1.yaml +0 -59
  122. package/examples/templates/sequence-factory-v1.yaml +0 -56
  123. package/jest.config.js +0 -25
  124. package/src/cli.ts +0 -17
  125. package/src/commands/common.ts +0 -61
  126. package/src/commands/dry.ts +0 -209
  127. package/src/commands/etherscan.ts +0 -360
  128. package/src/commands/index.ts +0 -5
  129. package/src/commands/list.ts +0 -249
  130. package/src/commands/run.ts +0 -146
  131. package/src/commands/utils.ts +0 -215
  132. package/src/index.ts +0 -67
  133. package/src/lib/__tests__/deployer-events.spec.ts +0 -338
  134. package/src/lib/__tests__/deployer.spec.ts +0 -2093
  135. package/src/lib/__tests__/network-loader.spec.ts +0 -150
  136. package/src/lib/__tests__/network-selection.spec.ts +0 -41
  137. package/src/lib/__tests__/network-utils.spec.ts +0 -230
  138. package/src/lib/artifacts/__tests__/fixtures/contract1.json +0 -19
  139. package/src/lib/artifacts/__tests__/fixtures/contract2.json +0 -19
  140. package/src/lib/artifacts/__tests__/fixtures/duplicate-name.json +0 -19
  141. package/src/lib/artifacts/__tests__/fixtures/nested/nested-contract.json +0 -18
  142. package/src/lib/artifacts/__tests__/fixtures/not-an-artifact.json +0 -8
  143. package/src/lib/artifacts/__tests__/fixtures/readme.txt +0 -2
  144. package/src/lib/contracts/__tests__/repository.spec.ts +0 -344
  145. package/src/lib/contracts/repository.ts +0 -313
  146. package/src/lib/core/__tests__/context.spec.ts +0 -37
  147. package/src/lib/core/__tests__/engine.spec.ts +0 -1889
  148. package/src/lib/core/__tests__/graph.spec.ts +0 -125
  149. package/src/lib/core/__tests__/json-integration.spec.ts +0 -425
  150. package/src/lib/core/__tests__/loader.spec.ts +0 -334
  151. package/src/lib/core/__tests__/multi-platform-verification.spec.ts +0 -406
  152. package/src/lib/core/__tests__/resolver.spec.ts +0 -2053
  153. package/src/lib/core/__tests__/static-action.spec.ts +0 -172
  154. package/src/lib/core/context.ts +0 -127
  155. package/src/lib/core/engine.ts +0 -1782
  156. package/src/lib/core/graph.ts +0 -252
  157. package/src/lib/core/loader.ts +0 -247
  158. package/src/lib/core/resolver.ts +0 -757
  159. package/src/lib/deployer.ts +0 -981
  160. package/src/lib/events/__tests__/event-system.spec.ts +0 -392
  161. package/src/lib/events/cli-adapter.ts +0 -369
  162. package/src/lib/events/emitter.ts +0 -62
  163. package/src/lib/events/index.ts +0 -3
  164. package/src/lib/events/types.ts +0 -520
  165. package/src/lib/index.ts +0 -14
  166. package/src/lib/network-loader.ts +0 -90
  167. package/src/lib/network-selection.ts +0 -73
  168. package/src/lib/network-utils.ts +0 -64
  169. package/src/lib/parsers/__tests__/buildinfo.spec.ts +0 -122
  170. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-bytecode-buildinfo.json +0 -62
  171. package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-json.txt +0 -2
  172. package/src/lib/parsers/__tests__/fixtures/buildinfo/multi-contract-buildinfo.json +0 -89
  173. package/src/lib/parsers/__tests__/fixtures/buildinfo/no-contracts-buildinfo.json +0 -17
  174. package/src/lib/parsers/__tests__/fixtures/buildinfo/simple-buildinfo.json +0 -63
  175. package/src/lib/parsers/__tests__/fixtures/buildinfo/wrong-format.json +0 -4
  176. package/src/lib/parsers/__tests__/job.spec.ts +0 -358
  177. package/src/lib/parsers/__tests__/template.spec.ts +0 -111
  178. package/src/lib/parsers/artifact/__tests__/artifact.spec.ts +0 -117
  179. package/src/lib/parsers/artifact/__tests__/fixtures/empty-bytecode.json +0 -5
  180. package/src/lib/parsers/artifact/__tests__/fixtures/hardhat-artifact.json +0 -67
  181. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-bytecode.json +0 -5
  182. package/src/lib/parsers/artifact/__tests__/fixtures/invalid-json.txt +0 -11
  183. package/src/lib/parsers/artifact/__tests__/fixtures/minimal-artifact.json +0 -5
  184. package/src/lib/parsers/artifact/__tests__/fixtures/missing-abi.json +0 -4
  185. package/src/lib/parsers/artifact/__tests__/fixtures/missing-bytecode.json +0 -11
  186. package/src/lib/parsers/artifact/__tests__/fixtures/missing-contract-name.json +0 -11
  187. package/src/lib/parsers/artifact/__tests__/fixtures/simple-artifact.json +0 -40
  188. package/src/lib/parsers/artifact/__tests__/fixtures/wrong-types.json +0 -7
  189. package/src/lib/parsers/artifact/foundry-1.2.ts +0 -72
  190. package/src/lib/parsers/artifact/index.ts +0 -27
  191. package/src/lib/parsers/artifact/types.ts +0 -9
  192. package/src/lib/parsers/buildinfo.ts +0 -127
  193. package/src/lib/parsers/constants.ts +0 -56
  194. package/src/lib/parsers/index.ts +0 -5
  195. package/src/lib/parsers/job.ts +0 -148
  196. package/src/lib/parsers/template.ts +0 -135
  197. package/src/lib/std/templates/arachnid-deterministic-deployment-proxy.yaml +0 -68
  198. package/src/lib/std/templates/assured-deployment.yaml +0 -46
  199. package/src/lib/std/templates/era-evm-predeploy.yaml +0 -35
  200. package/src/lib/std/templates/erc-2470.yaml +0 -70
  201. package/src/lib/std/templates/min-balance.yaml +0 -35
  202. package/src/lib/std/templates/nano-universal-deployer.yaml +0 -61
  203. package/src/lib/std/templates/raw-erc-2470.yaml +0 -62
  204. package/src/lib/std/templates/raw-nano-universal-deployer.yaml +0 -54
  205. package/src/lib/std/templates/raw-sequence-universal-deployer-2.yaml +0 -52
  206. package/src/lib/std/templates/sequence-universal-deployer-2.yaml +0 -61
  207. package/src/lib/types/__tests__/json-request-action.spec.ts +0 -243
  208. package/src/lib/types/__tests__/read-json-value.spec.ts +0 -278
  209. package/src/lib/types/__tests__/resolve-json-value.spec.ts +0 -769
  210. package/src/lib/types/actions.ts +0 -127
  211. package/src/lib/types/artifacts.ts +0 -21
  212. package/src/lib/types/buildinfo.ts +0 -116
  213. package/src/lib/types/conditions.ts +0 -50
  214. package/src/lib/types/contracts.ts +0 -23
  215. package/src/lib/types/definitions.ts +0 -70
  216. package/src/lib/types/index.ts +0 -8
  217. package/src/lib/types/network.ts +0 -33
  218. package/src/lib/types/project.ts +0 -9
  219. package/src/lib/types/task.ts +0 -9
  220. package/src/lib/types/values.ts +0 -150
  221. package/src/lib/utils/assertion.ts +0 -24
  222. package/src/lib/utils/validation.ts +0 -116
  223. package/src/lib/validation/contract-references.ts +0 -210
  224. package/src/lib/validation/index.ts +0 -1
  225. package/src/lib/verification/__tests__/etherscan.spec.ts +0 -710
  226. package/src/lib/verification/__tests__/sourcify.spec.ts +0 -288
  227. package/src/lib/verification/etherscan.ts +0 -547
  228. package/src/lib/verification/sourcify.ts +0 -248
  229. package/test_validation/artifacts/TestContract.json +0 -9
  230. package/test_validation/jobs/test-missing.yaml +0 -16
  231. package/test_validation/networks.yaml +0 -3
  232. package/tsconfig.json +0 -36
@@ -1,338 +0,0 @@
1
- import { Deployer, DeployerOptions } from '../deployer'
2
- import { DeploymentEventEmitter } from '../events'
3
- import { Network } from '../types'
4
-
5
- // Mock the ProjectLoader to avoid file system dependencies in tests
6
- jest.mock('../core/loader', () => {
7
- return {
8
- ProjectLoader: jest.fn().mockImplementation(() => {
9
- const mockJobs = new Map([
10
- ['test-job', {
11
- name: 'test-job',
12
- version: '1.0.0',
13
- actions: [],
14
- depends_on: []
15
- }]
16
- ])
17
-
18
- const mockTemplates = new Map()
19
-
20
- return {
21
- load: jest.fn().mockResolvedValue(undefined),
22
- jobs: mockJobs,
23
- templates: mockTemplates,
24
- contractRepository: {
25
- lookup: jest.fn(),
26
- getAll: jest.fn()
27
- }
28
- }
29
- })
30
- }
31
- })
32
-
33
- // Mock the DependencyGraph
34
- jest.mock('../core/graph', () => {
35
- return {
36
- DependencyGraph: jest.fn().mockImplementation(() => ({
37
- getExecutionOrder: jest.fn().mockReturnValue(['test-job']),
38
- getDependencies: jest.fn().mockReturnValue(new Set())
39
- }))
40
- }
41
- })
42
-
43
- // Mock the ExecutionEngine
44
- jest.mock('../core/engine', () => {
45
- return {
46
- ExecutionEngine: jest.fn().mockImplementation(() => ({
47
- executeJob: jest.fn().mockResolvedValue(undefined)
48
- }))
49
- }
50
- })
51
-
52
- // Mock the ExecutionContext to avoid ethers validation
53
- jest.mock('../core/context', () => {
54
- return {
55
- ExecutionContext: jest.fn().mockImplementation(() => ({
56
- getNetwork: jest.fn().mockReturnValue({
57
- name: 'localhost',
58
- chainId: 1337,
59
- rpcUrl: 'http://localhost:8545'
60
- }),
61
- setOutput: jest.fn(),
62
- getOutput: jest.fn(),
63
- getOutputs: jest.fn().mockReturnValue(new Map())
64
- }))
65
- }
66
- })
67
-
68
- // Mock fs operations
69
- jest.mock('fs/promises', () => ({
70
- mkdir: jest.fn().mockResolvedValue(undefined),
71
- writeFile: jest.fn().mockResolvedValue(undefined)
72
- }))
73
-
74
- describe('Deployer Event Integration', () => {
75
- let deployer: Deployer
76
- let eventEmitter: DeploymentEventEmitter
77
- let emittedEvents: any[]
78
-
79
- const mockOptions: DeployerOptions = {
80
- projectRoot: '/test/project',
81
- privateKey: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef12',
82
- networks: [
83
- {
84
- name: 'localhost',
85
- chainId: 1337,
86
- rpcUrl: 'http://localhost:8545'
87
- } as Network
88
- ]
89
- }
90
-
91
- beforeEach(() => {
92
- emittedEvents = []
93
- eventEmitter = new DeploymentEventEmitter()
94
-
95
- // Capture all emitted events
96
- eventEmitter.onAnyEvent((event) => {
97
- emittedEvents.push(event)
98
- })
99
-
100
- deployer = new Deployer({
101
- ...mockOptions,
102
- eventEmitter
103
- })
104
- })
105
-
106
- describe('Deployment Lifecycle Events', () => {
107
- it('should emit deployment_started event when run begins', async () => {
108
- await expect(deployer.run()).resolves.not.toThrow()
109
-
110
- const startEvent = emittedEvents.find(e => e.type === 'deployment_started')
111
- expect(startEvent).toBeDefined()
112
- expect(startEvent.data.projectRoot).toBe('/test/project')
113
- expect(startEvent.level).toBe('info')
114
- expect(startEvent.timestamp).toBeInstanceOf(Date)
115
- })
116
-
117
- it('should emit project loading events', async () => {
118
- await expect(deployer.run()).resolves.not.toThrow()
119
-
120
- const loadingStartedEvent = emittedEvents.find(e => e.type === 'project_loading_started')
121
- expect(loadingStartedEvent).toBeDefined()
122
- expect(loadingStartedEvent.data.projectRoot).toBe('/test/project')
123
-
124
- const loadedEvent = emittedEvents.find(e => e.type === 'project_loaded')
125
- expect(loadedEvent).toBeDefined()
126
- expect(loadedEvent.data.jobCount).toBeDefined()
127
- expect(loadedEvent.data.templateCount).toBeDefined()
128
- })
129
-
130
- it('should emit execution plan event', async () => {
131
- await expect(deployer.run()).resolves.not.toThrow()
132
-
133
- const planEvent = emittedEvents.find(e => e.type === 'execution_plan')
134
- expect(planEvent).toBeDefined()
135
- expect(planEvent.data.targetNetworks).toEqual([{
136
- name: 'localhost',
137
- chainId: 1337
138
- }])
139
- expect(planEvent.data.jobExecutionOrder).toEqual(['test-job'])
140
- })
141
-
142
- it('should emit network_started event for each network', async () => {
143
- await expect(deployer.run()).resolves.not.toThrow()
144
-
145
- const networkEvent = emittedEvents.find(e => e.type === 'network_started')
146
- expect(networkEvent).toBeDefined()
147
- expect(networkEvent.data.networkName).toBe('localhost')
148
- expect(networkEvent.data.chainId).toBe(1337)
149
- })
150
-
151
- it('should emit deployment_completed event on success', async () => {
152
- await expect(deployer.run()).resolves.not.toThrow()
153
-
154
- const completedEvent = emittedEvents.find(e => e.type === 'deployment_completed')
155
- expect(completedEvent).toBeDefined()
156
- expect(completedEvent.level).toBe('info')
157
- })
158
-
159
- it('should emit output writing events', async () => {
160
- // Mock context.getOutputs to return some outputs
161
- const { ExecutionEngine } = require('../core/engine')
162
- ExecutionEngine.mockImplementation(() => ({
163
- executeJob: jest.fn().mockImplementation((job, context) => {
164
- // Mock the getOutputs method
165
- context.getOutputs = jest.fn().mockReturnValue(new Map([
166
- ['contract.address', '0x1234567890123456789012345678901234567890']
167
- ]))
168
- })
169
- }))
170
-
171
- deployer = new Deployer({
172
- ...mockOptions,
173
- eventEmitter
174
- })
175
-
176
- await expect(deployer.run()).resolves.not.toThrow()
177
-
178
- const outputWritingEvent = emittedEvents.find(e => e.type === 'output_writing_started')
179
- expect(outputWritingEvent).toBeDefined()
180
-
181
- const outputFileEvent = emittedEvents.find(e => e.type === 'output_file_written')
182
- expect(outputFileEvent).toBeDefined()
183
- expect(outputFileEvent.data.relativePath).toBe('output/test-job.json')
184
- })
185
- })
186
-
187
- describe('Error Handling', () => {
188
- it('should emit deployment_failed event on error', async () => {
189
- // Mock the loader to throw an error
190
- const { ProjectLoader } = require('../core/loader')
191
- ProjectLoader.mockImplementation(() => ({
192
- load: jest.fn().mockRejectedValue(new Error('Test error'))
193
- }))
194
-
195
- deployer = new Deployer({
196
- ...mockOptions,
197
- eventEmitter
198
- })
199
-
200
- await expect(deployer.run()).rejects.toThrow('Test error')
201
-
202
- const failedEvent = emittedEvents.find(e => e.type === 'deployment_failed')
203
- expect(failedEvent).toBeDefined()
204
- expect(failedEvent.level).toBe('error')
205
- expect(failedEvent.data.error).toBe('Test error')
206
- expect(failedEvent.data.stack).toBeDefined()
207
- })
208
- })
209
-
210
- describe('Network Filtering', () => {
211
- beforeEach(() => {
212
- // Reset mocks for this test group
213
- jest.clearAllMocks()
214
-
215
- // Reset the ProjectLoader mock to success
216
- const { ProjectLoader } = require('../core/loader')
217
- ProjectLoader.mockImplementation(() => ({
218
- load: jest.fn().mockResolvedValue(undefined),
219
- jobs: new Map([
220
- ['test-job', {
221
- name: 'test-job',
222
- version: '1.0.0',
223
- actions: [],
224
- depends_on: []
225
- }]
226
- ]),
227
- templates: new Map(),
228
- contractRepository: {
229
- lookup: jest.fn(),
230
- getAll: jest.fn()
231
- }
232
- }))
233
-
234
- emittedEvents.length = 0 // Clear events array
235
- })
236
-
237
- it('should emit missing_network_config_warning for unknown chain IDs', async () => {
238
- deployer = new Deployer({
239
- ...mockOptions,
240
- runOnNetworks: [1337, 999], // 999 doesn't exist
241
- eventEmitter
242
- })
243
-
244
- await expect(deployer.run()).resolves.not.toThrow()
245
-
246
- const warningEvent = emittedEvents.find(e => e.type === 'missing_network_config_warning')
247
- expect(warningEvent).toBeDefined()
248
- expect(warningEvent.data.missingChainIds).toEqual([999])
249
- })
250
-
251
- // Note: Testing no_outputs event is complex in integration tests
252
- // as it requires specific job execution scenarios. The event itself
253
- // is tested in the main deployer tests.
254
- })
255
-
256
- describe('Event Ordering', () => {
257
- beforeEach(() => {
258
- // Reset mocks and create fresh deployer for this test group
259
- jest.clearAllMocks()
260
-
261
- // Reset the ProjectLoader mock to success
262
- const { ProjectLoader } = require('../core/loader')
263
- ProjectLoader.mockImplementation(() => ({
264
- load: jest.fn().mockResolvedValue(undefined),
265
- jobs: new Map([
266
- ['test-job', {
267
- name: 'test-job',
268
- version: '1.0.0',
269
- actions: [],
270
- depends_on: []
271
- }]
272
- ]),
273
- templates: new Map(),
274
- contractRepository: {
275
- lookup: jest.fn(),
276
- getAll: jest.fn()
277
- }
278
- }))
279
-
280
- emittedEvents.length = 0 // Clear events array
281
-
282
- deployer = new Deployer({
283
- ...mockOptions,
284
- eventEmitter
285
- })
286
- })
287
-
288
- it('should emit events in the correct order', async () => {
289
- await expect(deployer.run()).resolves.not.toThrow()
290
-
291
- const eventTypes = emittedEvents.map(e => e.type)
292
-
293
- // Check that events are in a logical order
294
- expect(eventTypes.indexOf('deployment_started')).toBeLessThan(
295
- eventTypes.indexOf('project_loading_started')
296
- )
297
- expect(eventTypes.indexOf('project_loaded')).toBeLessThan(
298
- eventTypes.indexOf('execution_plan')
299
- )
300
- expect(eventTypes.indexOf('execution_plan')).toBeLessThan(
301
- eventTypes.indexOf('network_started')
302
- )
303
- expect(eventTypes.indexOf('network_started')).toBeLessThan(
304
- eventTypes.indexOf('deployment_completed')
305
- )
306
- })
307
-
308
- it('should have timestamps in chronological order', async () => {
309
- deployer = new Deployer({
310
- ...mockOptions,
311
- eventEmitter
312
- })
313
-
314
- await expect(deployer.run()).resolves.not.toThrow()
315
-
316
- // Check that timestamps are increasing
317
- for (let i = 1; i < emittedEvents.length; i++) {
318
- expect(emittedEvents[i].timestamp.getTime()).toBeGreaterThanOrEqual(
319
- emittedEvents[i - 1].timestamp.getTime()
320
- )
321
- }
322
- })
323
- })
324
-
325
- describe('Event Emitter Access', () => {
326
- it('should expose the event emitter as a public property', () => {
327
- expect(deployer.events).toBe(eventEmitter)
328
- expect(deployer.events).toBeInstanceOf(DeploymentEventEmitter)
329
- })
330
-
331
- it('should use global singleton when no custom emitter provided', () => {
332
- const { deploymentEvents } = require('../events')
333
- const deployerWithoutCustomEmitter = new Deployer(mockOptions)
334
-
335
- expect(deployerWithoutCustomEmitter.events).toBe(deploymentEvents)
336
- })
337
- })
338
- })