Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@doodle/tracking / src / helpers / getTrackingDataObject.spec.js
Size: Mime:
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);
  });
});