Skip to content

Commit

Permalink
GA4: Fix ecommerce tracking of searches without query
Browse files Browse the repository at this point in the history
The GA4 ecommerce tracking for search results doesn't currently work if
the user is searching for an empty query, as the check for whether the
`ga4-search-query` data attribute is present uses loose Javascript
boolean logic (i.e. returning false for an empty string).

This amends it to strictly check for `null` instead (data attribute not
present at all), and adds some tests for the search ecommerce data being
properly set with the query present and absent.
  • Loading branch information
csutter committed Oct 18, 2024
1 parent 17d4719 commit a5e958d
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 1 deletion.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@
useful summary for people upgrading their application, not a replication
of the commit log.

## Unreleased

* Fix ecommerce tracking of searches without query ([PR #4317](https://github.com/alphagov/govuk_publishing_components/pull/4317))

## 44.4.1

* Add chartkick path to gemspec ([PR #4312](https://github.com/alphagov/govuk_publishing_components/pull/4312))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ window.GOVUK.analyticsGa4 = window.GOVUK.analyticsGa4 || {};
var element = data.element
var resultsId = data.resultsId
var isClickEvent = data.event !== undefined
var isSearchResult = element.getAttribute('data-ga4-search-query')
var isSearchResult = element.getAttribute('data-ga4-search-query') !== null

var ecommerceSchema = new window.GOVUK.analyticsGa4.Schemas().ecommerceSchema()
var DEFAULT_LIST_TITLE = 'Smart answer results'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -629,6 +629,36 @@ describe('GA4 core', function () {
expect(builtEcommerceObject).toEqual(expectedEcommerceObject)
})

it('tracks variant and term for search results', function () {
resultsParentEl.setAttribute('data-ga4-search-query', 'search term')
resultsParentEl.setAttribute('data-ga4-ecommerce-variant', 'upside-down')

expectedEcommerceObject.search_results.term = 'search term'
expectedEcommerceObject.search_results.sort = 'upside-down'

var builtEcommerceObject = GOVUK.analyticsGa4.core.ecommerceHelperFunctions.populateEcommerceSchema({
element: resultsParentEl,
resultsId: 'result-count'
})

expect(builtEcommerceObject).toEqual(expectedEcommerceObject)
})

it('tracks variant and term for search results even when query is blank', function () {
resultsParentEl.setAttribute('data-ga4-search-query', '')
resultsParentEl.setAttribute('data-ga4-ecommerce-variant', 'upside-down')

expectedEcommerceObject.search_results.term = undefined
expectedEcommerceObject.search_results.sort = 'upside-down'

var builtEcommerceObject = GOVUK.analyticsGa4.core.ecommerceHelperFunctions.populateEcommerceSchema({
element: resultsParentEl,
resultsId: 'result-count'
})

expect(builtEcommerceObject).toEqual(expectedEcommerceObject)
})

it('the ecommerce items array is limited to a maximum of 15,000 UTF-16 code units', function () {
var innerHTML = ''
var ecommerceItems = []
Expand Down

0 comments on commit a5e958d

Please sign in to comment.