it('tracks install started/completed with InstallTrigger', () => { const url = 'https://a.m.o/addons/file.xpi'; const _tracking = { sendEvent: sinon.stub() }; const _InstallTrigger = { install: sinon.stub() }; const addon = createInternalAddon( createFakeAddon({ name: 'some-extension', files: [{ platform: OS_ALL, url, hash: 'hash-of-file' }], type: ADDON_TYPE_EXTENSION, }), ); const rootNode = render({ addon, useButton: true, _tracking, _InstallTrigger, }); const installButton = rootNode.find('.InstallButton-button'); installButton.simulate('click', createFakeEvent()); sinon.assert.called(_InstallTrigger.install); const onInstalled = _InstallTrigger.install.firstCall.args[1]; sinon.assert.calledOnce(_tracking.sendEvent); sinon.assert.calledWith(_tracking.sendEvent, { action: getAddonTypeForTracking(ADDON_TYPE_EXTENSION), category: getAddonEventCategory( ADDON_TYPE_EXTENSION, INSTALL_STARTED_ACTION, ), label: addon.name, }); _tracking.sendEvent.resetHistory(); // Simulate the InstallTrigger callback. const successStatus = 0; onInstalled(url, successStatus); sinon.assert.calledOnce(_tracking.sendEvent); sinon.assert.calledWith(_tracking.sendEvent, { action: getAddonTypeForTracking(ADDON_TYPE_EXTENSION), category: getAddonEventCategory(ADDON_TYPE_EXTENSION, INSTALL_ACTION), label: addon.name, }); });
it('tracks install analytics when installing a search provider', () => { const _tracking = { sendEvent: sinon.stub() }; const _window = createFakeMozWindow(); const addon = createInternalAddon( createFakeAddon({ name: 'some-search-provider', files: [{ platform: OS_ALL, url: 'https://a.m.o/files/addon.xpi' }], type: ADDON_TYPE_OPENSEARCH, }), ); const rootNode = renderOpenSearch({ addon, useButton: true, _tracking, _window, }); const installButton = rootNode.find('.InstallButton-button'); installButton.simulate('click', createFakeEvent()); sinon.assert.calledWith(_tracking.sendEvent, { action: getAddonTypeForTracking(ADDON_TYPE_OPENSEARCH), category: getAddonEventCategory( ADDON_TYPE_OPENSEARCH, INSTALL_STARTED_ACTION, ), label: addon.name, }); });
trackInstallSucceeded({ addonName, type }: TrackParams) { const { _tracking } = this.props; _tracking.sendEvent({ action: getAddonTypeForTracking(type), category: getAddonEventCategory(type, INSTALL_ACTION), label: addonName, }); }
it('returns invalid for unknown type', () => { expect(getAddonTypeForTracking('whatever')).toEqual( TRACKING_TYPE_INVALID, ); });
it('returns addon:statictheme for TYPE_STATIC_THEME', () => { expect(getAddonTypeForTracking(ADDON_TYPE_STATIC_THEME)).toEqual( TRACKING_TYPE_STATIC_THEME, ); });
it('returns addon for TYPE_LANG', () => { expect(getAddonTypeForTracking(ADDON_TYPE_LANG)).toEqual( TRACKING_TYPE_EXTENSION, ); });