/* global describe it expect beforeEach afterEach spyOn */
var $ = window.jQuery
describe('GOVUK.analyticsPlugins.downloadLinkTracker', function () {
'use strict' var GOVUK = window.GOVUK var $links beforeEach(function () { $links = $( '<div class="download-links">' + '<a href="/one.pdf">PDF</a>' + '<a href="/two.xslt">Spreadsheet</a>' + '<a href="/something/uploads/system/three.doc">Document</a>' + '<a href="/an/image/link.png"><img src="/img" /></a>' + '</div>' + '<div class="normal-links">' + '<a href="/normal-link">Normal link</a>' + '<a href="/another-link">Another link</a>' + '</div>' ) $('html').on('click', function (evt) { evt.preventDefault() }) $('body').append($links) GOVUK.analytics = {trackEvent: function () {}} GOVUK.analyticsPlugins.downloadLinkTracker({selector: 'a[href$=".pdf"], a[href$=".xslt"], a[href$=".doc"], a[href$=".png"]'}) }) afterEach(function () { $('html').off() $('body').off() $links.remove() delete GOVUK.analytics }) it('listens to clicks on links that match the selector', function () { spyOn(GOVUK.analytics, 'trackEvent') $('.download-links a').each(function () { $(this).trigger('click') expect(GOVUK.analytics.trackEvent).toHaveBeenCalled() GOVUK.analytics.trackEvent.calls.reset() }) $('.normal-links a').each(function () { $(this).trigger('click') expect(GOVUK.analytics.trackEvent).not.toHaveBeenCalled() GOVUK.analytics.trackEvent.calls.reset() }) }) it('listens to click events on elements within download links', function () { spyOn(GOVUK.analytics, 'trackEvent') $('.download-links a img').trigger('click') expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith('Download Link Clicked', '/an/image/link.png', {transport: 'beacon'}) }) it('tracks a download link as an event with link text as the label', function () { spyOn(GOVUK.analytics, 'trackEvent') $('.download-links a').trigger('click') expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith( 'Download Link Clicked', '/one.pdf', {label: 'PDF', transport: 'beacon'}) expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith( 'Download Link Clicked', '/two.xslt', {label: 'Spreadsheet', transport: 'beacon'}) expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith( 'Download Link Clicked', '/something/uploads/system/three.doc', {label: 'Document', transport: 'beacon'}) })
})