forked from snowplow/snowplow-javascript-tracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbrowser_context.test.ts
More file actions
63 lines (55 loc) · 2.32 KB
/
Copy pathbrowser_context.test.ts
File metadata and controls
63 lines (55 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import { BROWSER_CONTEXT_SCHEMA } from '../../src/tracker/schemata';
import { createTracker } from '../helpers';
const UUID_REGEX = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/;
describe('Browser context:', () => {
let navigatorSpy: jest.SpyInstance;
// JSDOM values observed are based on:
// https://github.com/jsdom/jsdom/blob/04f6c13f4a4d387c7fc979b8f62c6f68d8a0c639/lib/jsdom/living/window/Screen-impl.js
// https://github.com/jsdom/jsdom/blob/a5204dfb3853120c0460dd0ad89237acfaf650ca/lib/jsdom/browser/Window.js
// https://github.com/jsdom/jsdom/tree/04f6c13f4a4d387c7fc979b8f62c6f68d8a0c639/lib/jsdom/living/navigator
beforeEach(() => {
// We mock the hardwareConcurrency explicitly as it may vary between test environments
navigatorSpy = jest.spyOn(window.navigator, 'hardwareConcurrency', 'get');
navigatorSpy.mockReturnValue(1);
});
afterEach(() => {
navigatorSpy.mockRestore();
});
it('Adds the browser context entity when `contexts: { browser: true }` is passed', (done) => {
const tracker = createTracker({
encodeBase64: false,
contexts: { browser: true },
plugins: [
{
afterTrack: (payload) => {
const { data: payloadData } = JSON.parse(payload.co as string);
const browserContext = payloadData.find((context: any) => context.schema.match(BROWSER_CONTEXT_SCHEMA));
expect(browserContext).toBeTruthy();
expect(browserContext.data.tabId).toMatch(UUID_REGEX);
// We remove tabId before the snapshot to make it more straightforward
delete browserContext.data.tabId;
expect(browserContext.data).toMatchSnapshot();
done();
},
},
],
});
tracker?.trackPageView();
});
it('Does not send the browser context entity by default', (done) => {
const tracker = createTracker({
encodeBase64: false,
plugins: [
{
afterTrack: (payload) => {
const { data: payloadData } = JSON.parse(payload.co as string);
const browserContext = payloadData.find((context: any) => context.schema.match(BROWSER_CONTEXT_SCHEMA));
expect(browserContext).toBeUndefined();
done();
},
},
],
});
tracker?.trackPageView();
});
});