@aller/blink
Version:
A library for tracking user behaviour.
286 lines (263 loc) • 7.8 kB
text/typescript
import createBlink from '../main';
import { VERSION } from '../config/config';
import jest from 'jest-mock';
describe('PageLoad intregration test', () => {
it('should send a single pageLoad event', () => {
const mockSend = jest.fn();
const blink = createBlink({
send: mockSend,
sendDirect: mockSend,
});
blink.pageInit({
url: 'https://www.dagbladet.no/a/2313',
pageType: '',
pageView: 'new-pageview',
previousPageView: 'prev-pv',
referrer: 'www.sol.no',
abCookie: 102,
commercialSegments: 'sport,soccer,gardening',
site: 'www.kk.no',
});
blink.pageLoad({
url: 'https://www.dagbladet.no/a/2313',
plussData: { hasAccess: true, customerNumber: '442' },
clientHeight: 800,
clientWidth: 600,
scrollHeight: 1800,
});
expect(mockSend.mock.calls[0][0]).toEqual([
{
id: 'dagbladet.no/2313',
type: 'pageLoad',
abCookie: 102,
commercialSegments: 'sport,soccer,gardening',
article: {
harvesterId: 'dagbladet.no/2313',
url: 'https://www.dagbladet.no/a/2313',
},
pageType: '',
pageView: 'new-pageview',
previousPageView: 'prev-pv',
plussData: {
hasAccess: true,
customerNumber: '442',
},
referrer: 'www.sol.no',
site: 'www.kk.no',
scroll: {
scrollHeight: 1800,
},
version: VERSION,
clientWidth: 600,
clientHeight: 800,
},
]);
});
it('should update the pageview, and flush the store', () => {
const mockSend = jest.fn();
const blink = createBlink({
send: mockSend,
sendDirect: mockSend,
});
blink.pageInit({
url: 'https://www.dagbladet.no/a/2313',
pageView: 'first-pageview',
referrer: 'www.sol.no',
site: 'www.dagbladet.no',
});
blink.pageLoad({
url: 'https://www.dagbladet.no/a/2313',
clientHeight: 550,
clientWidth: 240,
scrollHeight: 9001,
plussData: { hasAccess: true, customerNumber: '442' },
});
// Do lots of events related to ads, activeTime and impressions
blink.adScreenEnter({ id: 'top-banner', time: new Date(1) });
blink.pageActivityStart({
url: 'https://www.dagbladet.no/a/2313',
pageScrollOffsetY: 340,
time: new Date(2),
});
blink.articlePreviewScreenEnter({
url: 'https://www.dinside.no/motor/kul-bil/49234',
time: new Date(3),
title: 'Kul bil',
});
// Register a _new_ pageInit, mid session
blink.pageInit({
url: 'https://www.dagbladet.no/a/2313',
pageView: 'second-pageview',
site: 'www.dagbladet.no',
});
blink.pageLoad({
url: 'https://www.dagbladet.no/a/2313',
plussData: {
hasAccess: false,
customerNumber: '',
},
clientHeight: 550,
clientWidth: 240,
scrollHeight: 9001,
});
const prevSentEvents = mockSend.mock.calls.length;
// Send all events
blink.sendAllEvents(new Date(10));
// Check that nothing is actually sent
expect(mockSend.mock.calls.length).toBe(prevSentEvents);
});
it('should create a new pageView for each pageInit, and update previous pageview', () => {
const mockSend = jest.fn();
const blink = createBlink({
send: mockSend,
sendDirect: mockSend,
});
blink.pageInit({
url: 'https://www.dagbladet.no/',
referrer: 'www.sol.no',
site: 'www.dagbladet.no',
});
const frontPage1 = blink.getPage({ url: 'https://www.dagbladet.no/' });
expect(frontPage1.pageView.length).toBe(36);
blink.pageInit({
url: 'https://www.dagbladet.no/a/2313',
referrer: 'https://www.dagbladet.no/',
site: 'www.dagbladet.no',
});
const articlePage = blink.getPage({
url: 'https://www.dagbladet.no/a/2313',
});
expect(articlePage.pageView.length).toBe(36);
expect(articlePage.pageView).not.toEqual(frontPage1.pageView);
expect(articlePage.previousPageView).toEqual(frontPage1.pageView);
blink.pageInit({
url: 'https://www.dagbladet.no/',
referrer: 'https://www.dagbladet.no/a/2313',
site: 'www.dagbladet.no',
});
const frontPage2 = blink.getPage({ url: 'https://www.dagbladet.no/' });
expect(frontPage2.pageView.length).toBe(36);
expect(frontPage2.pageView).not.toEqual(articlePage.pageView);
expect(frontPage2.pageView).not.toEqual(frontPage1.pageView);
expect(frontPage2.previousPageView).toEqual(articlePage.pageView);
});
it('should send a separate pageLoad events for two separate pages', () => {
enum PAGES {
FIRST = 'FIRST_PAGE',
SECOND = 'SECOND_PAGE',
}
const mockSend = jest.fn();
const blink = createBlink({
send: mockSend,
sendDirect: mockSend,
});
// Init first page
blink.pageInit({
pageId: PAGES.FIRST,
url: 'https://www.dagbladet.no/a/2313',
pageType: '',
pageView: `${PAGES.FIRST}-pageview`,
previousPageView: 'prev-pv',
referrer: 'www.sol.no',
abCookie: 1,
commercialSegments: 'sport,soccer,gardening',
site: 'www.kk.no',
});
// Second page
blink.pageInit({
pageId: PAGES.SECOND,
url: 'https://www.kk.no/a/123',
pageType: '',
pageView: `${PAGES.SECOND}-pageview`,
previousPageView: 'prev-pv',
referrer: 'www.kk.no',
abCookie: 2,
commercialSegments: 'sport,soccer,gardening',
site: 'www.kk.no',
});
// Load first page
blink.pageLoad({
pageId: PAGES.FIRST,
url: 'https://www.dagbladet.no/a/2313',
clientHeight: 550,
clientWidth: 240,
scrollHeight: 9001,
plussData: {
hasAccess: true,
customerNumber: '442',
},
});
// Load second page
blink.pageLoad({
pageId: PAGES.SECOND,
url: 'https://www.kk.no/a/123',
clientHeight: 550,
clientWidth: 240,
scrollHeight: 9001,
plussData: {
hasAccess: false,
customerNumber: '1234032042',
},
});
expect(mockSend.mock.calls).toEqual([
[
[
{
id: 'dagbladet.no/2313',
type: 'pageLoad',
abCookie: 1,
commercialSegments: 'sport,soccer,gardening',
article: {
harvesterId: 'dagbladet.no/2313',
url: 'https://www.dagbladet.no/a/2313',
},
pageType: '',
pageView: `${PAGES.FIRST}-pageview`,
previousPageView: 'prev-pv',
plussData: {
hasAccess: true,
customerNumber: '442',
},
referrer: 'www.sol.no',
site: 'www.kk.no',
scroll: {
scrollHeight: 9001,
},
version: VERSION,
clientWidth: 240,
clientHeight: 550,
},
],
],
[
[
{
id: 'kk.no/123',
type: 'pageLoad',
abCookie: 2,
commercialSegments: 'sport,soccer,gardening',
article: {
harvesterId: 'kk.no/123',
url: 'https://www.kk.no/a/123',
},
pageType: '',
pageView: `${PAGES.SECOND}-pageview`,
previousPageView: 'prev-pv',
plussData: {
hasAccess: false,
customerNumber: '1234032042',
},
referrer: 'www.kk.no',
site: 'www.kk.no',
scroll: {
scrollHeight: 9001,
},
version: VERSION,
clientWidth: 240,
clientHeight: 550,
},
],
],
]);
});
});