99 lines
2.9 KiB
JavaScript
99 lines
2.9 KiB
JavaScript
import {
|
|
renameKey,
|
|
getReferrersCache,
|
|
addExperimentContext,
|
|
addReferrersCacheEntry,
|
|
filterOldReferrersCacheEntries,
|
|
} from '~/tracking/utils';
|
|
import { TRACKING_CONTEXT_SCHEMA } from '~/experimentation/constants';
|
|
import { REFERRER_TTL, URLS_CACHE_STORAGE_KEY } from '~/tracking/constants';
|
|
import { TEST_HOST } from 'helpers/test_constants';
|
|
|
|
jest.mock('~/experimentation/utils', () => ({
|
|
getExperimentData: jest.fn().mockReturnValue({}),
|
|
}));
|
|
|
|
describe('~/tracking/utils', () => {
|
|
beforeEach(() => {
|
|
window.gl = window.gl || {};
|
|
window.gl.snowplowStandardContext = {};
|
|
});
|
|
|
|
describe('addExperimentContext', () => {
|
|
const options = {
|
|
category: 'root:index',
|
|
action: 'generic',
|
|
};
|
|
|
|
it('returns same options if no experiment is provided', () => {
|
|
expect(addExperimentContext({ options })).toStrictEqual({ options });
|
|
});
|
|
|
|
it('adds experiment if provided', () => {
|
|
const experiment = 'TEST_EXPERIMENT_NAME';
|
|
|
|
expect(addExperimentContext({ experiment, ...options })).toStrictEqual({
|
|
...options,
|
|
context: { data: {}, schema: TRACKING_CONTEXT_SCHEMA },
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('renameKey', () => {
|
|
it('renames a given key', () => {
|
|
expect(renameKey({ allow: [] }, 'allow', 'permit')).toStrictEqual({ permit: [] });
|
|
});
|
|
});
|
|
|
|
describe('referrers cache', () => {
|
|
describe('filterOldReferrersCacheEntries', () => {
|
|
it('removes entries with old or no timestamp', () => {
|
|
const now = Date.now();
|
|
const cache = [{ timestamp: now }, { timestamp: now - REFERRER_TTL }, { referrer: '' }];
|
|
|
|
expect(filterOldReferrersCacheEntries(cache)).toStrictEqual([{ timestamp: now }]);
|
|
});
|
|
});
|
|
|
|
describe('getReferrersCache', () => {
|
|
beforeEach(() => {
|
|
localStorage.removeItem(URLS_CACHE_STORAGE_KEY);
|
|
});
|
|
|
|
it('returns an empty array if cache is not found', () => {
|
|
expect(getReferrersCache()).toHaveLength(0);
|
|
});
|
|
|
|
it('returns an empty array if cache is invalid', () => {
|
|
localStorage.setItem(URLS_CACHE_STORAGE_KEY, 'Invalid JSON');
|
|
|
|
expect(getReferrersCache()).toHaveLength(0);
|
|
});
|
|
|
|
it('returns parsed entries if valid', () => {
|
|
localStorage.setItem(
|
|
URLS_CACHE_STORAGE_KEY,
|
|
JSON.stringify([{ referrer: '', timestamp: Date.now() }]),
|
|
);
|
|
|
|
expect(getReferrersCache()).toHaveLength(1);
|
|
});
|
|
});
|
|
|
|
describe('addReferrersCacheEntry', () => {
|
|
it('unshifts entry and adds timestamp', () => {
|
|
const now = Date.now();
|
|
|
|
addReferrersCacheEntry([{ referrer: '', originalUrl: TEST_HOST, timestamp: now }], {
|
|
referrer: TEST_HOST,
|
|
});
|
|
|
|
const cache = getReferrersCache();
|
|
|
|
expect(cache).toHaveLength(2);
|
|
expect(cache[0].referrer).toBe(TEST_HOST);
|
|
expect(cache[0].timestamp).toBeDefined();
|
|
});
|
|
});
|
|
});
|
|
});
|