@aller/blink
Version:
A library for tracking user behaviour.
168 lines (143 loc) • 5 kB
text/typescript
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);
});
});