Skip to content

Commit 25a34da

Browse files
committed
wip
1 parent 94e4722 commit 25a34da

File tree

6 files changed

+71
-20
lines changed

6 files changed

+71
-20
lines changed
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
/* eslint-disable no-undef */
2+
import './src/test-helpers/jest-extended'
23
import 'fake-indexeddb/auto'
34
globalThis.structuredClone = (v: any) => JSON.parse(JSON.stringify(v))
4-
5-
import './src/test-helpers/custom-snapshot-serializers'

packages/signals/signals/src/core/middleware/signals-ingest/__tests__/redact.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ describe(redactSignalData, () => {
9393
listener: 'onchange',
9494
target: createMockTarget({ value: 'XXX', formData: { password: 'XXX' } }),
9595
})
96-
expect(redactSignalData(signal)).toEqual(expected)
96+
expect(redactSignalData(signal)).toMatchSignal(expected)
9797
})
9898

9999
it('should redact attributes in change and in target if the listener is "mutation"', () => {
@@ -117,7 +117,7 @@ describe(redactSignalData, () => {
117117
innerText: 'XXX',
118118
}),
119119
})
120-
expect(redactSignalData(signal)).toEqual(expected)
120+
expect(redactSignalData(signal)).toMatchSignal(expected)
121121
})
122122

123123
it('should redact the textContent and innerText in the "target" property if the listener is "contenteditable"', () => {
@@ -133,7 +133,7 @@ describe(redactSignalData, () => {
133133
change: { textContent: 'XXX' },
134134
target: createMockTarget({ textContent: 'XXX', innerText: 'XXX' }),
135135
})
136-
expect(redactSignalData(signal)).toEqual(expected)
136+
expect(redactSignalData(signal)).toMatchSignal(expected)
137137
})
138138

139139
it('should redact the values in the "data" property if the type is "network"', () => {
@@ -157,7 +157,7 @@ describe(redactSignalData, () => {
157157
},
158158
metadataFixture
159159
)
160-
expect(redactSignalData(signal)).toEqual(expected)
160+
expect(redactSignalData(signal)).toMatchSignal(expected)
161161
})
162162

163163
it('should not mutate the original signal object', () => {

packages/signals/signals/src/core/middleware/user-info/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { User } from '../../../types'
33
import { SignalsMiddleware, SignalsMiddlewareContext } from '../../emitter'
44

55
export class UserInfoMiddleware implements SignalsMiddleware {
6-
ctx!: SignalsMiddlewareContext
76
user!: User
87

98
async load(ctx: SignalsMiddlewareContext) {

packages/signals/signals/src/core/signals/signals.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { LogLevelOptions } from '../debug-mode'
1616
import { SignalsIngestSubscriber } from '../middleware/signals-ingest'
1717
import { SignalsEventProcessorSubscriber } from '../middleware/event-processor'
1818
import { NetworkSignalsFilterMiddleware } from '../middleware/network-signals-filter/network-signals-filter'
19+
import { UserInfoMiddleware } from '../middleware/user-info'
1920

2021
interface ISignals {
2122
start(analytics: AnyAnalytics): Promise<void>
@@ -126,6 +127,7 @@ export class Signals implements ISignals {
126127
// we initialize the emitter here so that registerGenerator can be called before start
127128
return new SignalEmitter()
128129
.addMiddleware(
130+
new UserInfoMiddleware(),
129131
new NetworkSignalsFilterMiddleware(),
130132
...(middleware || [])
131133
)

packages/signals/signals/src/test-helpers/custom-snapshot-serializers.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import { Signal } from '@segment/analytics-signals-runtime'
2+
3+
// e.g 2025-03-18T20:27:01.459Z
4+
const isoTimestampRegex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/
5+
6+
export const timestampSerializer: jest.SnapshotSerializerPlugin = {
7+
test(value: any) {
8+
return typeof value === 'string' && isoTimestampRegex.test(value)
9+
},
10+
print() {
11+
return '<ISO Timestamp>'
12+
},
13+
}
14+
15+
/***
16+
* Add snapshot serializer so timestamps are not compared in snapshots
17+
*/
18+
expect.addSnapshotSerializer(timestampSerializer)
19+
20+
export function toMatchSignal(
21+
this: jest.MatcherContext,
22+
received: Signal,
23+
expected: Signal
24+
) {
25+
const cleanSignal = (signal: Signal) => {
26+
const { timestamp, ...rest } = signal
27+
return rest
28+
}
29+
30+
const pass = this.equals(cleanSignal(received), cleanSignal(expected))
31+
if (pass) {
32+
return {
33+
message: () =>
34+
`expected ${this.utils.printReceived(
35+
received
36+
)} not to match ${this.utils.printExpected(expected)}`,
37+
pass: true,
38+
}
39+
} else {
40+
return {
41+
message: () =>
42+
`expected ${this.utils.printReceived(
43+
received
44+
)} to match ${this.utils.printExpected(expected)}`,
45+
pass: false,
46+
}
47+
}
48+
}
49+
50+
/***
51+
* Add special matcher to compare signals
52+
* usage:
53+
* expect(signal).toMatchSignal(expectedSignal)
54+
*/
55+
expect.extend({ toMatchSignal })
56+
57+
declare global {
58+
// eslint-disable-next-line @typescript-eslint/no-namespace
59+
namespace jest {
60+
interface Matchers<R> {
61+
toMatchSignal(expected: Signal): R
62+
}
63+
}
64+
}

0 commit comments

Comments
 (0)