@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.
- package/README.md +27 -0
- package/dist/lib/__tests__/network-loader.spec.js.map +1 -1
- package/dist/lib/core/__tests__/resolver.spec.js +22 -0
- package/dist/lib/core/__tests__/resolver.spec.js.map +1 -1
- package/dist/lib/core/__tests__/sign-actions.spec.d.ts +2 -0
- package/dist/lib/core/__tests__/sign-actions.spec.d.ts.map +1 -0
- package/dist/lib/core/__tests__/sign-actions.spec.js +128 -0
- package/dist/lib/core/__tests__/sign-actions.spec.js.map +1 -0
- package/dist/lib/core/__tests__/signer.spec.d.ts +2 -0
- package/dist/lib/core/__tests__/signer.spec.d.ts.map +1 -0
- package/dist/lib/core/__tests__/signer.spec.js +40 -0
- package/dist/lib/core/__tests__/signer.spec.js.map +1 -0
- package/dist/lib/core/context.d.ts +3 -2
- package/dist/lib/core/context.d.ts.map +1 -1
- package/dist/lib/core/context.js +3 -2
- package/dist/lib/core/context.js.map +1 -1
- package/dist/lib/core/engine.d.ts +4 -0
- package/dist/lib/core/engine.d.ts.map +1 -1
- package/dist/lib/core/engine.js +173 -0
- package/dist/lib/core/engine.js.map +1 -1
- package/dist/lib/core/signer.d.ts +7 -0
- package/dist/lib/core/signer.d.ts.map +1 -0
- package/dist/lib/core/signer.js +60 -0
- package/dist/lib/core/signer.js.map +1 -0
- package/dist/lib/parsers/__tests__/source.spec.js +37 -0
- package/dist/lib/parsers/__tests__/source.spec.js.map +1 -1
- package/dist/lib/parsers/source.js +1 -1
- package/dist/lib/parsers/source.js.map +1 -1
- package/dist/lib/provenance.js +51 -2
- package/dist/lib/provenance.js.map +1 -1
- package/dist/lib/types/actions.d.ts +26 -2
- package/dist/lib/types/actions.d.ts.map +1 -1
- package/dist/lib/types/actions.js +3 -0
- package/dist/lib/types/actions.js.map +1 -1
- package/dist/lib/types/source.d.ts +2 -0
- package/dist/lib/types/source.d.ts.map +1 -1
- package/package.json +4 -1
- package/.eslintrc.json +0 -29
- package/.github/workflows/ci.yml +0 -181
- package/CONCEPT.md +0 -24
- package/contracts/checked-call.huff +0 -65
- package/eslint.config.js +0 -48
- package/examples/jobs/guards-v1.yaml +0 -17
- package/examples/jobs/sequence-seq-0001-patch.yaml +0 -59
- package/examples/jobs/sequence-v1.yaml +0 -59
- package/examples/templates/sequence-factory-v1.yaml +0 -56
- package/jest.config.js +0 -25
- package/src/cli.ts +0 -18
- package/src/commands/common.ts +0 -61
- package/src/commands/dry.ts +0 -209
- package/src/commands/etherscan.ts +0 -360
- package/src/commands/index.ts +0 -6
- package/src/commands/list.ts +0 -262
- package/src/commands/provenance.ts +0 -120
- package/src/commands/run.ts +0 -146
- package/src/commands/utils.ts +0 -215
- package/src/index.ts +0 -67
- package/src/lib/__tests__/deployer-events.spec.ts +0 -338
- package/src/lib/__tests__/deployer.spec.ts +0 -2269
- package/src/lib/__tests__/network-loader.spec.ts +0 -150
- package/src/lib/__tests__/network-selection.spec.ts +0 -41
- package/src/lib/__tests__/network-utils.spec.ts +0 -230
- package/src/lib/__tests__/provenance.spec.ts +0 -208
- package/src/lib/artifacts/__tests__/fixtures/contract1.json +0 -19
- package/src/lib/artifacts/__tests__/fixtures/contract2.json +0 -19
- package/src/lib/artifacts/__tests__/fixtures/duplicate-name.json +0 -19
- package/src/lib/artifacts/__tests__/fixtures/nested/nested-contract.json +0 -18
- package/src/lib/artifacts/__tests__/fixtures/not-an-artifact.json +0 -8
- package/src/lib/artifacts/__tests__/fixtures/readme.txt +0 -2
- package/src/lib/contracts/__tests__/repository.spec.ts +0 -612
- package/src/lib/contracts/repository.ts +0 -411
- package/src/lib/core/__tests__/assert-action.spec.ts +0 -474
- package/src/lib/core/__tests__/context.spec.ts +0 -37
- package/src/lib/core/__tests__/engine.spec.ts +0 -2005
- package/src/lib/core/__tests__/graph.spec.ts +0 -125
- package/src/lib/core/__tests__/json-integration.spec.ts +0 -425
- package/src/lib/core/__tests__/loader.spec.ts +0 -367
- package/src/lib/core/__tests__/multi-platform-verification.spec.ts +0 -406
- package/src/lib/core/__tests__/resolver.spec.ts +0 -2496
- package/src/lib/core/__tests__/static-action.spec.ts +0 -172
- package/src/lib/core/context.ts +0 -127
- package/src/lib/core/engine.ts +0 -1834
- package/src/lib/core/graph.ts +0 -252
- package/src/lib/core/loader.ts +0 -253
- package/src/lib/core/resolver.ts +0 -873
- package/src/lib/deployer.ts +0 -1005
- package/src/lib/events/__tests__/event-system.spec.ts +0 -392
- package/src/lib/events/cli-adapter.ts +0 -369
- package/src/lib/events/emitter.ts +0 -62
- package/src/lib/events/index.ts +0 -3
- package/src/lib/events/types.ts +0 -520
- package/src/lib/index.ts +0 -17
- package/src/lib/network-loader.ts +0 -90
- package/src/lib/network-selection.ts +0 -73
- package/src/lib/network-utils.ts +0 -64
- package/src/lib/parsers/__tests__/buildinfo.spec.ts +0 -122
- package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-bytecode-buildinfo.json +0 -62
- package/src/lib/parsers/__tests__/fixtures/buildinfo/invalid-json.txt +0 -2
- package/src/lib/parsers/__tests__/fixtures/buildinfo/multi-contract-buildinfo.json +0 -89
- package/src/lib/parsers/__tests__/fixtures/buildinfo/no-contracts-buildinfo.json +0 -17
- package/src/lib/parsers/__tests__/fixtures/buildinfo/simple-buildinfo.json +0 -63
- package/src/lib/parsers/__tests__/fixtures/buildinfo/wrong-format.json +0 -4
- package/src/lib/parsers/__tests__/job.spec.ts +0 -439
- package/src/lib/parsers/__tests__/source.spec.ts +0 -134
- package/src/lib/parsers/__tests__/template.spec.ts +0 -111
- package/src/lib/parsers/artifact/__tests__/artifact.spec.ts +0 -117
- package/src/lib/parsers/artifact/__tests__/fixtures/empty-bytecode.json +0 -5
- package/src/lib/parsers/artifact/__tests__/fixtures/hardhat-artifact.json +0 -67
- package/src/lib/parsers/artifact/__tests__/fixtures/invalid-bytecode.json +0 -5
- package/src/lib/parsers/artifact/__tests__/fixtures/invalid-json.txt +0 -11
- package/src/lib/parsers/artifact/__tests__/fixtures/minimal-artifact.json +0 -5
- package/src/lib/parsers/artifact/__tests__/fixtures/missing-abi.json +0 -4
- package/src/lib/parsers/artifact/__tests__/fixtures/missing-bytecode.json +0 -11
- package/src/lib/parsers/artifact/__tests__/fixtures/missing-contract-name.json +0 -11
- package/src/lib/parsers/artifact/__tests__/fixtures/simple-artifact.json +0 -40
- package/src/lib/parsers/artifact/__tests__/fixtures/wrong-types.json +0 -7
- package/src/lib/parsers/artifact/foundry-1.2.ts +0 -72
- package/src/lib/parsers/artifact/index.ts +0 -27
- package/src/lib/parsers/artifact/types.ts +0 -9
- package/src/lib/parsers/buildinfo.ts +0 -127
- package/src/lib/parsers/constants.ts +0 -56
- package/src/lib/parsers/index.ts +0 -6
- package/src/lib/parsers/job.ts +0 -160
- package/src/lib/parsers/source.ts +0 -129
- package/src/lib/parsers/template.ts +0 -135
- package/src/lib/provenance.ts +0 -785
- package/src/lib/std/templates/arachnid-deterministic-deployment-proxy.yaml +0 -68
- package/src/lib/std/templates/assured-deployment.yaml +0 -46
- package/src/lib/std/templates/era-evm-predeploy.yaml +0 -35
- package/src/lib/std/templates/erc-2470.yaml +0 -70
- package/src/lib/std/templates/min-balance.yaml +0 -35
- package/src/lib/std/templates/nano-universal-deployer.yaml +0 -61
- package/src/lib/std/templates/raw-erc-2470.yaml +0 -62
- package/src/lib/std/templates/raw-nano-universal-deployer.yaml +0 -54
- package/src/lib/std/templates/raw-sequence-universal-deployer-2.yaml +0 -52
- package/src/lib/std/templates/sequence-universal-deployer-2.yaml +0 -61
- package/src/lib/types/__tests__/json-request-action.spec.ts +0 -243
- package/src/lib/types/__tests__/read-json-value.spec.ts +0 -278
- package/src/lib/types/__tests__/resolve-json-value.spec.ts +0 -769
- package/src/lib/types/actions.ts +0 -148
- package/src/lib/types/artifacts.ts +0 -21
- package/src/lib/types/buildinfo.ts +0 -116
- package/src/lib/types/conditions.ts +0 -50
- package/src/lib/types/contracts.ts +0 -26
- package/src/lib/types/definitions.ts +0 -77
- package/src/lib/types/index.ts +0 -9
- package/src/lib/types/network.ts +0 -33
- package/src/lib/types/project.ts +0 -9
- package/src/lib/types/source.ts +0 -26
- package/src/lib/types/task.ts +0 -9
- package/src/lib/types/values.ts +0 -221
- package/src/lib/utils/assertion.ts +0 -24
- package/src/lib/utils/validation.ts +0 -116
- package/src/lib/validation/contract-references.ts +0 -210
- package/src/lib/validation/index.ts +0 -1
- package/src/lib/verification/__tests__/etherscan.spec.ts +0 -710
- package/src/lib/verification/__tests__/sourcify.spec.ts +0 -288
- package/src/lib/verification/etherscan.ts +0 -547
- package/src/lib/verification/sourcify.ts +0 -248
- package/test_validation/artifacts/TestContract.json +0 -9
- package/test_validation/jobs/test-missing.yaml +0 -16
- package/test_validation/networks.yaml +0 -3
- 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
|
-
})
|