1
1
import { elb , Walkerjs } from '..' ;
2
+ import { mockDataLayer } from '@elbwalker/jest/web.setup' ;
2
3
import type { WebClient } from '..' ;
3
4
4
5
describe ( 'Commands on' , ( ) => {
5
- const w = window ;
6
- const mockDataLayer = jest . fn ( ) ; //.mockImplementation(console.log);
7
-
8
6
let walkerjs : WebClient . Instance ;
9
7
10
8
beforeEach ( ( ) => {
11
- // reset DOM with event listeners etc.
12
- document . body = document . body . cloneNode ( ) as HTMLElement ;
13
- jest . clearAllMocks ( ) ;
14
- jest . resetModules ( ) ;
15
- w . dataLayer = [ ] ;
16
- ( w . dataLayer as unknown [ ] ) . push = mockDataLayer ;
17
- w . elbLayer = undefined as unknown as WebClient . ElbLayer ;
18
-
19
9
walkerjs = Walkerjs ( {
20
10
consent : { automatically : true } ,
21
11
default : true ,
@@ -26,7 +16,7 @@ describe('Commands on', () => {
26
16
const mockFn = jest . fn ( ) ;
27
17
28
18
// Don't call on default
29
- elb ( 'walker on' , 'consent' , { marketing : [ mockFn ] } ) ;
19
+ elb ( 'walker on' , 'consent' , { marketing : mockFn } ) ;
30
20
expect ( mockFn ) . not . toHaveBeenCalled ( ) ;
31
21
32
22
// Different consent group
@@ -44,15 +34,15 @@ describe('Commands on', () => {
44
34
45
35
test ( 'consent register' , ( ) => {
46
36
const mockFn = jest . fn ( ) ;
47
- elb ( 'walker on' , 'consent' , { foo : [ mockFn ] } ) ;
48
- expect ( walkerjs . config . on . consent ! . foo [ 0 ] ) . toBe ( mockFn ) ;
37
+ elb ( 'walker on' , 'consent' , { foo : mockFn } ) ;
38
+ expect ( walkerjs . config . on . consent ! [ 0 ] . foo ) . toBe ( mockFn ) ;
49
39
} ) ;
50
40
51
41
test ( 'consent by start' , ( ) => {
52
42
const mockFn = jest . fn ( ) ;
53
43
Walkerjs ( {
54
44
consent : { foo : false } ,
55
- on : { consent : { foo : [ mockFn ] } } ,
45
+ on : { consent : [ { foo : mockFn } ] } ,
56
46
default : true ,
57
47
} ) ;
58
48
expect ( mockFn ) . toHaveBeenCalledTimes ( 1 ) ;
@@ -62,22 +52,22 @@ describe('Commands on', () => {
62
52
const mockFn = jest . fn ( ) ;
63
53
Walkerjs ( {
64
54
consent : { foo : false } ,
65
- on : { consent : { foo : [ mockFn ] } } ,
55
+ on : { consent : [ { foo : mockFn } ] } ,
66
56
default : true ,
67
57
} ) ;
68
58
expect ( mockFn ) . toHaveBeenCalledTimes ( 1 ) ;
69
59
} ) ;
70
60
71
61
test ( 'consent call on register' , ( ) => {
72
62
const mockFn = jest . fn ( ) ;
73
- elb ( 'walker on' , 'consent' , { automatically : [ mockFn ] } ) ;
63
+ elb ( 'walker on' , 'consent' , { automatically : mockFn } ) ;
74
64
75
65
expect ( mockFn ) . toHaveBeenCalledTimes ( 1 ) ;
76
66
} ) ;
77
67
78
68
test ( 'consent parameters' , ( ) => {
79
69
const mockFn = jest . fn ( ) ;
80
- elb ( 'walker on' , 'consent' , { automatically : [ mockFn ] } ) ;
70
+ elb ( 'walker on' , 'consent' , { automatically : mockFn } ) ;
81
71
expect ( mockFn ) . toHaveBeenCalledWith ( walkerjs , {
82
72
automatically : true ,
83
73
} ) ;
@@ -88,35 +78,31 @@ describe('Commands on', () => {
88
78
const mockFn = jest . fn ( ( ) => {
89
79
throw new Error ( 'kaputt' ) ;
90
80
} ) ;
91
- elb ( 'walker on' , 'consent' , { automatically : [ mockFn ] } ) ;
81
+ elb ( 'walker on' , 'consent' , { automatically : mockFn } ) ;
92
82
expect ( mockFn ) . toHaveBeenCalledTimes ( 1 ) ;
93
- expect ( mockDataLayer ) . toHaveBeenCalledTimes ( 1 ) ;
83
+ expect ( mockDataLayer ) . toHaveBeenCalledTimes ( 2 ) ; // session start and page view only
94
84
} ) ;
95
85
96
86
test ( 'multiple functions' , ( ) => {
97
87
const mockFnA = jest . fn ( ) ;
98
88
const mockFnB = jest . fn ( ) ;
99
89
const mockFnC = jest . fn ( ) ;
100
- elb ( 'walker on' , 'consent' , { automatically : [ mockFnA , mockFnB ] } ) ;
101
- expect ( walkerjs . config . on . consent ! . automatically ) . toHaveLength ( 2 ) ;
90
+ elb ( 'walker on' , 'consent' , [
91
+ { automatically : mockFnA } ,
92
+ { automatically : mockFnB } ,
93
+ ] ) ;
94
+
95
+ expect ( walkerjs . config . on . consent ) . toHaveLength ( 2 ) ;
102
96
expect ( mockFnA ) . toHaveBeenCalledTimes ( 1 ) ;
103
97
expect ( mockFnB ) . toHaveBeenCalledTimes ( 1 ) ;
104
98
// Add a new function
105
99
jest . clearAllMocks ( ) ;
106
- elb ( 'walker on' , 'consent' , { automatically : [ mockFnC ] } ) ;
107
- expect ( walkerjs . config . on . consent ! . automatically ) . toHaveLength ( 3 ) ;
100
+ elb ( 'walker on' , 'consent' , { automatically : mockFnC } ) ;
101
+ expect ( walkerjs . config . on . consent ) . toHaveLength ( 3 ) ;
108
102
expect ( mockFnA ) . toHaveBeenCalledTimes ( 0 ) ;
109
103
expect ( mockFnB ) . toHaveBeenCalledTimes ( 0 ) ;
110
104
expect ( mockFnC ) . toHaveBeenCalledTimes ( 1 ) ;
111
105
112
- // Don't add a duplicate function but call it once
113
- jest . clearAllMocks ( ) ;
114
- elb ( 'walker on' , 'consent' , { automatically : [ mockFnA ] } ) ;
115
- expect ( walkerjs . config . on . consent ! . automatically ) . toHaveLength ( 3 ) ;
116
- expect ( mockFnA ) . toHaveBeenCalledTimes ( 1 ) ;
117
- expect ( mockFnB ) . toHaveBeenCalledTimes ( 0 ) ;
118
- expect ( mockFnC ) . toHaveBeenCalledTimes ( 0 ) ;
119
-
120
106
// Update consent
121
107
jest . clearAllMocks ( ) ;
122
108
elb ( 'walker consent' , { automatically : false } ) ;
@@ -125,3 +111,92 @@ describe('Commands on', () => {
125
111
expect ( mockFnC ) . toHaveBeenCalledTimes ( 1 ) ;
126
112
} ) ;
127
113
} ) ;
114
+
115
+ describe ( 'Commands run' , ( ) => {
116
+ const w = window ;
117
+
118
+ let walkerjs : WebClient . Instance ;
119
+
120
+ beforeEach ( ( ) => {
121
+ // reset DOM with event listeners etc.
122
+ document . body = document . body . cloneNode ( ) as HTMLElement ;
123
+ jest . clearAllMocks ( ) ;
124
+ jest . resetModules ( ) ;
125
+ w . elbLayer = undefined as unknown as WebClient . ElbLayer ;
126
+
127
+ walkerjs = Walkerjs ( ) ;
128
+ } ) ;
129
+
130
+ test ( 'basics' , ( ) => {
131
+ const mockFn = jest . fn ( ) ;
132
+
133
+ // Don't call on default
134
+ elb ( 'walker on' , 'run' , mockFn ) ;
135
+ expect ( mockFn ) . toHaveBeenCalledTimes ( 0 ) ;
136
+
137
+ elb ( 'walker run' ) ;
138
+ expect ( mockFn ) . toHaveBeenCalledTimes ( 1 ) ; // only once
139
+ } ) ;
140
+
141
+ test ( 'run register' , ( ) => {
142
+ const mockFn = jest . fn ( ) ;
143
+ elb ( 'walker on' , 'run' , mockFn ) ;
144
+ elb ( 'walker run' ) ;
145
+ expect ( walkerjs . config . on . run ! [ 0 ] ) . toBe ( mockFn ) ;
146
+ } ) ;
147
+
148
+ test ( 'run register init' , ( ) => {
149
+ const mockFn = jest . fn ( ) ;
150
+ Walkerjs ( {
151
+ on : { run : [ mockFn ] } ,
152
+ default : true ,
153
+ } ) ;
154
+ expect ( mockFn ) . toHaveBeenCalledTimes ( 1 ) ;
155
+ } ) ;
156
+
157
+ test ( 'run register after run' , ( ) => {
158
+ const mockFnPre = jest . fn ( ) ;
159
+ const mockFnPost = jest . fn ( ) ;
160
+ elb ( 'walker on' , 'run' , mockFnPre ) ;
161
+ expect ( mockFnPre ) . toHaveBeenCalledTimes ( 0 ) ;
162
+ walkerjs = Walkerjs ( ) ;
163
+ expect ( mockFnPre ) . toHaveBeenCalledTimes ( 0 ) ;
164
+ elb ( 'walker run' ) ;
165
+ expect ( mockFnPre ) . toHaveBeenCalledTimes ( 1 ) ;
166
+
167
+ expect ( mockFnPost ) . toHaveBeenCalledTimes ( 0 ) ;
168
+ elb ( 'walker on' , 'run' , mockFnPost ) ;
169
+ expect ( mockFnPost ) . toHaveBeenCalledTimes ( 1 ) ;
170
+ } ) ;
171
+
172
+ test ( 'run register elbLayer' , ( ) => {
173
+ const mockFn = jest . fn ( ) ;
174
+ Walkerjs ( {
175
+ on : { run : [ mockFn ] } ,
176
+ default : true ,
177
+ } ) ;
178
+ expect ( mockFn ) . toHaveBeenCalledTimes ( 1 ) ;
179
+ } ) ;
180
+
181
+ test ( 'consent error' , ( ) => {
182
+ const mockFn = jest . fn ( ) ;
183
+ const mockBrokenFn = jest . fn ( ( ) => {
184
+ throw new Error ( 'kaputt' ) ;
185
+ } ) ;
186
+ Walkerjs ( {
187
+ on : { run : [ mockBrokenFn , mockFn ] } ,
188
+ default : true ,
189
+ } ) ;
190
+ expect ( mockBrokenFn ) . toHaveBeenCalledTimes ( 1 ) ;
191
+ expect ( mockFn ) . toHaveBeenCalledTimes ( 1 ) ;
192
+ } ) ;
193
+
194
+ test ( 'run multiple' , ( ) => {
195
+ const mockFn = jest . fn ( ) ;
196
+ elb ( 'walker on' , 'run' , mockFn ) ;
197
+ elb ( 'walker run' ) ;
198
+ elb ( 'walker run' ) ;
199
+ elb ( 'walker run' ) ;
200
+ expect ( mockFn ) . toHaveBeenCalledTimes ( 3 ) ;
201
+ } ) ;
202
+ } ) ;
0 commit comments