UNPKG

mk9-prebid

Version:

Header Bidding Management Library

184 lines (154 loc) 5.06 kB
import adagioAnalyticsAdapter from 'modules/adagioAnalyticsAdapter.js'; import { expect } from 'chai'; import * as utils from 'src/utils.js'; let adapterManager = require('src/adapterManager').default; let events = require('src/events'); let constants = require('src/constants.json'); describe('adagio analytics adapter', () => { let sandbox; let adagioQueuePushSpy; beforeEach(() => { sandbox = sinon.createSandbox(); sandbox.stub(events, 'getEvents').returns([]); const w = utils.getWindowTop(); adapterManager.registerAnalyticsAdapter({ code: 'adagio', adapter: adagioAnalyticsAdapter }); w.ADAGIO = w.ADAGIO || {}; w.ADAGIO.queue = w.ADAGIO.queue || []; adagioQueuePushSpy = sandbox.spy(w.ADAGIO.queue, 'push'); }); afterEach(() => { sandbox.restore(); }); describe('track', () => { beforeEach(() => { adapterManager.enableAnalytics({ provider: 'adagio' }); }); afterEach(() => { adagioAnalyticsAdapter.disableAnalytics(); }); it('builds and sends auction data', () => { const w = utils.getWindowTop(); let bidRequest = { bids: [{ adUnitCode: 'div-1', params: { features: { siteId: '2', placement: 'pave_top', pagetype: 'article', category: 'IAB12,IAB12-2', device: '2', } } }, { adUnitCode: 'div-2', params: { features: { siteId: '2', placement: 'ban_top', pagetype: 'article', category: 'IAB12,IAB12-2', device: '2', } }, }], }; let bidResponse = { bidderCode: 'adagio', width: 300, height: 250, statusMessage: 'Bid available', cpm: 6.2189757658226075, currency: '', netRevenue: false, adUnitCode: 'div-1', timeToRespond: 132, }; // Step 1: Send bid requested event events.emit(constants.EVENTS.BID_REQUESTED, bidRequest); // Step 2: Send bid response event events.emit(constants.EVENTS.BID_RESPONSE, bidResponse); // Step 3: Send auction end event events.emit(constants.EVENTS.AUCTION_END, {}); sandbox.assert.callCount(adagioQueuePushSpy, 3); const call0 = adagioQueuePushSpy.getCall(0); expect(call0.args[0].action).to.equal('pb-analytics-event'); expect(call0.args[0].ts).to.not.be.undefined; expect(call0.args[0].data).to.not.be.undefined; expect(call0.args[0].data).to.deep.equal({eventName: constants.EVENTS.BID_REQUESTED, args: bidRequest}); const call1 = adagioQueuePushSpy.getCall(1); expect(call1.args[0].action).to.equal('pb-analytics-event'); expect(call1.args[0].ts).to.not.be.undefined; expect(call1.args[0].data).to.not.be.undefined; expect(call1.args[0].data).to.deep.equal({eventName: constants.EVENTS.BID_RESPONSE, args: bidResponse}); const call2 = adagioQueuePushSpy.getCall(2); expect(call2.args[0].action).to.equal('pb-analytics-event'); expect(call2.args[0].ts).to.not.be.undefined; expect(call2.args[0].data).to.not.be.undefined; expect(call2.args[0].data).to.deep.equal({eventName: constants.EVENTS.AUCTION_END, args: {}}); }); }); describe('no track', () => { beforeEach(() => { sandbox.stub(utils, 'getWindowTop').throws(); adapterManager.enableAnalytics({ provider: 'adagio' }); }); afterEach(() => { adagioAnalyticsAdapter.disableAnalytics(); sandbox.restore(); }); it('builds and sends auction data', () => { let bidRequest = { bids: [{ adUnitCode: 'div-1', params: { features: { siteId: '2', placement: 'pave_top', pagetype: 'article', category: 'IAB12,IAB12-2', device: '2', } } }, { adUnitCode: 'div-2', params: { features: { siteId: '2', placement: 'ban_top', pagetype: 'article', category: 'IAB12,IAB12-2', device: '2', } }, }], }; let bidResponse = { bidderCode: 'adagio', width: 300, height: 250, statusMessage: 'Bid available', cpm: 6.2189757658226075, currency: '', netRevenue: false, adUnitCode: 'div-1', timeToRespond: 132, }; // Step 1: Send bid requested event events.emit(constants.EVENTS.BID_REQUESTED, bidRequest); // Step 2: Send bid response event events.emit(constants.EVENTS.BID_RESPONSE, bidResponse); // Step 3: Send auction end event events.emit(constants.EVENTS.AUCTION_END, {}); utils.getWindowTop.restore(); sandbox.assert.callCount(adagioQueuePushSpy, 0); }); }); });