@@ -10,7 +10,7 @@ const indexPage = new IndexPage()
10
10
11
11
const normalizeSnapshotEvent = ( el : SegmentEvent ) => {
12
12
return {
13
- type : el . properties ?. type ,
13
+ type : el . type ,
14
14
event : el . event ,
15
15
userId : el . userId ,
16
16
groupId : el . groupId ,
@@ -38,21 +38,60 @@ test('Segment events', async ({ page }) => {
38
38
const basicEdgeFn = `
39
39
// this is a process signal function
40
40
const processSignal = (signal) => {
41
- analytics.identify('john', { found: true })
42
- analytics.group('foo', { hello: 'world' })
43
- analytics.alias('john', 'johnsmith')
44
- analytics.track('a track call', {foo: 'bar'})
45
- analytics.page('Retail Page', 'Home', { url: 'http://my-home.com', title: 'Some Title' });
41
+ if (signal.type === 'interaction' && signal.data.eventType === 'click') {
42
+ analytics.identify('john', { found: true })
43
+ analytics.group('foo', { hello: 'world' })
44
+ analytics.alias('john', 'johnsmith')
45
+ analytics.track('a track call', {foo: 'bar'})
46
+ analytics.page('Retail Page', 'Home', { url: 'http://my-home.com', title: 'Some Title' });
47
+ }
46
48
}`
47
49
48
50
await indexPage . load ( page , basicEdgeFn )
51
+ await indexPage . clickButton ( )
49
52
await Promise . all ( [
50
- indexPage . clickButton ( ) ,
51
53
indexPage . waitForSignalsApiFlush ( ) ,
52
54
indexPage . waitForTrackingApiFlush ( ) ,
53
55
] )
54
56
55
57
const trackingApiReqs = indexPage . trackingApiReqs . map ( normalizeSnapshotEvent )
56
-
57
58
expect ( trackingApiReqs ) . toEqual ( snapshot )
58
59
} )
60
+
61
+ test ( 'Should dispatch events from signals that occurred before analytics was instantiated' , async ( {
62
+ page,
63
+ } ) => {
64
+ const edgeFn = `
65
+ const processSignal = (signal) => {
66
+ if (signal.type === 'navigation' && signal.data.action === 'pageLoad') {
67
+ analytics.page('dispatched from signals - navigation')
68
+ }
69
+ if (signal.type === 'userDefined') {
70
+ analytics.track('dispatched from signals - userDefined')
71
+ }
72
+ }`
73
+
74
+ await indexPage . load ( page , edgeFn )
75
+
76
+ // add a user defined signal before analytics is instantiated
77
+ void indexPage . addUserDefinedSignal ( )
78
+
79
+ await indexPage . waitForAnalyticsInit ( )
80
+
81
+ await Promise . all ( [
82
+ indexPage . waitForSignalsApiFlush ( ) ,
83
+ indexPage . waitForTrackingApiFlush ( ) ,
84
+ ] )
85
+ const trackingApiReqs = indexPage . trackingApiReqs
86
+ expect ( trackingApiReqs ) . toHaveLength ( 2 )
87
+
88
+ const pageEvents = trackingApiReqs . find ( ( el ) => el . type === 'page' ) !
89
+ expect ( pageEvents ) . toBeTruthy ( )
90
+ expect ( pageEvents . name ) . toEqual ( 'dispatched from signals - navigation' )
91
+
92
+ const userDefinedEvents = trackingApiReqs . find ( ( el ) => el . type === 'track' ) !
93
+ expect ( userDefinedEvents ) . toBeTruthy ( )
94
+ expect ( userDefinedEvents . event ) . toEqual (
95
+ 'dispatched from signals - userDefined'
96
+ )
97
+ } )
0 commit comments