Repository URL to install this package:
|
Version:
1.0.0-alpha.7 ▾
|
import { getTrackingDataObject } from './getTrackingDataObject';
/**
* Helper function to set multiple element attributes at once
*
* @param {HTMLElement} el An HTML element to inspect
* @param {Object} attrs An object with the properties to be set
* @return {undefined}
*/
const setAttributes = (el, attrs) => {
Object.keys(attrs).forEach(key => {
el.setAttribute(key, attrs[key]);
});
};
describe('getTrackingDataObject', () => {
let el;
beforeEach(() => {
el = document.createElement('div');
});
it('returns an object with all the tracking attributes mapped from a DOM element', () => {
setAttributes(el, {
href: '/dashboard',
'data-track': JSON.stringify({
event: 'some event',
properties: { category: 'some category' },
}),
'data-page': JSON.stringify({
name: 'some page',
properties: { url: 'some url', title: 'some title', path: '/some/path' },
}),
'data-identify': JSON.stringify({ userId: 'some id' }),
});
const trackingObject = getTrackingDataObject(el);
expect(trackingObject).toEqual({
href: '/dashboard',
isSameTabLink: true,
trackingData: {
services: {
amplitude: true,
ga: true,
},
track: {
event: 'some event',
properties: {
category: 'some category',
},
},
page: {
name: 'some page',
properties: {
path: '/some/path',
title: 'some title',
url: 'some url',
},
},
identify: { userId: 'some id' },
},
});
});
it('sets isSameTabLink to false if the target of an href is _blank', () => {
const element = document.createElement('div');
setAttributes(element, {
href: '/dashboard',
target: '_blank',
'data-track': JSON.stringify({ track: { event: 'some event' } }),
'data-page': JSON.stringify({ name: { event: 'some page' } }),
'data-identify': JSON.stringify({ identify: { userId: 'some id' } }),
});
const trackingObject = getTrackingDataObject(element);
expect(trackingObject.isSameTabLink).toEqual(false);
});
});