28
28
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
29
*/
30
30
31
+ import { TrackerConfiguration } from '../../dist/index.module' ;
31
32
import { addTracker , SharedState } from '../../src' ;
32
33
import { createTestIdCookie , createTestSessionIdCookie } from '../helpers' ;
33
34
@@ -54,45 +55,45 @@ describe('Tracker API: ', () => {
54
55
} ) ;
55
56
56
57
it ( 'Sets initial domain session index on first session' , ( ) => {
57
- const tracker = addTracker ( 'sp1' , 'sp1' , '' , '' , new SharedState ( ) ) ;
58
+ const tracker = createTracker ( ) ;
58
59
59
60
expect ( tracker ?. getDomainSessionIndex ( ) ) . toEqual ( 1 ) ;
60
61
} ) ;
61
62
62
63
it ( 'Sets correct domain session index on new session' , ( ) => {
63
64
const initialSessionIndex = 1 ;
64
65
document . cookie = createTestIdCookie ( { visitCount : initialSessionIndex } ) ;
65
- const tracker = addTracker ( 'sp2' , 'sp2' , '' , '' , new SharedState ( ) ) ;
66
+ const tracker = createTracker ( ) ;
66
67
67
68
expect ( tracker ?. getDomainSessionIndex ( ) ) . toEqual ( initialSessionIndex + 1 ) ;
68
69
} ) ;
69
70
70
71
it ( 'Sets correct domain session index on existing session' , ( ) => {
71
72
const initialSessionIndex = 2 ;
72
73
document . cookie = createTestIdCookie ( { visitCount : initialSessionIndex } ) + ' ' + createTestSessionIdCookie ( ) ;
73
- const tracker = addTracker ( 'sp3' , 'sp3' , '' , '' , new SharedState ( ) ) ;
74
+ const tracker = createTracker ( ) ;
74
75
75
76
expect ( tracker ?. getDomainSessionIndex ( ) ) . toEqual ( initialSessionIndex ) ;
76
77
} ) ;
77
78
78
79
it ( 'Sets correct domain session index (1) after clearUserData() on existing session' , ( ) => {
79
80
const initialSessionIndex = 2 ;
80
81
document . cookie = createTestIdCookie ( { visitCount : initialSessionIndex } ) + ' ' + createTestSessionIdCookie ( ) ;
81
- const tracker = addTracker ( 'sp4' , 'sp4' , '' , '' , new SharedState ( ) ) ;
82
+ const tracker = createTracker ( ) ;
82
83
expect ( tracker ?. getDomainSessionIndex ( ) ) . toEqual ( initialSessionIndex ) ;
83
84
84
85
tracker ?. clearUserData ( ) ;
85
86
expect ( tracker ?. getDomainSessionIndex ( ) ) . toEqual ( 1 ) ;
86
87
} ) ;
87
88
88
89
it ( 'Sets correct domain session index anonymous track' , ( ) => {
89
- const tracker = addTracker ( 'sp5' , 'sp5' , '' , '' , new SharedState ( ) , { anonymousTracking : true } ) ;
90
+ const tracker = createTracker ( { anonymousTracking : true } ) ;
90
91
expect ( tracker ?. getDomainSessionIndex ( ) ) . toEqual ( 1 ) ;
91
92
} ) ;
92
93
93
94
it ( 'Retains correct domain session index on opt-out cookie present' , ( ) => {
94
95
const optOutCookieName = 'optOut' ;
95
- const tracker = addTracker ( 'sp6' , 'sp6' , '' , '' , new SharedState ( ) ) ;
96
+ const tracker = createTracker ( ) ;
96
97
tracker ?. setOptOutCookie ( optOutCookieName ) ;
97
98
document . cookie = `${ optOutCookieName } =1;` ;
98
99
@@ -102,10 +103,73 @@ describe('Tracker API: ', () => {
102
103
103
104
it ( 'Sets correct domain session index after session expiration' , ( ) => {
104
105
// Session timeout is in seconds
105
- const tracker = addTracker ( 'sp7' , 'sp7' , '' , '' , new SharedState ( ) , { sessionCookieTimeout : 1 } ) ;
106
+ const tracker = createTracker ( { sessionCookieTimeout : 1 } ) ;
106
107
// Advance timer by more than one second
107
108
jest . advanceTimersByTime ( 1001 ) ;
108
109
tracker ?. trackPageView ( { title : 'my page' } ) ;
109
110
expect ( tracker ?. getDomainSessionIndex ( ) ) . toEqual ( 2 ) ;
110
111
} ) ;
112
+
113
+ it ( 'Adds the client session context entity when enabled' , ( done ) => {
114
+ const tracker = createTracker ( {
115
+ contexts : { session : true } ,
116
+ encodeBase64 : false ,
117
+ plugins : [
118
+ {
119
+ afterTrack : ( payload ) => {
120
+ let context = payload . co as string ;
121
+ expect ( context ) . toContain ( 'client_session' ) ;
122
+ done ( ) ;
123
+ } ,
124
+ } ,
125
+ ] ,
126
+ } ) ;
127
+
128
+ tracker ?. trackPageView ( ) ;
129
+ } ) ;
130
+
131
+ it ( 'Adds the client session context entity when anonymous session tracking' , ( done ) => {
132
+ const tracker = createTracker ( {
133
+ contexts : { session : true } ,
134
+ encodeBase64 : false ,
135
+ anonymousTracking : { withSessionTracking : true } ,
136
+ plugins : [
137
+ {
138
+ afterTrack : ( payload ) => {
139
+ let context = payload . co as string ;
140
+ expect ( context ) . toContain ( 'client_session' ) ;
141
+ expect ( context ) . toContain ( '"userId":"00000000-0000-0000-0000-000000000000"' ) ;
142
+ expect ( context ) . toContain ( '"previousSessionId":null' ) ;
143
+ done ( ) ;
144
+ } ,
145
+ } ,
146
+ ] ,
147
+ } ) ;
148
+
149
+ tracker ?. trackPageView ( ) ;
150
+ } ) ;
151
+
152
+ it ( "Doesn't add the client session context entity when anonymous tracking without session tracking" , ( done ) => {
153
+ const tracker = createTracker ( {
154
+ contexts : { session : true } ,
155
+ encodeBase64 : false ,
156
+ anonymousTracking : true ,
157
+ plugins : [
158
+ {
159
+ afterTrack : ( payload ) => {
160
+ let context = payload . co as string ;
161
+ expect ( context ) . not . toContain ( 'client_session' ) ;
162
+ done ( ) ;
163
+ } ,
164
+ } ,
165
+ ] ,
166
+ } ) ;
167
+
168
+ tracker ?. trackPageView ( ) ;
169
+ } ) ;
111
170
} ) ;
171
+
172
+ function createTracker ( configuration ?: TrackerConfiguration ) {
173
+ let id = 'sp-' + Math . random ( ) ;
174
+ return addTracker ( id , id , '' , '' , new SharedState ( ) , configuration ) ;
175
+ }
0 commit comments