@newrelic/browser-agent 1.241.0 → 1.243.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/CHANGELOG.md +1465 -0
- package/dist/cjs/cdn/polyfills/lite.js +13 -1
- package/dist/cjs/cdn/polyfills/pro.js +17 -1
- package/dist/cjs/cdn/polyfills/spa.js +18 -1
- package/dist/cjs/common/config/state/init.js +32 -5
- package/dist/cjs/common/constants/env.cdn.js +1 -1
- package/dist/cjs/common/constants/env.npm.js +1 -1
- package/dist/cjs/common/dom/query-selector.js +16 -0
- package/dist/cjs/common/session/session-entity.js +20 -2
- package/dist/cjs/common/wrap/wrap-function.js +1 -1
- package/dist/cjs/features/ajax/aggregate/index.js +1 -1
- package/dist/cjs/features/session_replay/aggregate/index.js +84 -50
- package/dist/cjs/features/utils/feature-base.js +1 -2
- package/dist/cjs/features/utils/instrument-base.js +1 -0
- package/dist/cjs/loaders/api/api.js +2 -2
- package/dist/cjs/loaders/api/apiAsync.js +0 -37
- package/dist/cjs/loaders/configure/configure.js +1 -1
- package/dist/cjs/loaders/configure/public-path.js +6 -3
- package/dist/esm/cdn/polyfills/lite.js +8 -1
- package/dist/esm/cdn/polyfills/pro.js +13 -2
- package/dist/esm/cdn/polyfills/spa.js +13 -1
- package/dist/esm/common/config/state/init.js +32 -5
- package/dist/esm/common/constants/env.cdn.js +1 -1
- package/dist/esm/common/constants/env.npm.js +1 -1
- package/dist/esm/common/dom/query-selector.js +9 -0
- package/dist/esm/common/session/session-entity.js +18 -1
- package/dist/esm/common/wrap/wrap-function.js +1 -1
- package/dist/esm/features/ajax/aggregate/index.js +1 -1
- package/dist/esm/features/session_replay/aggregate/index.js +83 -50
- package/dist/esm/features/utils/feature-base.js +1 -2
- package/dist/esm/features/utils/instrument-base.js +1 -0
- package/dist/esm/loaders/api/api.js +2 -2
- package/dist/esm/loaders/api/apiAsync.js +1 -36
- package/dist/esm/loaders/configure/configure.js +1 -1
- package/dist/esm/loaders/configure/public-path.js +6 -3
- package/dist/types/common/config/state/init.d.ts.map +1 -1
- package/dist/types/common/dom/query-selector.d.ts +2 -0
- package/dist/types/common/dom/query-selector.d.ts.map +1 -0
- package/dist/types/common/session/session-entity.d.ts +5 -0
- package/dist/types/common/session/session-entity.d.ts.map +1 -1
- package/dist/types/features/session_replay/aggregate/index.d.ts +11 -14
- package/dist/types/features/session_replay/aggregate/index.d.ts.map +1 -1
- package/dist/types/features/utils/feature-base.d.ts.map +1 -1
- package/dist/types/features/utils/instrument-base.d.ts.map +1 -1
- package/dist/types/loaders/api/api.d.ts.map +1 -1
- package/dist/types/loaders/api/apiAsync.d.ts.map +1 -1
- package/dist/types/loaders/configure/public-path.d.ts +1 -1
- package/dist/types/loaders/configure/public-path.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/cdn/polyfills/lite.js +14 -1
- package/src/cdn/polyfills/pro.js +23 -2
- package/src/cdn/polyfills/spa.js +24 -1
- package/src/common/config/state/init.js +33 -4
- package/src/common/dom/query-selector.js +9 -0
- package/src/common/session/session-entity.js +20 -1
- package/src/common/wrap/wrap-function.js +1 -1
- package/src/features/ajax/aggregate/index.js +2 -2
- package/src/features/session_replay/aggregate/index.js +82 -34
- package/src/features/utils/feature-base.js +1 -2
- package/src/features/utils/instrument-base.js +1 -0
- package/src/loaders/api/api.js +1 -2
- package/src/loaders/api/apiAsync.js +1 -39
- package/src/loaders/configure/configure.js +1 -1
- package/src/loaders/configure/public-path.js +6 -3
- package/src/common/aggregate/aggregator.test.js +0 -107
- package/src/common/config/state/configurable.test.js +0 -73
- package/src/common/config/state/info.test.js +0 -31
- package/src/common/config/state/init.test.js +0 -28
- package/src/common/config/state/loader-config.test.js +0 -21
- package/src/common/config/state/runtime.test.js +0 -21
- package/src/common/constants/env.cdn.test.js +0 -7
- package/src/common/constants/env.npm.test.js +0 -7
- package/src/common/constants/env.test.js +0 -7
- package/src/common/constants/runtime.test.js +0 -176
- package/src/common/deny-list/deny-list.test.js +0 -104
- package/src/common/drain/drain.test.js +0 -74
- package/src/common/event-emitter/contextual-ee.component-test.js +0 -293
- package/src/common/event-emitter/handle.test.js +0 -56
- package/src/common/event-emitter/register-handler.test.js +0 -61
- package/src/common/harvest/harvest-scheduler.test.js +0 -492
- package/src/common/harvest/harvest.test.js +0 -813
- package/src/common/ids/id.test.js +0 -92
- package/src/common/ids/unique-id.test.js +0 -58
- package/src/common/session/session-entity.component-test.js +0 -346
- package/src/common/storage/local-storage.test.js +0 -17
- package/src/common/timer/interaction-timer.component-test.js +0 -212
- package/src/common/timer/timer.test.js +0 -99
- package/src/common/timing/nav-timing.test.js +0 -161
- package/src/common/url/canonicalize-url.test.js +0 -45
- package/src/common/url/clean-url.test.js +0 -25
- package/src/common/url/encode.test.js +0 -81
- package/src/common/url/location.test.js +0 -15
- package/src/common/url/parse-url.test.js +0 -110
- package/src/common/url/protocol.test.js +0 -17
- package/src/common/util/console.test.js +0 -34
- package/src/common/util/data-size.test.js +0 -56
- package/src/common/util/feature-flags.test.js +0 -94
- package/src/common/util/get-or-set.test.js +0 -58
- package/src/common/util/invoke.test.js +0 -65
- package/src/common/util/map-own.test.js +0 -52
- package/src/common/util/obfuscate.component-test.js +0 -173
- package/src/common/util/stringify.test.js +0 -49
- package/src/common/util/submit-data.test.js +0 -183
- package/src/common/util/traverse.test.js +0 -50
- package/src/common/vitals/cumulative-layout-shift.test.js +0 -71
- package/src/common/vitals/first-contentful-paint.test.js +0 -124
- package/src/common/vitals/first-input-delay.test.js +0 -88
- package/src/common/vitals/first-paint.test.js +0 -127
- package/src/common/vitals/interaction-to-next-paint.test.js +0 -74
- package/src/common/vitals/largest-contentful-paint.test.js +0 -94
- package/src/common/vitals/long-task.test.js +0 -122
- package/src/common/vitals/time-to-first-byte.test.js +0 -147
- package/src/common/vitals/vital-metric.test.js +0 -171
- package/src/common/wrap/wrap-promise.component-test.js +0 -110
- package/src/features/ajax/instrument/distributed-tracing.test.js +0 -375
- package/src/features/jserrors/aggregate/canonical-function-name.test.js +0 -13
- package/src/features/jserrors/aggregate/compute-stack-trace.test.js +0 -414
- package/src/features/jserrors/aggregate/format-stack-trace.test.js +0 -39
- package/src/features/jserrors/aggregate/string-hash-code.test.js +0 -12
- package/src/features/metrics/aggregate/framework-detection.test.js +0 -332
- package/src/features/page_view_timing/aggregate/index.component-test.js +0 -86
- package/src/features/session_replay/aggregate/index.component-test.js +0 -317
- package/src/features/spa/aggregate/interaction-node.test.js +0 -17
- package/src/features/utils/agent-session.test.js +0 -194
- package/src/features/utils/aggregate-base.test.js +0 -123
- package/src/features/utils/feature-base.test.js +0 -45
- package/src/features/utils/handler-cache.test.js +0 -72
- package/src/features/utils/instrument-base.test.js +0 -216
- package/src/features/utils/lazy-feature-loader.test.js +0 -37
- package/src/loaders/api/api.component-test.js +0 -45
- package/src/loaders/api/api.test.js +0 -85
- package/src/loaders/api/apiAsync.test.js +0 -17
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
import { faker } from '@faker-js/faker'
|
|
2
|
-
|
|
3
|
-
let mockNREUM
|
|
4
|
-
let runtime
|
|
5
|
-
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
mockNREUM = {}
|
|
8
|
-
runtime = {}
|
|
9
|
-
|
|
10
|
-
jest.doMock('../window/nreum', () => ({
|
|
11
|
-
__esModule: true,
|
|
12
|
-
gosNREUM: jest.fn(() => mockNREUM)
|
|
13
|
-
}))
|
|
14
|
-
|
|
15
|
-
jest.doMock('../config/config', () => ({
|
|
16
|
-
__esModule: true,
|
|
17
|
-
getRuntime: jest.fn(() => runtime)
|
|
18
|
-
}))
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
afterEach(() => {
|
|
22
|
-
jest.resetModules()
|
|
23
|
-
jest.resetAllMocks()
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
describe('global event-emitter', () => {
|
|
27
|
-
test('it sets the global event-emitter on window.NREUM when it does not already exist', async () => {
|
|
28
|
-
const { ee } = await import('./contextual-ee')
|
|
29
|
-
|
|
30
|
-
expect(ee).toEqual(mockNREUM.ee)
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
test('it does not set the global event-emitter on window.NREUM when it already exists', async () => {
|
|
34
|
-
mockNREUM.ee = {}
|
|
35
|
-
|
|
36
|
-
const { ee } = await import('./contextual-ee')
|
|
37
|
-
|
|
38
|
-
expect(ee).not.toEqual(mockNREUM.ee)
|
|
39
|
-
})
|
|
40
|
-
})
|
|
41
|
-
|
|
42
|
-
describe('scoping event-emitter', () => {
|
|
43
|
-
test('it creates a new child event-emitter', async () => {
|
|
44
|
-
const { ee } = await import('./contextual-ee')
|
|
45
|
-
|
|
46
|
-
const childName = faker.datatype.uuid()
|
|
47
|
-
const result = ee.get(childName)
|
|
48
|
-
|
|
49
|
-
expect(result).not.toEqual(mockNREUM.ee)
|
|
50
|
-
expect(result).toEqual(ee.get(childName)) // Should always return the same event-emitter
|
|
51
|
-
expect(result.debugId).toEqual(childName)
|
|
52
|
-
})
|
|
53
|
-
|
|
54
|
-
test('it creates a child event-emitter with an isolated backlog', async () => {
|
|
55
|
-
const childName = faker.random.alphaNumeric(16)
|
|
56
|
-
|
|
57
|
-
jest.doMock('../config/config', () => ({
|
|
58
|
-
__esModule: true,
|
|
59
|
-
getRuntime: jest.fn(id => {
|
|
60
|
-
if (id === childName) {
|
|
61
|
-
return { isolatedBacklog: true }
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
return runtime
|
|
65
|
-
})
|
|
66
|
-
}))
|
|
67
|
-
|
|
68
|
-
const { ee } = await import('./contextual-ee')
|
|
69
|
-
const result = ee.get(childName)
|
|
70
|
-
|
|
71
|
-
expect(ee.backlog).not.toBe(result.backlog)
|
|
72
|
-
})
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
describe('event-emitter context', () => {
|
|
76
|
-
test('it returns a new context', async () => {
|
|
77
|
-
const { ee } = await import('./contextual-ee')
|
|
78
|
-
|
|
79
|
-
const result = ee.context()
|
|
80
|
-
|
|
81
|
-
expect(result).toEqual(expect.objectContaining({
|
|
82
|
-
contextId: expect.stringContaining('nr@context:')
|
|
83
|
-
}))
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
test('it returns the same context', async () => {
|
|
87
|
-
const { ee } = await import('./contextual-ee')
|
|
88
|
-
|
|
89
|
-
const result = ee.context()
|
|
90
|
-
|
|
91
|
-
expect(result).toBe(ee.context(result))
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
test('it adds the context to the provided object', async () => {
|
|
95
|
-
const { ee } = await import('./contextual-ee')
|
|
96
|
-
|
|
97
|
-
const obj = {}
|
|
98
|
-
const result = ee.context(obj)
|
|
99
|
-
const ctxKey = Object.getOwnPropertyNames(obj).find(k => k.startsWith('nr@context'))
|
|
100
|
-
|
|
101
|
-
expect(result).toBe(obj[ctxKey])
|
|
102
|
-
})
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
describe('event-emitter buffer', () => {
|
|
106
|
-
test('it should create a new buffer for the given group', async () => {
|
|
107
|
-
const { ee } = await import('./contextual-ee')
|
|
108
|
-
const eventType = faker.datatype.uuid()
|
|
109
|
-
const group = faker.datatype.uuid()
|
|
110
|
-
|
|
111
|
-
ee.buffer([eventType], group)
|
|
112
|
-
|
|
113
|
-
expect(ee.backlog).toEqual(expect.objectContaining({
|
|
114
|
-
[group]: []
|
|
115
|
-
}))
|
|
116
|
-
expect(ee.isBuffering(eventType)).toEqual(true)
|
|
117
|
-
})
|
|
118
|
-
|
|
119
|
-
test('it should default group to "feature"', async () => {
|
|
120
|
-
const { ee } = await import('./contextual-ee')
|
|
121
|
-
const eventType = faker.datatype.uuid()
|
|
122
|
-
|
|
123
|
-
ee.buffer([eventType])
|
|
124
|
-
|
|
125
|
-
expect(ee.backlog).toEqual(expect.objectContaining({
|
|
126
|
-
feature: []
|
|
127
|
-
}))
|
|
128
|
-
expect(ee.isBuffering(eventType)).toEqual(true)
|
|
129
|
-
})
|
|
130
|
-
|
|
131
|
-
test('it should not create buffer if event-emitter is aborted', async () => {
|
|
132
|
-
const { ee } = await import('./contextual-ee')
|
|
133
|
-
const eventType = faker.datatype.uuid()
|
|
134
|
-
const group = faker.datatype.uuid()
|
|
135
|
-
|
|
136
|
-
ee.backlog = {
|
|
137
|
-
api: ['foo', 'bar', 'baz']
|
|
138
|
-
}
|
|
139
|
-
ee.abort()
|
|
140
|
-
ee.buffer([eventType], group)
|
|
141
|
-
|
|
142
|
-
expect(ee.backlog).toEqual({})
|
|
143
|
-
expect(ee.isBuffering(eventType)).toEqual(false)
|
|
144
|
-
})
|
|
145
|
-
})
|
|
146
|
-
|
|
147
|
-
describe('event-emitter abort', () => {
|
|
148
|
-
test('it aborts if there is an API backlog', async () => {
|
|
149
|
-
const { ee } = await import('./contextual-ee')
|
|
150
|
-
|
|
151
|
-
ee.backlog = {
|
|
152
|
-
api: ['foo', 'bar', 'baz']
|
|
153
|
-
}
|
|
154
|
-
ee.abort()
|
|
155
|
-
|
|
156
|
-
expect(ee.aborted).toEqual(true)
|
|
157
|
-
expect(ee.backlog).toEqual({})
|
|
158
|
-
})
|
|
159
|
-
|
|
160
|
-
test('it aborts if there is a feature backlog', async () => {
|
|
161
|
-
const { ee } = await import('./contextual-ee')
|
|
162
|
-
|
|
163
|
-
ee.backlog = {
|
|
164
|
-
feature: ['foo', 'bar', 'baz']
|
|
165
|
-
}
|
|
166
|
-
ee.abort()
|
|
167
|
-
|
|
168
|
-
expect(ee.aborted).toEqual(true)
|
|
169
|
-
expect(ee.backlog).toEqual({})
|
|
170
|
-
})
|
|
171
|
-
})
|
|
172
|
-
|
|
173
|
-
describe('event-emitter emit', () => {
|
|
174
|
-
test('should execute the listener', async () => {
|
|
175
|
-
const { ee } = await import('./contextual-ee')
|
|
176
|
-
const mockListener = jest.fn()
|
|
177
|
-
const eventType = faker.datatype.uuid()
|
|
178
|
-
const eventArgs = ['a', 'b', 'c']
|
|
179
|
-
|
|
180
|
-
ee.on(eventType, mockListener)
|
|
181
|
-
ee.emit(eventType, eventArgs)
|
|
182
|
-
|
|
183
|
-
expect(mockListener).toHaveBeenCalledWith(eventArgs[0], eventArgs[1], eventArgs[2])
|
|
184
|
-
})
|
|
185
|
-
|
|
186
|
-
test('should not execute the listener after removal', async () => {
|
|
187
|
-
const { ee } = await import('./contextual-ee')
|
|
188
|
-
const mockListener = jest.fn()
|
|
189
|
-
const eventType = faker.datatype.uuid()
|
|
190
|
-
const eventArgs = ['a', 'b', 'c']
|
|
191
|
-
|
|
192
|
-
ee.on(eventType, mockListener)
|
|
193
|
-
ee.emit(eventType, eventArgs)
|
|
194
|
-
ee.removeEventListener(eventType, mockListener)
|
|
195
|
-
ee.emit(eventType, eventArgs)
|
|
196
|
-
|
|
197
|
-
expect(mockListener).toHaveBeenCalledTimes(1)
|
|
198
|
-
})
|
|
199
|
-
|
|
200
|
-
test('should return early if global event-emitter is aborted', async () => {
|
|
201
|
-
const { ee } = await import('./contextual-ee')
|
|
202
|
-
const mockListener = jest.fn()
|
|
203
|
-
const eventType = faker.datatype.uuid()
|
|
204
|
-
const eventArgs = ['a', 'b', 'c']
|
|
205
|
-
|
|
206
|
-
ee.backlog = {
|
|
207
|
-
api: ['foo', 'bar', 'baz']
|
|
208
|
-
}
|
|
209
|
-
ee.abort()
|
|
210
|
-
ee.on(eventType, mockListener)
|
|
211
|
-
ee.emit(eventType, eventArgs)
|
|
212
|
-
|
|
213
|
-
expect(mockListener).toHaveBeenCalledTimes(0)
|
|
214
|
-
})
|
|
215
|
-
|
|
216
|
-
test('should still emit if global event-emitter is aborted but force flag is true', async () => {
|
|
217
|
-
const { ee } = await import('./contextual-ee')
|
|
218
|
-
const scopeEE = ee.get(faker.datatype.uuid())
|
|
219
|
-
const mockScopeListener = jest.fn()
|
|
220
|
-
const eventType = faker.datatype.uuid()
|
|
221
|
-
const eventArgs = ['a', 'b', 'c']
|
|
222
|
-
|
|
223
|
-
ee.backlog = {
|
|
224
|
-
api: ['foo', 'bar', 'baz']
|
|
225
|
-
}
|
|
226
|
-
ee.abort()
|
|
227
|
-
scopeEE.on(eventType, mockScopeListener)
|
|
228
|
-
scopeEE.emit(eventType, eventArgs, {}, true)
|
|
229
|
-
|
|
230
|
-
expect(mockScopeListener).toHaveBeenCalledTimes(1)
|
|
231
|
-
})
|
|
232
|
-
|
|
233
|
-
test('should bubble the event if bubble flag is true', async () => {
|
|
234
|
-
const { ee } = await import('./contextual-ee')
|
|
235
|
-
const scopeEE = ee.get(faker.datatype.uuid())
|
|
236
|
-
const mockListener = jest.fn()
|
|
237
|
-
const mockScopeListener = jest.fn()
|
|
238
|
-
const eventType = faker.datatype.uuid()
|
|
239
|
-
const eventArgs = ['a', 'b', 'c']
|
|
240
|
-
|
|
241
|
-
ee.on(eventType, mockListener)
|
|
242
|
-
scopeEE.on(eventType, mockScopeListener)
|
|
243
|
-
scopeEE.emit(eventType, eventArgs, {}, false, true)
|
|
244
|
-
|
|
245
|
-
expect(mockScopeListener).toHaveBeenCalledTimes(1)
|
|
246
|
-
expect(mockListener).toHaveBeenCalledTimes(1)
|
|
247
|
-
})
|
|
248
|
-
|
|
249
|
-
test('should not bubble the event if bubble flag is false', async () => {
|
|
250
|
-
const { ee } = await import('./contextual-ee')
|
|
251
|
-
const scopeEE = ee.get(faker.datatype.uuid())
|
|
252
|
-
const mockListener = jest.fn()
|
|
253
|
-
const mockScopeListener = jest.fn()
|
|
254
|
-
const eventType = faker.datatype.uuid()
|
|
255
|
-
const eventArgs = ['a', 'b', 'c']
|
|
256
|
-
|
|
257
|
-
ee.on(eventType, mockListener)
|
|
258
|
-
scopeEE.on(eventType, mockScopeListener)
|
|
259
|
-
scopeEE.emit(eventType, eventArgs, {}, false, false)
|
|
260
|
-
|
|
261
|
-
expect(mockScopeListener).toHaveBeenCalledTimes(1)
|
|
262
|
-
expect(mockListener).not.toHaveBeenCalled()
|
|
263
|
-
})
|
|
264
|
-
|
|
265
|
-
test('should buffer the event on the scoped event-emitter', async () => {
|
|
266
|
-
const { ee } = await import('./contextual-ee')
|
|
267
|
-
const scopeEE = ee.get(faker.datatype.uuid())
|
|
268
|
-
const mockListener = jest.fn()
|
|
269
|
-
const mockScopeListener = jest.fn()
|
|
270
|
-
const eventType = faker.datatype.uuid()
|
|
271
|
-
const eventArgs = ['a', 'b', 'c']
|
|
272
|
-
|
|
273
|
-
ee.on(eventType, mockListener)
|
|
274
|
-
ee.buffer([eventType])
|
|
275
|
-
scopeEE.on(eventType, mockScopeListener)
|
|
276
|
-
scopeEE.buffer([eventType])
|
|
277
|
-
scopeEE.emit(eventType, eventArgs, {}, false, false)
|
|
278
|
-
|
|
279
|
-
expect(mockScopeListener).toHaveBeenCalledTimes(1)
|
|
280
|
-
expect(mockListener).not.toHaveBeenCalled()
|
|
281
|
-
expect(scopeEE.backlog.feature).toEqual(expect.arrayContaining([
|
|
282
|
-
expect.arrayContaining([
|
|
283
|
-
scopeEE,
|
|
284
|
-
eventType,
|
|
285
|
-
eventArgs,
|
|
286
|
-
expect.objectContaining({
|
|
287
|
-
contextId: expect.stringContaining('nr@context:')
|
|
288
|
-
})
|
|
289
|
-
])
|
|
290
|
-
]))
|
|
291
|
-
expect(ee.backlog.feature).toEqual(scopeEE.backlog.feature)
|
|
292
|
-
})
|
|
293
|
-
})
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { faker } from '@faker-js/faker'
|
|
2
|
-
|
|
3
|
-
jest.mock('./contextual-ee', () => ({
|
|
4
|
-
__esModule: true,
|
|
5
|
-
ee: {
|
|
6
|
-
buffer: jest.fn(),
|
|
7
|
-
emit: jest.fn(),
|
|
8
|
-
get: jest.fn(() => ({
|
|
9
|
-
buffer: jest.fn(),
|
|
10
|
-
emit: jest.fn()
|
|
11
|
-
}))
|
|
12
|
-
}
|
|
13
|
-
}))
|
|
14
|
-
|
|
15
|
-
afterEach(() => {
|
|
16
|
-
jest.resetModules()
|
|
17
|
-
jest.resetAllMocks()
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
test('it should create and use a default event-emitter', async () => {
|
|
21
|
-
const { ee } = await import('./contextual-ee')
|
|
22
|
-
const { handle } = await import('./handle')
|
|
23
|
-
|
|
24
|
-
const handleEE = jest.mocked(ee.get).mock.results[0].value
|
|
25
|
-
const eventType = faker.datatype.uuid()
|
|
26
|
-
const eventArgs = ['a', 'b', 'c']
|
|
27
|
-
const eventContext = {}
|
|
28
|
-
const eventGroup = faker.datatype.uuid()
|
|
29
|
-
|
|
30
|
-
handle(eventType, eventArgs, eventContext, eventGroup)
|
|
31
|
-
|
|
32
|
-
expect(handleEE.buffer).toHaveBeenCalledWith([eventType], eventGroup)
|
|
33
|
-
expect(handleEE.emit).toHaveBeenCalledWith(eventType, eventArgs, eventContext)
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
test('it should use the provided scoped event-emitter', async () => {
|
|
37
|
-
const { ee } = await import('./contextual-ee')
|
|
38
|
-
const { handle } = await import('./handle')
|
|
39
|
-
const scopedEE = {
|
|
40
|
-
buffer: jest.fn(),
|
|
41
|
-
emit: jest.fn()
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
const handleEE = jest.mocked(ee.get).mock.results[0].value
|
|
45
|
-
const eventType = faker.datatype.uuid()
|
|
46
|
-
const eventArgs = ['a', 'b', 'c']
|
|
47
|
-
const eventContext = {}
|
|
48
|
-
const eventGroup = faker.datatype.uuid()
|
|
49
|
-
|
|
50
|
-
handle(eventType, eventArgs, eventContext, eventGroup, scopedEE)
|
|
51
|
-
|
|
52
|
-
expect(handleEE.buffer).not.toHaveBeenCalled()
|
|
53
|
-
expect(handleEE.emit).not.toHaveBeenCalled()
|
|
54
|
-
expect(scopedEE.buffer).toHaveBeenCalledWith([eventType], eventGroup)
|
|
55
|
-
expect(scopedEE.emit).toHaveBeenCalledWith(eventType, eventArgs, eventContext)
|
|
56
|
-
})
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { faker } from '@faker-js/faker'
|
|
2
|
-
|
|
3
|
-
jest.mock('./handle', () => ({
|
|
4
|
-
__esModule: true,
|
|
5
|
-
handleEE: {}
|
|
6
|
-
}))
|
|
7
|
-
|
|
8
|
-
afterEach(() => {
|
|
9
|
-
jest.resetModules()
|
|
10
|
-
jest.resetAllMocks()
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
test('should default group to "feature"', async () => {
|
|
14
|
-
const { handleEE } = await import('./handle')
|
|
15
|
-
const { registerHandler } = await import('./register-handler')
|
|
16
|
-
|
|
17
|
-
const eventType = faker.datatype.uuid()
|
|
18
|
-
const eventHandler = jest.fn()
|
|
19
|
-
|
|
20
|
-
registerHandler(eventType, eventHandler)
|
|
21
|
-
|
|
22
|
-
expect(registerHandler.handlers.feature).toEqual(expect.objectContaining({
|
|
23
|
-
[eventType]: [expect.arrayContaining([
|
|
24
|
-
handleEE, eventHandler
|
|
25
|
-
])]
|
|
26
|
-
}))
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
test('should use the provided group', async () => {
|
|
30
|
-
const { handleEE } = await import('./handle')
|
|
31
|
-
const { registerHandler } = await import('./register-handler')
|
|
32
|
-
|
|
33
|
-
const eventType = faker.datatype.uuid()
|
|
34
|
-
const eventGroup = faker.datatype.uuid()
|
|
35
|
-
const eventHandler = jest.fn()
|
|
36
|
-
|
|
37
|
-
registerHandler(eventType, eventHandler, eventGroup)
|
|
38
|
-
|
|
39
|
-
expect(registerHandler.handlers[eventGroup]).toEqual(expect.objectContaining({
|
|
40
|
-
[eventType]: [expect.arrayContaining([
|
|
41
|
-
handleEE, eventHandler
|
|
42
|
-
])]
|
|
43
|
-
}))
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
test('should use the provided event-emitter', async () => {
|
|
47
|
-
const { registerHandler } = await import('./register-handler')
|
|
48
|
-
|
|
49
|
-
const scopedEE = {}
|
|
50
|
-
const eventType = faker.datatype.uuid()
|
|
51
|
-
const eventGroup = faker.datatype.uuid()
|
|
52
|
-
const eventHandler = jest.fn()
|
|
53
|
-
|
|
54
|
-
registerHandler(eventType, eventHandler, eventGroup, scopedEE)
|
|
55
|
-
|
|
56
|
-
expect(registerHandler.handlers[eventGroup]).toEqual(expect.objectContaining({
|
|
57
|
-
[eventType]: [expect.arrayContaining([
|
|
58
|
-
scopedEE, eventHandler
|
|
59
|
-
])]
|
|
60
|
-
}))
|
|
61
|
-
})
|