UNPKG

mk9-prebid

Version:

Header Bidding Management Library

236 lines (190 loc) 8.05 kB
import fntzAnalyticsAdapter from 'modules/fintezaAnalyticsAdapter.js'; import includes from 'core-js-pure/features/array/includes.js'; import { expect } from 'chai'; import { parseUrl } from 'src/utils.js'; import { server } from 'test/mocks/xhr.js'; let adapterManager = require('src/adapterManager').default; let events = require('src/events'); let constants = require('src/constants.json'); function setCookie(name, value, expires) { document.cookie = name + '=' + value + '; path=/' + (expires ? ('; expires=' + expires.toUTCString()) : '') + '; SameSite=Lax'; } describe('finteza analytics adapter', function () { const clientId = 'fntz-client-32145'; const uniqCookie = '5045380421580287382'; beforeEach(function () { setCookie('_fz_uniq', uniqCookie); sinon.stub(events, 'getEvents').returns([]); sinon.spy(fntzAnalyticsAdapter, 'track'); adapterManager.registerAnalyticsAdapter({ code: 'finteza', adapter: fntzAnalyticsAdapter }); adapterManager.enableAnalytics({ provider: 'finteza', options: { id: clientId, // Client ID (required) bidRequestTrack: 'Bid Request %BIDDER%', bidResponseTimeTrack: 'Bid Response Time %bidder%', bidResponsePriceTrack: 'Bid Response Price %bidder%', bidTimeoutTrack: 'Bid Timeout %Bidder%', bidWonTrack: 'Bid Won %BIDDER%', } }); }); afterEach(function () { setCookie('_fz_uniq', '', new Date(0)); events.getEvents.restore(); fntzAnalyticsAdapter.track.restore(); fntzAnalyticsAdapter.disableAnalytics(); }); describe('track', () => { describe('bid request', () => { it('builds and sends data', function () { const bidderCode = 'Bidder789'; const pauctionId = '5018eb39-f900-4370-b71e-3bb5b48d324f'; const bidRequest = { bidderCode: bidderCode, auctionId: pauctionId, bidderRequestId: '1a6fc81528d0f6', bids: [{ bidder: bidderCode, placementCode: 'container-1', bidId: '208750227436c1', bidderRequestId: '1a6fc81528d0f6', auctionId: pauctionId, startTime: 1509369418389, sizes: [[300, 250]], }], auctionStart: 1509369418387, timeout: 3000, start: 1509369418389 }; // Emit the events with the "real" arguments events.emit(constants.EVENTS.BID_REQUESTED, bidRequest); expect(server.requests.length).to.equal(1); expect(server.requests[0].method).to.equal('GET'); expect(server.requests[0].withCredentials).to.equal(true); const url = parseUrl(server.requests[0].url); expect(url.protocol).to.equal('https'); expect(url.hostname).to.equal('content.mql5.com'); expect(url.pathname).to.equal('/tr'); expect(url.search.id).to.equal(clientId); expect(url.search.fz_uniq).to.equal(uniqCookie); expect(decodeURIComponent(url.search.event)).to.equal(`Bid Request ${bidderCode.toUpperCase()}`); sinon.assert.callCount(fntzAnalyticsAdapter.track, 1); }); }); describe('bid response', () => { it('builds and sends data', function () { const bidderCode = 'Bidder789'; const pauctionId = '5018eb39-f900-4370-b71e-3bb5b48d324f'; const timeToRespond = 443; const cpm = 0.015; const bidResponse = { bidderCode: bidderCode, adId: '208750227436c1', cpm: cpm, auctionId: pauctionId, responseTimestamp: 1509369418832, requestTimestamp: 1509369418389, bidder: bidderCode, timeToRespond: timeToRespond, size: '300x250', width: 300, height: 250, }; // Emit the events with the "real" arguments events.emit(constants.EVENTS.BID_RESPONSE, bidResponse); expect(server.requests.length).to.equal(2); expect(server.requests[0].method).to.equal('GET'); expect(server.requests[0].withCredentials).to.equal(true); let url = parseUrl(server.requests[0].url); expect(url.protocol).to.equal('https'); expect(url.hostname).to.equal('content.mql5.com'); expect(url.pathname).to.equal('/tr'); expect(url.search.id).to.equal(clientId); expect(url.search.fz_uniq).to.equal(uniqCookie); expect(decodeURIComponent(url.search.event)).to.equal(`Bid Response Price ${bidderCode.toLowerCase()}`); expect(url.search.value).to.equal(String(cpm)); expect(url.search.unit).to.equal('usd'); expect(server.requests[1].method).to.equal('GET'); expect(server.requests[1].withCredentials).to.equal(true); url = parseUrl(server.requests[1].url); expect(url.protocol).to.equal('https'); expect(url.hostname).to.equal('content.mql5.com'); expect(url.pathname).to.equal('/tr'); expect(url.search.id).to.equal(clientId); expect(url.search.fz_uniq).to.equal(uniqCookie); expect(decodeURIComponent(url.search.event)).to.equal(`Bid Response Time ${bidderCode.toLowerCase()}`); expect(url.search.value).to.equal(String(timeToRespond)); expect(url.search.unit).to.equal('ms'); sinon.assert.callCount(fntzAnalyticsAdapter.track, 1); }); }); describe('bid won', () => { it('builds and sends data', function () { const bidderCode = 'Bidder789'; const pauctionId = '5018eb39-f900-4370-b71e-3bb5b48d324f'; const cpm = 0.015; const bidWon = { bidderCode: bidderCode, cpm: cpm, adId: 'adIdData', ad: 'adContent', auctionId: pauctionId, width: 300, height: 250 } // Emit the events with the "real" arguments events.emit(constants.EVENTS.BID_WON, bidWon); expect(server.requests.length).to.equal(1); expect(server.requests[0].method).to.equal('GET'); expect(server.requests[0].withCredentials).to.equal(true); const url = parseUrl(server.requests[0].url); expect(url.protocol).to.equal('https'); expect(url.hostname).to.equal('content.mql5.com'); expect(url.pathname).to.equal('/tr'); expect(url.search.id).to.equal(clientId); expect(url.search.fz_uniq).to.equal(uniqCookie); expect(decodeURIComponent(url.search.event)).to.equal(`Bid Won ${bidderCode.toUpperCase()}`); expect(url.search.value).to.equal(String(cpm)); expect(url.search.unit).to.equal('usd'); sinon.assert.callCount(fntzAnalyticsAdapter.track, 1); }); }); describe('bid timeout', () => { it('builds and sends data', function () { const bidderCode = 'biDDer789'; const pauctionId = '5018eb39-f900-4370-b71e-3bb5b48d324f'; const timeout = 2540; const bidTimeout = [ { bidId: '208750227436c1', bidder: bidderCode, auctionId: pauctionId, timeout: timeout, } ]; // Emit the events with the "real" arguments events.emit(constants.EVENTS.BID_TIMEOUT, bidTimeout); expect(server.requests.length).to.equal(1); expect(server.requests[0].method).to.equal('GET'); expect(server.requests[0].withCredentials).to.equal(true); const url = parseUrl(server.requests[0].url); expect(url.protocol).to.equal('https'); expect(url.hostname).to.equal('content.mql5.com'); expect(url.pathname).to.equal('/tr'); expect(url.search.id).to.equal(clientId); expect(url.search.fz_uniq).to.equal(uniqCookie); expect(decodeURIComponent(url.search.event)).to.equal(`Bid Timeout Bidder789`); expect(url.search.value).to.equal(String(timeout)); expect(url.search.unit).to.equal('ms'); sinon.assert.callCount(fntzAnalyticsAdapter.track, 1); }); }); }); });