mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-02-06 11:23:48 -05:00
Includes: - tests for the analytics interface ported from GOVUK Frontend Toolkit - tests for the cookie banner that appears on all pages except the cookies page - tests for the cookies page JS - tests for the hasConsentFor function - adding a deleteCookie helper to remove cookies during tests - polyfill for insertAdjacentText The last one is because JSDOM doesn't support insertAdjacentText but our target browsers do. This polyfill also includes one for insertAdjacentHTML.
124 lines
2.5 KiB
JavaScript
124 lines
2.5 KiB
JavaScript
const helpers = require('../support/helpers');
|
|
|
|
beforeAll(() => {
|
|
|
|
// add the script GA looks for in the document
|
|
document.body.appendChild(document.createElement('script'));
|
|
|
|
require('../../../app/assets/javascripts/govuk/cookie-functions.js');
|
|
require('../../../app/assets/javascripts/analytics/analytics.js');
|
|
require('../../../app/assets/javascripts/analytics/init.js');
|
|
|
|
});
|
|
|
|
afterAll(() => {
|
|
|
|
require('../support/teardown.js');
|
|
|
|
});
|
|
|
|
describe("Analytics init", () => {
|
|
|
|
beforeAll(() => {
|
|
|
|
window.ga = jest.fn();
|
|
jest.spyOn(window.GOVUK.Analytics, 'load');
|
|
|
|
// pretend we're on the /privacy page
|
|
jest.spyOn(window, 'location', 'get').mockImplementation(() => {
|
|
return {
|
|
'pathname': '/privacy',
|
|
'search': ''
|
|
};
|
|
});
|
|
|
|
});
|
|
|
|
afterEach(() => {
|
|
|
|
window.GOVUK.Analytics.load.mockClear();
|
|
window.ga.mockClear();
|
|
|
|
});
|
|
|
|
test("After the init.js script has been loaded, Google Analytics will be disabled", () => {
|
|
|
|
expect(window['ga-disable-UA-26179049-1']).toBe(true);
|
|
|
|
});
|
|
|
|
describe("If initAnalytics has already been called", () => {
|
|
|
|
beforeAll(() => {
|
|
|
|
// Fake a tracker instance
|
|
window.GOVUK.analytics = {};
|
|
|
|
});
|
|
|
|
beforeEach(() => {
|
|
|
|
window.GOVUK.initAnalytics();
|
|
|
|
});
|
|
|
|
afterAll(() => {
|
|
|
|
delete window.GOVUK.analytics;
|
|
|
|
});
|
|
|
|
test("The Google Analytics libraries will not be loaded", () => {
|
|
|
|
expect(window.GOVUK.Analytics.load).not.toHaveBeenCalled();
|
|
|
|
});
|
|
|
|
});
|
|
|
|
describe("If initAnalytics has not been called", () => {
|
|
|
|
beforeEach(() => {
|
|
|
|
window.GOVUK.initAnalytics();
|
|
|
|
});
|
|
|
|
afterEach(() => {
|
|
|
|
// window.GOVUK.initAnalytics sets up a new window.GOVUK.analytics which needs clearing
|
|
delete window.GOVUK.analytics;
|
|
|
|
});
|
|
|
|
test("Google Analytics will not be disabled", () => {
|
|
|
|
expect(window['ga-disable-UA-26179049-1']).toBe(false);
|
|
|
|
});
|
|
|
|
test("The Google Analytics libraries will have been loaded", () => {
|
|
|
|
expect(window.GOVUK.Analytics.load).toHaveBeenCalled();
|
|
|
|
});
|
|
|
|
test("There will be an interface with the Google Analytics API", () => {
|
|
|
|
expect(window.GOVUK.analytics).toBeDefined();
|
|
|
|
});
|
|
|
|
test("A pageview will be registered", () => {
|
|
|
|
expect(window.ga.mock.calls.length).toEqual(5);
|
|
|
|
// The first 4 calls configure the analytics tracker. All subsequent calls send data
|
|
expect(window.ga.mock.calls[4]).toEqual(['send', 'pageview', '/privacy']);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|