UNPKG

@aller/blink

Version:

A library for tracking user behaviour.

168 lines (143 loc) 5 kB
import createBlink from '../main'; import jest from 'jest-mock'; enum PAGES { FIRST = 'FIRST_PAGE', SECOND = 'SECOND_PAGE', } describe('Ad impression intregration test', () => { it('should not send if only screen enter event', () => { const mockSend = jest.fn(); const blink = createBlink({ send: mockSend, sendDirect: mockSend, }); // First send of a pageInit event, to set the general state // Here we can attach the previous pageView, to track the chain of events blink.pageInit({ url: 'http://some.site', pageView: 'the-pageview-id', referrer: 'www.sol.no', site: 'www.kk.no', }); blink.adScreenEnter({ id: 'ad-topbanner', time: new Date(3) }); // We don't want anything to be sent at this point expect(mockSend.mock.calls.length).toBe(0); }); it('should send an event if first getting enter and then exit event', () => { const mockSend = jest.fn(); const blink = createBlink({ send: mockSend, sendDirect: mockSend, }); // First send of a pageInit event, to set the general state blink.pageInit({ url: 'http://some.site', pageView: 'ad-pageview-id', referrer: 'www.sol.no', site: 'www.kk.no', }); expect(mockSend.mock.calls.length).toBe(0); blink.adScreenEnter({ id: 'ad-banner-top', time: new Date(1000) }); // We don't want anything to be sent at this point expect(mockSend.mock.calls.length).toBe(0); blink.adScreenExit({ id: 'ad-banner-top', time: new Date(5000) }); expect(mockSend.mock.calls.length).toBe(1); const sentImpEvent = mockSend.mock.calls[0][0][0]; expect(sentImpEvent.referrer).toBe('www.sol.no'); expect(sentImpEvent.pageView).toBe('ad-pageview-id'); expect(sentImpEvent.inscreenTime).toBe(4000); expect(sentImpEvent.inscreenTime0).toBe(0); }); it('should send correct time for event with page hidden inbetween', () => { const mockSend = jest.fn(); const blink = createBlink({ send: mockSend, sendDirect: mockSend, }); // First send of a pageInit event, to set the general state blink.pageInit({ url: 'http://some.site', pageView: 'ad-pageview-id', referrer: 'www.sol.no', site: 'www.kk.no', }); expect(mockSend.mock.calls.length).toBe(0); blink.adScreenEnter({ id: 'ad-banner-top', time: new Date(1000) }); // We don't want anything to be sent at this point expect(mockSend.mock.calls.length).toBe(0); // Hide the page blink.screenHide(new Date(2000)); // Show the page again blink.screenShow(new Date(3500)); blink.adScreenExit({ id: 'ad-banner-top', time: new Date(5000) }); expect(mockSend.mock.calls.length).toBe(1); const sentImpEvent = mockSend.mock.calls[0][0][0]; expect(sentImpEvent.referrer).toBe('www.sol.no'); expect(sentImpEvent.pageView).toBe('ad-pageview-id'); expect(sentImpEvent.inscreenTime).toBe(2500); expect(sentImpEvent.inscreenTime0).toBe(0); }); it('should send two separate events for two separate pages', () => { const mockSend = jest.fn(); const blink = createBlink({ send: mockSend, sendDirect: mockSend, }); // FIRST PAGE INIT blink.pageInit({ url: 'http://some.site', pageView: `${PAGES.FIRST}-pageview`, pageId: PAGES.FIRST, referrer: 'www.sol.no', site: 'www.kk.no', }); // SECOND PAGE INIT blink.pageInit({ url: 'http://other.site', pageView: `${PAGES.SECOND}-pageview`, pageId: PAGES.SECOND, referrer: 'www.sol.no', site: 'www.kk.no', }); // FIRST PAGE AD ENTER blink.adScreenEnter({ id: 'ad-banner-top', pageId: PAGES.FIRST, time: new Date(1000), }); // SECOND PAGE AD ENTER blink.adScreenEnter({ id: 'ad-banner-top', pageId: PAGES.SECOND, time: new Date(1500), }); // We don't want anything to be sent at this point expect(mockSend.mock.calls.length).toBe(0); // FIRST PAGE AD EXIT blink.adScreenExit({ id: 'ad-banner-top', pageId: PAGES.FIRST, time: new Date(5000), }); expect(mockSend.mock.calls.length).toBe(1); // SECOND PAGE AD EXIT blink.adScreenExit({ id: 'ad-banner-top', pageId: PAGES.SECOND, time: new Date(7000), }); expect(mockSend.mock.calls.length).toBe(2); // Check first event const firstEvent = mockSend.mock.calls[0][0][0]; expect(firstEvent.referrer).toBe('www.sol.no'); expect(firstEvent.pageView).toBe('FIRST_PAGE-pageview'); expect(firstEvent.inscreenTime).toBe(4000); expect(firstEvent.inscreenTime0).toBe(0); // Check first event const secondEvent = mockSend.mock.calls[1][0][0]; expect(secondEvent.referrer).toBe('www.sol.no'); expect(secondEvent.pageView).toBe('SECOND_PAGE-pageview'); expect(secondEvent.inscreenTime).toBe(5500); expect(secondEvent.inscreenTime0).toBe(0); }); });