From d9c53d961b0172a824d630689867bd00620614a2 Mon Sep 17 00:00:00 2001 From: Andy Sellick Date: Tue, 25 Jul 2023 16:35:03 +0100 Subject: [PATCH] Fix failing tests - rewrites the ga4-finder-tracker slightly to use the schema code and specifically use the mergeProperties function of the schema to ensure that all undefined attributes from the schema are included in the data sent to the dataLayer --- .../analytics-ga4/ga4-finder-tracker.js | 47 ++++++++++--------- .../analytics-ga4/ga4-finder-tracker.spec.js | 24 +++++----- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/app/assets/javascripts/analytics-ga4/ga4-finder-tracker.js b/app/assets/javascripts/analytics-ga4/ga4-finder-tracker.js index 6f993a7b6..76a4932ee 100644 --- a/app/assets/javascripts/analytics-ga4/ga4-finder-tracker.js +++ b/app/assets/javascripts/analytics-ga4/ga4-finder-tracker.js @@ -37,17 +37,18 @@ return } - var schema = new GOVUK.analyticsGa4.Schemas().eventSchema() - schema.event = 'event_data' - schema.event_data.type = 'finder' - schema.event_data.event_name = 'select_content' + var data = {} + data.type = 'finder' + data.event_name = 'select_content' var elementInfo = this.getElementInfo(eventTarget, elementType, section) var elementValue = elementInfo.elementValue - schema.event_data.text = elementValue - + data.text = elementValue var wasFilterRemoved = elementInfo.wasFilterRemoved - schema = this.setSchemaBasedOnChangeType(schema, elementValue, elementType, wasFilterRemoved, changeType, section) + data = this.setSchemaBasedOnChangeType(data, elementValue, elementType, wasFilterRemoved, changeType, section) + + var schemas = new window.GOVUK.analyticsGa4.Schemas() + var schema = schemas.mergeProperties(data, 'event_data') window.GOVUK.analyticsGa4.core.sendData(schema) }, @@ -112,36 +113,36 @@ switch (changeType) { case 'update-filter': if (section) { - schema.event_data.section = section.getAttribute('data-ga4-section') + schema.section = section.getAttribute('data-ga4-section') } if (wasFilterRemoved) { - schema.event_data.action = 'remove' - schema.event_data.text = elementType === 'text' ? undefined : elementValue + schema.action = 'remove' + schema.text = elementType === 'text' ? undefined : elementValue } else { - schema.event_data.action = elementType === 'text' ? 'search' : 'select' - schema.event_data.index = this.getSectionIndex(section) + schema.action = elementType === 'text' ? 'search' : 'select' + schema.index = this.getSectionIndex(section) } break case 'update-keyword': - schema.event_data.event_name = 'search' - schema.event_data.url = window.location.pathname - schema.event_data.section = 'Search' - schema.event_data.action = 'search' - schema.event_data.text = PIIRemover.stripPIIWithOverride(schema.event_data.text, true, true) - schema.event_data.text = GOVUK.analyticsGa4.core.trackFunctions.removeLinesAndExtraSpaces(schema.event_data.text) - schema.event_data.text = schema.event_data.text.toLowerCase() + schema.event_name = 'search' + schema.url = window.location.pathname + schema.section = 'Search' + schema.action = 'search' + schema.text = PIIRemover.stripPIIWithOverride(schema.text, true, true) + schema.text = GOVUK.analyticsGa4.core.trackFunctions.removeLinesAndExtraSpaces(schema.text) + schema.text = schema.text.toLowerCase() break case 'clear-all-filters': - schema.event_data.action = 'remove' - schema.event_data.text = 'Clear all filters' + schema.action = 'remove' + schema.text = 'Clear all filters' break case 'update-sort': - schema.event_data.action = 'sort' - schema.event_data.section = 'Sort by' + schema.action = 'sort' + schema.section = 'Sort by' break } return schema diff --git a/spec/javascripts/analytics-ga4/ga4-finder-tracker.spec.js b/spec/javascripts/analytics-ga4/ga4-finder-tracker.spec.js index fa406103e..0811554e5 100644 --- a/spec/javascripts/analytics-ga4/ga4-finder-tracker.spec.js +++ b/spec/javascripts/analytics-ga4/ga4-finder-tracker.spec.js @@ -98,7 +98,7 @@ describe('GA4 finder change tracker', function () { inputParent = document.createElement('div') inputParent.setAttribute('data-ga4-change-category', 'update-filter checkbox') inputParent.setAttribute('data-ga4-section', 'Your favourite chocolate') - var index = { index_section: 1, index_section_count: 1, index_link: undefined } + var index = { index_section: 1, index_section_count: 1 } inputParent.setAttribute('data-ga4-index', JSON.stringify(index)) input = document.createElement('input') @@ -119,7 +119,7 @@ describe('GA4 finder change tracker', function () { expected.event_data.section = 'Your favourite chocolate' expected.event_data.text = 'All types of chocolate' expected.event_data.action = 'select' - expected.event_data.index = index + expected.event_data.index = { index_section: 1, index_section_count: 1, index_link: undefined } expect(window.dataLayer[0]).toEqual(expected) @@ -127,7 +127,7 @@ describe('GA4 finder change tracker', function () { window.GOVUK.triggerEvent(input, 'change') expected.event_data.action = 'remove' - expected.event_data.index = undefined + expected.event_data.index = { index_section: undefined, index_section_count: undefined, index_link: undefined } expect(window.dataLayer[1]).toEqual(expected) }) @@ -136,7 +136,7 @@ describe('GA4 finder change tracker', function () { inputParent = document.createElement('div') inputParent.setAttribute('data-ga4-change-category', 'update-filter radio') inputParent.setAttribute('data-ga4-section', 'Your favourite chocolate') - var index = { index_section: 1, index_section_count: 1, index_link: undefined } + var index = { index_section: 1, index_section_count: 1 } inputParent.setAttribute('data-ga4-index', JSON.stringify(index)) option1 = document.createElement('input') @@ -170,7 +170,7 @@ describe('GA4 finder change tracker', function () { expected.event_data.section = 'Your favourite chocolate' expected.event_data.text = 'Belgian chocolate' expected.event_data.action = 'select' - expected.event_data.index = index + expected.event_data.index = { index_section: 1, index_section_count: 1, index_link: undefined } expect(window.dataLayer[0]).toEqual(expected) @@ -179,7 +179,7 @@ describe('GA4 finder change tracker', function () { window.GOVUK.triggerEvent(option1, 'change') expected.event_data.action = 'remove' - expected.event_data.index = undefined + expected.event_data.index = { index_section: undefined, index_section_count: undefined, index_link: undefined } expected.event_data.text = 'All types of chocolate (default)' expect(window.dataLayer[1]).toEqual(expected) @@ -189,7 +189,7 @@ describe('GA4 finder change tracker', function () { inputParent = document.createElement('div') inputParent.setAttribute('data-ga4-change-category', 'update-filter select') inputParent.setAttribute('data-ga4-section', 'Your favourite chocolate') - var index = { index_section: 5, index_section_count: 15, index_link: undefined } + var index = { index_section: 5, index_section_count: 15 } inputParent.setAttribute('data-ga4-index', JSON.stringify(index)) input = document.createElement('select') @@ -218,7 +218,7 @@ describe('GA4 finder change tracker', function () { expected.event_data.section = 'Your favourite chocolate' expected.event_data.text = 'Belgian chocolate' expected.event_data.action = 'select' - expected.event_data.index = index + expected.event_data.index = { index_section: 5, index_section_count: 15, index_link: undefined } expect(window.dataLayer[0]).toEqual(expected) @@ -226,7 +226,7 @@ describe('GA4 finder change tracker', function () { window.GOVUK.triggerEvent(input, 'change') expected.event_data.action = 'remove' - expected.event_data.index = undefined + expected.event_data.index = { index_link: undefined, index_section: undefined, index_section_count: undefined } expected.event_data.text = 'All types of chocolate (default)' expect(window.dataLayer[1]).toEqual(expected) @@ -236,7 +236,7 @@ describe('GA4 finder change tracker', function () { inputParent = document.createElement('div') inputParent.setAttribute('data-ga4-change-category', 'update-filter text') inputParent.setAttribute('data-ga4-section', 'Your favourite chocolate') - var index = { index_section: 2, index_section_count: 2, index_link: undefined } + var index = { index_section: 2, index_section_count: 2 } inputParent.setAttribute('data-ga4-index', JSON.stringify(index)) input = document.createElement('input') @@ -252,7 +252,7 @@ describe('GA4 finder change tracker', function () { expected.event_data.section = 'Your favourite chocolate' expected.event_data.text = 'Here is an email that should not get redacted email@example.com' expected.event_data.action = 'search' - expected.event_data.index = index + expected.event_data.index = { index_section: 2, index_section_count: 2, index_link: undefined } expect(window.dataLayer[0]).toEqual(expected) @@ -260,7 +260,7 @@ describe('GA4 finder change tracker', function () { window.GOVUK.triggerEvent(input, 'change') expected.event_data.action = 'remove' - expected.event_data.index = undefined + expected.event_data.index = { index_section: undefined, index_section_count: undefined, index_link: undefined } expected.event_data.text = undefined expect(window.dataLayer[1]).toEqual(expected)