UNPKG

mk9-prebid

Version:

Header Bidding Management Library

492 lines (460 loc) 13.3 kB
import { expect } from 'chai'; import { spec } from 'modules/ccxBidAdapter.js'; import * as utils from 'src/utils.js'; describe('ccxAdapter', function () { let bids = [ { adUnitCode: 'banner', auctionId: '0b9de793-8eda-481e-a548-c187d58b28d9', bidId: '2e56e1af51a5d7', bidder: 'ccx', bidderRequestId: '17e7b9f58a607e', mediaTypes: { banner: { sizes: [[300, 250]] } }, params: { placementId: 607 }, sizes: [[300, 250]], transactionId: 'aefddd38-cfa0-48ab-8bdd-325de4bab5f9' }, { adUnitCode: 'video', auctionId: '0b9de793-8eda-481e-a548-c187d58b28d9', bidId: '3u94t90ut39tt3t', bidder: 'ccx', bidderRequestId: '23ur20r239r2r', mediaTypes: { video: { playerSize: [[640, 480]] } }, params: { placementId: 608 }, sizes: [[640, 480]], transactionId: 'aefddd38-cfa0-48ab-8bdd-325de4bab5f9' } ]; describe('isBidRequestValid', function () { it('Valid bid requests', function () { expect(spec.isBidRequestValid(bids[0])).to.be.true; expect(spec.isBidRequestValid(bids[1])).to.be.true; }); it('Invalid bid reqeusts - no placementId', function () { let bidsClone = utils.deepClone(bids); bidsClone[0].params = undefined; expect(spec.isBidRequestValid(bidsClone[0])).to.be.false; }); it('Invalid bid reqeusts - invalid banner sizes', function () { let bidsClone = utils.deepClone(bids); bidsClone[0].mediaTypes.banner.sizes = [300, 250]; expect(spec.isBidRequestValid(bidsClone[0])).to.be.false; bidsClone[0].mediaTypes.banner.sizes = [[300, 250], [750]]; expect(spec.isBidRequestValid(bidsClone[0])).to.be.false; bidsClone[0].mediaTypes.banner.sizes = []; expect(spec.isBidRequestValid(bidsClone[0])).to.be.false; }); it('Invalid bid reqeusts - invalid video sizes', function () { let bidsClone = utils.deepClone(bids); bidsClone[1].mediaTypes.video.playerSize = []; expect(spec.isBidRequestValid(bidsClone[1])).to.be.false; bidsClone[1].mediaTypes.video.sizes = [640, 480]; expect(spec.isBidRequestValid(bidsClone[1])).to.be.false; }); it('Valid bid reqeust - old style sizes', function () { let bidsClone = utils.deepClone(bids); delete (bidsClone[0].mediaTypes); delete (bidsClone[1].mediaTypes); expect(spec.isBidRequestValid(bidsClone[0])).to.be.true; expect(spec.isBidRequestValid(bidsClone[1])).to.be.true; bidsClone[0].sizes = [300, 250]; expect(spec.isBidRequestValid(bidsClone[0])).to.be.true; }); }); describe('buildRequests', function () { it('No valid bids', function () { expect(spec.buildRequests([])).to.be.undefined; }); it('Valid bid request - default', function () { let response = spec.buildRequests(bids, {bids}); expect(response).to.be.not.empty; expect(response.data).to.be.not.empty; let data = JSON.parse(response.data); expect(data).to.be.an('object'); expect(data).to.have.keys('site', 'imp', 'id', 'ext', 'device'); let imps = [ { banner: { format: [ { w: 300, h: 250 } ] }, ext: { pid: 607 }, id: '2e56e1af51a5d7', secure: 1 }, { video: { w: 640, h: 480, protocols: [2, 3, 5, 6], mimes: ['video/mp4', 'video/x-flv'], playbackmethod: [1, 2, 3, 4], skip: 0 }, id: '3u94t90ut39tt3t', secure: 1, ext: { pid: 608 } } ]; expect(data.imp).to.deep.have.same.members(imps); }); it('Valid bid request - custom', function () { let bidsClone = utils.deepClone(bids); let imps = [ { banner: { format: [ { w: 300, h: 250 } ] }, ext: { pid: 607 }, id: '2e56e1af51a5d7', secure: 1 }, { video: { w: 640, h: 480, protocols: [5, 6], mimes: ['video/mp4'], playbackmethod: [3], skip: 1, skipafter: 5 }, id: '3u94t90ut39tt3t', secure: 1, ext: { pid: 608 } } ]; bidsClone[1].params.video = {}; bidsClone[1].params.video.protocols = [5, 6]; bidsClone[1].params.video.mimes = ['video/mp4']; bidsClone[1].params.video.playbackmethod = [3]; bidsClone[1].params.video.skip = 1; bidsClone[1].params.video.skipafter = 5; let response = spec.buildRequests(bidsClone, {'bids': bidsClone}); let data = JSON.parse(response.data); expect(data.imp).to.deep.have.same.members(imps); }); it('Valid bid request - sizes old style', function () { let bidsClone = utils.deepClone(bids); delete (bidsClone[0].mediaTypes); delete (bidsClone[1].mediaTypes); bidsClone[0].mediaType = 'banner'; bidsClone[1].mediaType = 'video'; let imps = [ { banner: { format: [ { w: 300, h: 250 } ] }, ext: { pid: 607 }, id: '2e56e1af51a5d7', secure: 1 }, { video: { w: 640, h: 480, protocols: [2, 3, 5, 6], mimes: ['video/mp4', 'video/x-flv'], playbackmethod: [1, 2, 3, 4], skip: 0 }, id: '3u94t90ut39tt3t', secure: 1, ext: { pid: 608 } } ]; let response = spec.buildRequests(bidsClone, {'bids': bidsClone}); let data = JSON.parse(response.data); expect(data.imp).to.deep.have.same.members(imps); }); it('Valid bid request - sizes old style - no media type', function () { let bidsClone = utils.deepClone(bids); delete (bidsClone[0].mediaTypes); delete (bidsClone[1]); let imps = [ { banner: { format: [ { w: 300, h: 250 } ] }, ext: { pid: 607 }, id: '2e56e1af51a5d7', secure: 1 } ]; let response = spec.buildRequests(bidsClone, {'bids': bidsClone}); let data = JSON.parse(response.data); expect(data.imp).to.deep.have.same.members(imps); }); }); describe('GDPR conformity', function () { it('should transmit correct data', function () { let bidsClone = utils.deepClone(bids); let gdprConsent = { consentString: 'awefasdfwefasdfasd', gdprApplies: true }; let response = spec.buildRequests(bidsClone, {'bids': bidsClone, 'gdprConsent': gdprConsent}); let data = JSON.parse(response.data); expect(data.regs.ext.gdpr).to.equal(1); expect(data.user.ext.consent).to.equal('awefasdfwefasdfasd'); }); }); describe('GDPR absence conformity', function () { it('should transmit correct data', function () { let response = spec.buildRequests(bids, {bids}); let data = JSON.parse(response.data); expect(data.regs).to.be.undefined; expect(data.user).to.be.undefined; }); }); let response = { id: '0b9de793-8eda-481e-a548-c187d58b28d9', seatbid: [ { bid: [ { id: '2e56e1af51a5d7_221', impid: '2e56e1af51a5d7', price: 8.1, adid: '221', adm: '<script>TEST</script>', adomain: ['clickonometrics.com'], crid: '221', w: 300, h: 250, ext: { type: 'standard' } }, { id: '2e56e1af51a5d8_222', impid: '2e56e1af51a5d8', price: 5.68, adid: '222', adm: '<xml>', adomain: ['clickonometrics.com'], crid: '222', w: 640, h: 480, ext: { type: 'video' } } ] } ], cur: 'PLN', ext: { ttl: 5, usersync: [ { type: 'image', url: 'http://foo.sync?param=1' }, { type: 'iframe', url: 'http://foo.sync?param=2' } ] } }; describe('interpretResponse', function () { it('Valid bid response - multi', function () { let bidResponses = [ { requestId: '2e56e1af51a5d7', cpm: 8.1, width: 300, height: 250, creativeId: '221', netRevenue: false, ttl: 5, currency: 'PLN', ad: '<script>TEST</script>', meta: { advertiserDomains: ['clickonometrics.com'] } }, { requestId: '2e56e1af51a5d8', cpm: 5.68, width: 640, height: 480, creativeId: '222', netRevenue: false, ttl: 5, currency: 'PLN', vastXml: '<xml>', meta: { advertiserDomains: ['clickonometrics.com'] } } ]; expect(spec.interpretResponse({body: response})).to.deep.have.same.members(bidResponses); }); it('Valid bid response - single', function () { delete response.seatbid[0].bid[1]; let bidResponses = [ { requestId: '2e56e1af51a5d7', cpm: 8.1, width: 300, height: 250, creativeId: '221', netRevenue: false, ttl: 5, currency: 'PLN', ad: '<script>TEST</script>', meta: { advertiserDomains: ['clickonometrics.com'] } } ]; expect(spec.interpretResponse({body: response})).to.deep.have.same.members(bidResponses); }); it('Empty bid response', function () { expect(spec.interpretResponse({})).to.be.empty; }); }); describe('getUserSyncs', function () { it('Valid syncs - all', function () { let syncOptions = { iframeEnabled: true, pixelEnabled: true }; let expectedSyncs = [ { type: 'image', url: 'http://foo.sync?param=1' }, { type: 'iframe', url: 'http://foo.sync?param=2' } ]; expect(spec.getUserSyncs(syncOptions, [{body: response}])).to.deep.have.same.members(expectedSyncs); }); it('Valid syncs - only image', function () { let syncOptions = { iframeEnabled: false, pixelEnabled: true }; let expectedSyncs = [ { type: 'image', url: 'http://foo.sync?param=1' } ]; expect(spec.getUserSyncs(syncOptions, [{body: response}])).to.deep.have.same.members(expectedSyncs); }); it('Valid syncs - only iframe', function () { let syncOptions = {iframeEnabled: true, pixelEnabled: false}; let expectedSyncs = [ { type: 'iframe', url: 'http://foo.sync?param=2' } ]; expect(spec.getUserSyncs(syncOptions, [{body: response}])).to.deep.have.same.members(expectedSyncs); }); it('Valid syncs - empty', function () { let syncOptions = {iframeEnabled: true, pixelEnabled: true}; response.ext.usersync = {}; expect(spec.getUserSyncs(syncOptions, [{body: response}])).to.be.empty; }); }); describe('mediaTypesVideoParams', function () { it('Valid video mediaTypes', function () { let bids = [ { adUnitCode: 'video', auctionId: '0b9de793-8eda-481e-a548-c187d58b28d9', bidId: '3u94t90ut39tt3t', bidder: 'ccx', bidderRequestId: '23ur20r239r2r', mediaTypes: { video: { playerSize: [[640, 480]], protocols: [2, 3, 5, 6], mimes: ['video/mp4', 'video/x-flv'], playbackmethod: [1, 2, 3, 4], skip: 1, skipafter: 5 } }, params: { placementId: 608 }, sizes: [[640, 480]], transactionId: 'aefddd38-cfa0-48ab-8bdd-325de4bab5f9' } ]; let imps = [ { video: { w: 640, h: 480, protocols: [2, 3, 5, 6], mimes: ['video/mp4', 'video/x-flv'], playbackmethod: [1, 2, 3, 4], skip: 1, skipafter: 5 }, id: '3u94t90ut39tt3t', secure: 1, ext: { pid: 608 } } ]; let bidsClone = utils.deepClone(bids); let response = spec.buildRequests(bidsClone, {'bids': bidsClone}); let data = JSON.parse(response.data); expect(data.imp).to.deep.have.same.members(imps); }); }); });