UNPKG

@aller/blink

Version:

A library for tracking user behaviour.

280 lines (271 loc) 7.29 kB
import adsReducer from '../ads'; import { SCROLL_OFFSET_HEIGHT, SCROLL_OFFSET_TOP, SCROLL_POS_AD_LOAD, SCROLL_POS_INSCREEN_DFP, DFP_INSCREEN, SCROLL_POS_SLOT_ONLOAD, DFP_LOADED, DFP_NAME, DFP_ADUNIT_PATH, DFP_RENDERED, SCROLL_POS_SLOT_RENDER_ENDED, DFP_ADVERTISER_ID, DFP_CAMPAIGN_ID, DFP_CREATIVE_ID, DFP_LINE_ITEM_ID, DFP_SOURCE_AGNOSTIC_CREATIVE_ID, DFP_SOURCE_AGNOSTIC_LINE_ITEM_ID, DFP_BIDDER, } from '../../events/consts'; import { AD_LOAD_START, DFP_IMPRESSION_VIEWABLE, DFP_SLOT_ON_LOAD, DFP_SLOT_RENDER_ENDED, } from '../../actions'; describe('ads reducer', () => { describe('adLoad', () => { it('should add into empty state', () => { const action = { type: AD_LOAD_START, payload: { id: 'ad-top', offsetHeight: 300, offsetTop: 200, scrollTop: 100, }, }; expect(adsReducer({}, action)).toEqual({ 'ad-top': { [SCROLL_POS_AD_LOAD]: 100, [SCROLL_OFFSET_TOP]: 200, [SCROLL_OFFSET_HEIGHT]: 300, }, }); }); it('should add next to existing state', () => { const action = { type: AD_LOAD_START, payload: { id: 'ad-bottom', offsetHeight: 15, offsetTop: 20, scrollTop: 5, }, }; const previousState = { 'ad-top': { [SCROLL_POS_AD_LOAD]: 100, [SCROLL_OFFSET_TOP]: 200, [SCROLL_OFFSET_HEIGHT]: 300, }, }; expect(adsReducer(previousState, action)).toEqual({ 'ad-top': { [SCROLL_POS_AD_LOAD]: 100, [SCROLL_OFFSET_TOP]: 200, [SCROLL_OFFSET_HEIGHT]: 300, }, 'ad-bottom': { [SCROLL_POS_AD_LOAD]: 5, [SCROLL_OFFSET_TOP]: 20, [SCROLL_OFFSET_HEIGHT]: 15, }, }); }); it('should overwrite for existing state for same id', () => { const action = { type: AD_LOAD_START, payload: { id: 'ad-bottom', offsetHeight: 15, offsetTop: 10, scrollTop: 5, }, }; const previousState = { 'ad-bottom': { id: 'ad-bottom', [SCROLL_POS_AD_LOAD]: 100, [SCROLL_OFFSET_TOP]: 200, [SCROLL_OFFSET_HEIGHT]: 300, }, }; expect(adsReducer(previousState, action)).toEqual({ 'ad-bottom': { id: 'ad-bottom', [SCROLL_POS_AD_LOAD]: 5, [SCROLL_OFFSET_TOP]: 10, [SCROLL_OFFSET_HEIGHT]: 15, }, }); }); }); describe('dfpImpressionViewable', () => { it('should add into empty state', () => { const action = { type: DFP_IMPRESSION_VIEWABLE, payload: { id: 'ad-banner2', scrollTop: 100, }, }; expect(adsReducer({}, action)).toEqual({ 'ad-banner2': { [SCROLL_POS_INSCREEN_DFP]: 100, [DFP_INSCREEN]: 1, }, }); }); it('should add next to existing state', () => { const action = { type: DFP_IMPRESSION_VIEWABLE, payload: { id: 'ad-banner2', scrollTop: 25, }, }; const previousState = { 'ad-banner2': { [SCROLL_POS_INSCREEN_DFP]: 50 }, 'ad-top': { [SCROLL_POS_INSCREEN_DFP]: 100, [DFP_INSCREEN]: 1 }, }; expect(adsReducer(previousState, action)).toEqual({ 'ad-banner2': { [SCROLL_POS_INSCREEN_DFP]: 25, [DFP_INSCREEN]: 1, }, 'ad-top': { [SCROLL_POS_INSCREEN_DFP]: 100, [DFP_INSCREEN]: 1, }, }); }); }); describe('dfpSlotOnLoad', () => { it('should add into empty state', () => { const action = { type: DFP_SLOT_ON_LOAD, payload: { id: 'ad-banner2', name: 'dfp-banner', scrollTop: 100, }, }; expect(adsReducer({}, action)).toEqual({ 'ad-banner2': { [SCROLL_POS_SLOT_ONLOAD]: 100, [DFP_LOADED]: 1, [DFP_NAME]: 'dfp-banner', }, }); }); it('should add next to existing state', () => { const action = { type: DFP_SLOT_ON_LOAD, payload: { id: 'ad-banner2', name: 'dfp-banner', scrollTop: 25, }, }; const previousState = { 'ad-banner2': { [SCROLL_POS_SLOT_ONLOAD]: 120 }, 'ad-top': { [SCROLL_POS_SLOT_ONLOAD]: 250, [DFP_LOADED]: 1, [DFP_NAME]: 'dfp-top', }, }; expect(adsReducer(previousState, action)).toEqual({ 'ad-banner2': { [SCROLL_POS_SLOT_ONLOAD]: 25, [DFP_LOADED]: 1, [DFP_NAME]: 'dfp-banner', }, 'ad-top': { [SCROLL_POS_SLOT_ONLOAD]: 250, [DFP_LOADED]: 1, [DFP_NAME]: 'dfp-top', }, }); }); }); describe('dfpSlotRenderEnded', () => { it('should add into empty state', () => { const action = { type: DFP_SLOT_RENDER_ENDED, payload: { id: 'ad-banner2', adUnitPath: '/some-path', advertiserId: 1204, campaignId: 123, creativeId: 234, lineItemId: 543, sourceAgnosticCreativeId: 1202, sourceAgnosticLineItemId: 1303, scrollTop: 100, bidder: 'adform', }, }; expect(adsReducer({}, action)).toEqual({ 'ad-banner2': { [DFP_ADVERTISER_ID]: 1204, [DFP_CAMPAIGN_ID]: 123, [DFP_CREATIVE_ID]: 234, [DFP_LINE_ITEM_ID]: 543, [DFP_SOURCE_AGNOSTIC_CREATIVE_ID]: 1202, [DFP_SOURCE_AGNOSTIC_LINE_ITEM_ID]: 1303, [DFP_ADUNIT_PATH]: '/some-path', [DFP_RENDERED]: 1, [SCROLL_POS_SLOT_RENDER_ENDED]: 100, [DFP_BIDDER]: 'adform', }, }); }); it('should add next to existing state', () => { const action = { type: DFP_SLOT_RENDER_ENDED, payload: { id: 'ad-banner2', adUnitPath: '/some-path', advertiserId: 1204, campaignId: 123, creativeId: 234, lineItemId: 543, sourceAgnosticCreativeId: 1202, sourceAgnosticLineItemId: 1303, scrollTop: 100, bidder: 'adform', }, }; const previousState = { 'ad-top': { [DFP_ADUNIT_PATH]: '/top-path', [DFP_RENDERED]: 1, [SCROLL_POS_SLOT_RENDER_ENDED]: 300, }, }; expect(adsReducer(previousState, action)).toEqual({ 'ad-banner2': { [DFP_ADUNIT_PATH]: '/some-path', [DFP_RENDERED]: 1, [SCROLL_POS_SLOT_RENDER_ENDED]: 100, [DFP_ADVERTISER_ID]: 1204, [DFP_CAMPAIGN_ID]: 123, [DFP_CREATIVE_ID]: 234, [DFP_LINE_ITEM_ID]: 543, [DFP_SOURCE_AGNOSTIC_CREATIVE_ID]: 1202, [DFP_SOURCE_AGNOSTIC_LINE_ITEM_ID]: 1303, [DFP_BIDDER]: 'adform', }, 'ad-top': { [DFP_ADUNIT_PATH]: '/top-path', [DFP_RENDERED]: 1, [SCROLL_POS_SLOT_RENDER_ENDED]: 300, }, }); }); }); });