/* global describe it expect beforeEach afterEach spyOn */
var $ = window.jQuery
describe('GOVUK.analyticsPlugins.externalLinkTracker', function () {
'use strict'
var GOVUK = window.GOVUK
var $links
beforeEach(function () {
$links = $(
'
' +
''
)
$('html').on('click', function (evt) { evt.preventDefault() })
$('body').append($links)
GOVUK.analytics = {trackEvent: function () {}}
spyOn(GOVUK.analyticsPlugins.externalLinkTracker, 'getHostname').and.returnValue('fake-hostname.com')
GOVUK.analyticsPlugins.externalLinkTracker()
})
afterEach(function () {
$('html').off()
$('body').off()
$links.remove()
delete GOVUK.analytics
})
it('listens to click events on only external links', function () {
spyOn(GOVUK.analytics, 'trackEvent')
$('.external-links a').each(function () {
$(this).trigger('click')
expect(GOVUK.analytics.trackEvent).toHaveBeenCalled()
GOVUK.analytics.trackEvent.calls.reset()
})
$('.internal-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 external links', function () {
spyOn(GOVUK.analytics, 'trackEvent')
$('.external-links a img').trigger('click')
expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith(
'External Link Clicked', 'https://www.nationalarchives.gov.uk/an/image/link.png', {transport: 'beacon'})
})
it('tracks an external link\'s href and link text', function () {
spyOn(GOVUK.analytics, 'trackEvent')
$('.external-links a').trigger('click')
expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith(
'External Link Clicked', 'http://www.nationalarchives.gov.uk', {transport: 'beacon', label: 'National Archives'})
expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith(
'External Link Clicked', 'https://www.nationalarchives.gov.uk', {transport: 'beacon'})
expect(GOVUK.analytics.trackEvent).toHaveBeenCalledWith(
'External Link Clicked', 'https://www.nationalarchives.gov.uk/one.pdf', {transport: 'beacon', label: 'National Archives PDF'})
})
})