Skip to content

Commit da09a1f

Browse files
Merge pull request #329 from elbwalker/324-add-a-getsession-function
324 add a getsession function
2 parents b900f62 + f94e364 commit da09a1f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+1101
-713
lines changed

.changeset/five-drinks-talk.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@elbwalker/walker.js': minor
3+
---
4+
5+
elbLayer init arguments [#326](https://github.com/elbwalker/walkerOS/issues/326)

.changeset/four-buckets-grow.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@elbwalker/walker.js': minor
3+
'@elbwalker/utils': minor
4+
---
5+
6+
Add a getSession function
7+
[#324](https://github.com/elbwalker/walkerOS/issues/324)

.changeset/rare-sheep-ring.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@elbwalker/walker.js': minor
3+
---
4+
5+
Require consent to run [#327](https://github.com/elbwalker/walkerOS/issues/327)

.changeset/three-lizards-appear.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@elbwalker/walker.js': minor
3+
'@elbwalker/types': minor
4+
'@elbwalker/utils': minor
5+
---
6+
7+
on start command [#325](https://github.com/elbwalker/walkerOS/issues/325)

.changeset/weak-paws-kiss.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@elbwalker/walker.js': minor
3+
---
4+
5+
Config options for run and dataLayer
6+
[#328](https://github.com/elbwalker/walkerOS/issues/328)
Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
1-
const commonConfig = require('@elbwalker/jest');
1+
const commonConfig = require('@elbwalker/jest/web.config');
22

3-
const config = {
4-
testEnvironment: 'jsdom',
5-
};
3+
const config = {};
64

75
module.exports = { ...commonConfig, ...config };

packages/clients/walkerjs/src/__tests__/browser.test.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,17 @@ describe('Browser', () => {
55
const w = window;
66
const mockFn = jest.fn(); //.mockImplementation(console.log);
77

8-
jest.mock('../', () => {
9-
return mockFn;
10-
});
8+
jest.mock('../', () => ({
9+
Walkerjs: mockFn,
10+
default: mockFn,
11+
}));
1112

1213
const html: string = fs
1314
.readFileSync(__dirname + '/html/index.html')
1415
.toString();
1516

1617
beforeEach(() => {
17-
// reset DOM with event listeners etc.
18-
document.body = document.body.cloneNode() as HTMLElement;
1918
document.body.innerHTML = html;
20-
21-
jest.resetModules();
22-
jest.clearAllMocks();
23-
});
24-
25-
afterEach(() => {
26-
document.getElementsByTagName('html')[0].innerHTML = '';
2719
});
2820

2921
test('initialize walkerjs on window', () => {
Lines changed: 107 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,11 @@
11
import { elb, Walkerjs } from '..';
2+
import { mockDataLayer } from '@elbwalker/jest/web.setup';
23
import type { WebClient } from '..';
34

45
describe('Commands on', () => {
5-
const w = window;
6-
const mockDataLayer = jest.fn(); //.mockImplementation(console.log);
7-
86
let walkerjs: WebClient.Instance;
97

108
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-
199
walkerjs = Walkerjs({
2010
consent: { automatically: true },
2111
default: true,
@@ -26,7 +16,7 @@ describe('Commands on', () => {
2616
const mockFn = jest.fn();
2717

2818
// Don't call on default
29-
elb('walker on', 'consent', { marketing: [mockFn] });
19+
elb('walker on', 'consent', { marketing: mockFn });
3020
expect(mockFn).not.toHaveBeenCalled();
3121

3222
// Different consent group
@@ -44,15 +34,15 @@ describe('Commands on', () => {
4434

4535
test('consent register', () => {
4636
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);
4939
});
5040

5141
test('consent by start', () => {
5242
const mockFn = jest.fn();
5343
Walkerjs({
5444
consent: { foo: false },
55-
on: { consent: { foo: [mockFn] } },
45+
on: { consent: [{ foo: mockFn }] },
5646
default: true,
5747
});
5848
expect(mockFn).toHaveBeenCalledTimes(1);
@@ -62,22 +52,22 @@ describe('Commands on', () => {
6252
const mockFn = jest.fn();
6353
Walkerjs({
6454
consent: { foo: false },
65-
on: { consent: { foo: [mockFn] } },
55+
on: { consent: [{ foo: mockFn }] },
6656
default: true,
6757
});
6858
expect(mockFn).toHaveBeenCalledTimes(1);
6959
});
7060

7161
test('consent call on register', () => {
7262
const mockFn = jest.fn();
73-
elb('walker on', 'consent', { automatically: [mockFn] });
63+
elb('walker on', 'consent', { automatically: mockFn });
7464

7565
expect(mockFn).toHaveBeenCalledTimes(1);
7666
});
7767

7868
test('consent parameters', () => {
7969
const mockFn = jest.fn();
80-
elb('walker on', 'consent', { automatically: [mockFn] });
70+
elb('walker on', 'consent', { automatically: mockFn });
8171
expect(mockFn).toHaveBeenCalledWith(walkerjs, {
8272
automatically: true,
8373
});
@@ -88,35 +78,31 @@ describe('Commands on', () => {
8878
const mockFn = jest.fn(() => {
8979
throw new Error('kaputt');
9080
});
91-
elb('walker on', 'consent', { automatically: [mockFn] });
81+
elb('walker on', 'consent', { automatically: mockFn });
9282
expect(mockFn).toHaveBeenCalledTimes(1);
93-
expect(mockDataLayer).toHaveBeenCalledTimes(1);
83+
expect(mockDataLayer).toHaveBeenCalledTimes(2); // session start and page view only
9484
});
9585

9686
test('multiple functions', () => {
9787
const mockFnA = jest.fn();
9888
const mockFnB = jest.fn();
9989
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);
10296
expect(mockFnA).toHaveBeenCalledTimes(1);
10397
expect(mockFnB).toHaveBeenCalledTimes(1);
10498
// Add a new function
10599
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);
108102
expect(mockFnA).toHaveBeenCalledTimes(0);
109103
expect(mockFnB).toHaveBeenCalledTimes(0);
110104
expect(mockFnC).toHaveBeenCalledTimes(1);
111105

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-
120106
// Update consent
121107
jest.clearAllMocks();
122108
elb('walker consent', { automatically: false });
@@ -125,3 +111,92 @@ describe('Commands on', () => {
125111
expect(mockFnC).toHaveBeenCalledTimes(1);
126112
});
127113
});
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+
});

packages/clients/walkerjs/src/__tests__/destination.test.ts

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,7 @@ describe('Destination', () => {
1111
let config: WebDestination.Config;
1212

1313
beforeEach(() => {
14-
jest.clearAllMocks();
15-
jest.resetModules();
16-
17-
window.elbLayer = undefined as unknown as WebClient.ElbLayer;
18-
walkerjs = Walkerjs({ pageview: false });
14+
walkerjs = Walkerjs({ pageview: false, session: false });
1915
config = { init: false };
2016

2117
destination = {
@@ -309,6 +305,7 @@ describe('Destination', () => {
309305
walkerjs = Walkerjs({
310306
consent: { functional: true, marketing: false },
311307
pageview: false,
308+
session: false,
312309
});
313310
elb('walker run');
314311

@@ -367,6 +364,7 @@ describe('Destination', () => {
367364
walkerjs = Walkerjs({
368365
consent: { functional: true },
369366
pageview: false,
367+
session: false,
370368
});
371369
elb('walker run');
372370

@@ -646,14 +644,4 @@ describe('Destination', () => {
646644
elb('walker destination', destination);
647645
expect(Object.keys(walkerjs.config.destinations)).toHaveLength(2);
648646
});
649-
650-
test.skip('TODO investigate this', () => {
651-
elb('walker destination', destination, { id: 'foo' });
652-
elb('walker run');
653-
654-
// @TODO
655-
// the walker destination command is not processed
656-
// only if walker run was called before
657-
expect(walkerjs.config.destinations['foo']).toBe(destination);
658-
});
659647
});

0 commit comments

Comments
 (0)