UNPKG

mk9-prebid

Version:

Header Bidding Management Library

935 lines (859 loc) 30.6 kB
import { expect } from 'chai'; import * as utils from 'src/utils.js'; import { spec } from 'modules/nobidBidAdapter.js'; import { newBidder } from 'src/adapters/bidderFactory.js'; import * as bidderFactory from 'src/adapters/bidderFactory.js'; describe('Nobid Adapter', function () { const adapter = newBidder(spec); describe('inherited functions', function () { it('exists and is a function', function () { expect(adapter.callBids).to.exist.and.to.be.a('function'); }); }); describe('isBidRequestValid', function () { let bid = { 'bidder': 'nobid', 'params': { 'siteId': 2 }, 'adUnitCode': 'adunit-code', 'sizes': [[300, 250]], 'bidId': '30b31c1838de1e', 'bidderRequestId': '22edbae2733bf6', 'auctionId': '1d1a030790a475', }; it('should return true when required params found', function () { expect(spec.isBidRequestValid(bid)).to.equal(true); }); it('should return true when required params found', function () { let bid = Object.assign({}, bid); delete bid.params; bid.params = { 'siteId': 2 }; expect(spec.isBidRequestValid(bid)).to.equal(true); }); it('should return false when required params are not passed', function () { let bid = Object.assign({}, bid); delete bid.params; bid.params = { 'siteId': 0 }; expect(spec.isBidRequestValid(bid)).to.equal(false); }); }); describe('isDurationBidRequestValid', function () { const SITE_ID = 2; const REFERER = 'https://www.examplereferer.com'; const BIDDER_CODE = 'duration'; let bidRequests = [ { 'bidder': BIDDER_CODE, 'params': { 'siteId': SITE_ID }, 'adUnitCode': 'adunit-code', 'sizes': [[300, 250]], 'bidId': '30b31c1838de1e', 'bidderRequestId': '22edbae2733bf6', 'auctionId': '1d1a030790a475', } ]; let bidderRequest = { refererInfo: {referer: REFERER}, bidderCode: BIDDER_CODE } it('should add source and version to the tag', function () { const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(request.data); expect(payload.sid).to.equal(SITE_ID); expect(payload.pjbdr).to.equal(BIDDER_CODE); expect(payload.l).to.exist.and.to.equal(encodeURIComponent(REFERER)); expect(payload.tt).to.exist; expect(payload.a).to.exist; expect(payload.t).to.exist; expect(payload.tz).to.exist; expect(payload.r).to.exist; expect(payload.lang).to.exist; expect(payload.ref).to.exist; expect(payload.gdpr).to.exist; }); it('sends bid request to ad size', function () { const request = spec.buildRequests(bidRequests); const payload = JSON.parse(request.data); expect(payload.a).to.exist; expect(payload.a.length).to.exist.and.to.equal(1); expect(payload.a[0].z[0][0]).to.equal(300); expect(payload.a[0].z[0][1]).to.equal(250); }); it('sends bid request to div id', function () { const request = spec.buildRequests(bidRequests); const payload = JSON.parse(request.data); expect(payload.a).to.exist; expect(payload.a[0].d).to.equal('adunit-code'); }); it('sends bid request to site id', function () { const request = spec.buildRequests(bidRequests); const payload = JSON.parse(request.data); expect(payload.a).to.exist; expect(payload.a[0].sid).to.equal(2); expect(payload.a[0].at).to.equal('banner'); expect(payload.a[0].params.siteId).to.equal(2); }); it('sends bid request to ad type', function () { const request = spec.buildRequests(bidRequests); const payload = JSON.parse(request.data); expect(payload.a).to.exist; expect(payload.a[0].at).to.equal('banner'); }); it('sends bid request to ENDPOINT via POST', function () { const request = spec.buildRequests(bidRequests); expect(request.url).to.contain('ads.servenobid.com/adreq'); expect(request.method).to.equal('POST'); }); it('should add gdpr consent information to the request', function () { let consentString = 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A=='; let bidderRequest = { 'bidderCode': 'nobid', 'auctionId': '1d1a030790a475', 'bidderRequestId': '22edbae2733bf6', 'timeout': 3000, 'gdprConsent': { consentString: consentString, gdprApplies: true } }; bidderRequest.bids = bidRequests; const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(request.data); expect(payload.gdpr).to.exist; expect(payload.gdpr.consentString).to.exist.and.to.equal(consentString); expect(payload.gdpr.consentRequired).to.exist.and.to.be.true; }); it('should add gdpr consent information to the request', function () { let bidderRequest = { 'bidderCode': 'nobid', 'auctionId': '1d1a030790a475', 'bidderRequestId': '22edbae2733bf6', 'timeout': 3000, 'gdprConsent': { gdprApplies: false } }; bidderRequest.bids = bidRequests; const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(request.data); expect(payload.gdpr).to.exist; expect(payload.gdpr.consentString).to.not.exist; expect(payload.gdpr.consentRequired).to.exist.and.to.be.false; }); it('should add usp consent information to the request', function () { let bidderRequest = { 'bidderCode': 'nobid', 'auctionId': '1d1a030790a475', 'bidderRequestId': '22edbae2733bf6', 'timeout': 3000, 'uspConsent': '1Y-N' }; bidderRequest.bids = bidRequests; const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(request.data); expect(payload.usp).to.exist; expect(payload.usp).to.exist.and.to.equal('1Y-N'); }); }); describe('isVideoBidRequestValid', function () { let bid = { bidder: 'nobid', params: { siteId: 2, video: { skippable: true, playback_methods: ['auto_play_sound_off'], position: 'atf', mimes: ['video/x-flv', 'video/mp4', 'video/x-ms-wmv', 'application/x-shockwave-flash', 'application/javascript'], minduration: 1, maxduration: 30, frameworks: [1, 2, 3, 4, 5, 6] } }, adUnitCode: 'adunit-code', sizes: [[640, 480]], bidId: '30b31c1838de1e', bidderRequestId: '22edbae2733bf6', auctionId: '1d1a030790a475', mediaTypes: { video: { context: 'instream' } } }; const SITE_ID = 2; const REFERER = 'https://www.examplereferer.com'; let bidRequests = [ { bidder: 'nobid', params: { siteId: SITE_ID, video: { skippable: true, playback_methods: ['auto_play_sound_off'], position: 'atf', mimes: ['video/x-flv', 'video/mp4', 'video/x-ms-wmv', 'application/x-shockwave-flash', 'application/javascript'], minduration: 1, maxduration: 30, frameworks: [1, 2, 3, 4, 5, 6] } }, adUnitCode: 'adunit-code', bidId: '30b31c1838de1e', bidderRequestId: '22edbae2733bf6', auctionId: '1d1a030790a475', mediaTypes: { video: { playerSize: [640, 480], context: 'instream' } } } ]; let bidderRequest = { refererInfo: {referer: REFERER} } it('should add source and version to the tag', function () { const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(request.data); expect(payload.sid).to.equal(SITE_ID); expect(payload.pjbdr).to.equal('nobid'); expect(payload.l).to.exist.and.to.equal(encodeURIComponent(REFERER)); expect(payload.a).to.exist; expect(payload.t).to.exist; expect(payload.tz).to.exist; expect(payload.r).to.exist.and.to.equal('100x100'); expect(payload.lang).to.exist; expect(payload.ref).to.exist; expect(payload.a[0].d).to.exist.and.to.equal('adunit-code'); expect(payload.a[0].at).to.exist.and.to.equal('video'); expect(payload.a[0].params.video).to.exist; expect(payload.a[0].params.video.skippable).to.exist.and.to.equal(true); expect(payload.a[0].params.video.playback_methods).to.exist.and.to.contain('auto_play_sound_off'); expect(payload.a[0].params.video.position).to.exist.and.to.equal('atf'); expect(payload.a[0].params.video.mimes).to.exist.and.to.contain('video/x-flv'); expect(payload.a[0].params.video.minduration).to.exist.and.to.equal(1); expect(payload.a[0].params.video.maxduration).to.exist.and.to.equal(30); expect(payload.a[0].params.video.frameworks[0]).to.exist.and.to.equal(1); expect(payload.a[0].params.video.frameworks[1]).to.exist.and.to.equal(2); expect(payload.a[0].params.video.frameworks[2]).to.exist.and.to.equal(3); expect(payload.a[0].params.video.frameworks[3]).to.exist.and.to.equal(4); expect(payload.a[0].params.video.frameworks[4]).to.exist.and.to.equal(5); expect(payload.a[0].params.video.frameworks[5]).to.exist.and.to.equal(6); }); }); describe('isVideoBidRequestValid', function () { let bid = { bidder: 'nobid', params: { siteId: 2, video: { skippable: true, playback_methods: ['auto_play_sound_off'], position: 'atf', mimes: ['video/x-flv', 'video/mp4', 'video/x-ms-wmv', 'application/x-shockwave-flash', 'application/javascript'], minduration: 1, maxduration: 30, frameworks: [1, 2, 3, 4, 5, 6] } }, adUnitCode: 'adunit-code', sizes: [[640, 480]], bidId: '30b31c1838de1e', bidderRequestId: '22edbae2733bf6', auctionId: '1d1a030790a475', mediaTypes: { video: { context: 'outstream' } } }; const SITE_ID = 2; const REFERER = 'https://www.examplereferer.com'; let bidRequests = [ { bidder: 'nobid', params: { siteId: SITE_ID, video: { skippable: true, playback_methods: ['auto_play_sound_off'], position: 'atf', mimes: ['video/x-flv', 'video/mp4', 'video/x-ms-wmv', 'application/x-shockwave-flash', 'application/javascript'], minduration: 1, maxduration: 30, frameworks: [1, 2, 3, 4, 5, 6] } }, adUnitCode: 'adunit-code', bidId: '30b31c1838de1e', bidderRequestId: '22edbae2733bf6', auctionId: '1d1a030790a475', mediaTypes: { video: { playerSize: [640, 480], context: 'outstream' } } } ]; let bidderRequest = { refererInfo: {referer: REFERER} } it('should add source and version to the tag', function () { const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(request.data); expect(payload.pjbdr).to.equal('nobid'); expect(payload.sid).to.equal(SITE_ID); expect(payload.l).to.exist.and.to.equal(encodeURIComponent(REFERER)); expect(payload.a).to.exist; expect(payload.t).to.exist; expect(payload.tz).to.exist; expect(payload.r).to.exist; expect(payload.lang).to.exist; expect(payload.ref).to.exist; expect(payload.a[0].d).to.exist.and.to.equal('adunit-code'); expect(payload.a[0].at).to.exist.and.to.equal('video'); expect(payload.a[0].params.video).to.exist; expect(payload.a[0].params.video.skippable).to.exist.and.to.equal(true); expect(payload.a[0].params.video.playback_methods).to.exist.and.to.contain('auto_play_sound_off'); expect(payload.a[0].params.video.position).to.exist.and.to.equal('atf'); expect(payload.a[0].params.video.mimes).to.exist.and.to.contain('video/x-flv'); expect(payload.a[0].params.video.minduration).to.exist.and.to.equal(1); expect(payload.a[0].params.video.maxduration).to.exist.and.to.equal(30); expect(payload.a[0].params.video.frameworks[0]).to.exist.and.to.equal(1); expect(payload.a[0].params.video.frameworks[1]).to.exist.and.to.equal(2); expect(payload.a[0].params.video.frameworks[2]).to.exist.and.to.equal(3); expect(payload.a[0].params.video.frameworks[3]).to.exist.and.to.equal(4); expect(payload.a[0].params.video.frameworks[4]).to.exist.and.to.equal(5); expect(payload.a[0].params.video.frameworks[5]).to.exist.and.to.equal(6); }); }); describe('buildRequestsEIDs', function () { const SITE_ID = 2; const REFERER = 'https://www.examplereferer.com'; let bidRequests = [ { 'bidder': 'nobid', 'params': { 'siteId': SITE_ID }, 'adUnitCode': 'adunit-code', 'sizes': [[300, 250]], 'bidId': '30b31c1838de1e', 'bidderRequestId': '22edbae2733bf6', 'auctionId': '1d1a030790a475', 'userIdAsEids': [ { 'source': 'criteo.com', 'uids': [ { 'id': 'CRITEO_ID', 'atype': 1 } ] }, { 'source': 'id5-sync.com', 'uids': [ { 'id': 'ID5_ID', 'atype': 1 } ], 'ext': { 'linkType': 0 } }, { 'source': 'adserver.org', 'uids': [ { 'id': 'TD_ID', 'atype': 1, 'ext': { 'rtiPartner': 'TDID' } } ] } ] } ]; let bidderRequest = { refererInfo: {referer: REFERER} } it('should criteo eid', function () { const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(request.data); expect(payload.sid).to.exist.and.to.equal(2); expect(payload.eids[0].source).to.exist.and.to.equal('criteo.com'); expect(payload.eids[0].uids[0].id).to.exist.and.to.equal('CRITEO_ID'); expect(payload.eids[1].source).to.exist.and.to.equal('id5-sync.com'); expect(payload.eids[1].uids[0].id).to.exist.and.to.equal('ID5_ID'); expect(payload.eids[2].source).to.exist.and.to.equal('adserver.org'); expect(payload.eids[2].uids[0].id).to.exist.and.to.equal('TD_ID'); }); }); describe('buildRequests', function () { const SITE_ID = 2; const REFERER = 'https://www.examplereferer.com'; let bidRequests = [ { 'bidder': 'nobid', 'params': { 'siteId': SITE_ID }, 'adUnitCode': 'adunit-code', 'sizes': [[300, 250]], 'bidId': '30b31c1838de1e', 'bidderRequestId': '22edbae2733bf6', 'auctionId': '1d1a030790a475', } ]; let bidderRequest = { refererInfo: {referer: REFERER} } it('should add source and version to the tag', function () { const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(request.data); expect(payload.sid).to.equal(SITE_ID); expect(payload.l).to.exist.and.to.equal(encodeURIComponent(REFERER)); expect(payload.tt).to.exist; expect(payload.a).to.exist; expect(payload.t).to.exist; expect(payload.tz).to.exist; expect(payload.r).to.exist; expect(payload.lang).to.exist; expect(payload.ref).to.exist; expect(payload.gdpr).to.exist; }); it('sends bid request to ad size', function () { const request = spec.buildRequests(bidRequests); const payload = JSON.parse(request.data); expect(payload.a).to.exist; expect(payload.a.length).to.exist.and.to.equal(1); expect(payload.a[0].z[0][0]).to.equal(300); expect(payload.a[0].z[0][1]).to.equal(250); }); it('sends bid request to div id', function () { const request = spec.buildRequests(bidRequests); const payload = JSON.parse(request.data); expect(payload.a).to.exist; expect(payload.a[0].d).to.equal('adunit-code'); }); it('sends bid request to site id', function () { const request = spec.buildRequests(bidRequests); const payload = JSON.parse(request.data); expect(payload.a).to.exist; expect(payload.a[0].sid).to.equal(2); expect(payload.a[0].at).to.equal('banner'); expect(payload.a[0].params.siteId).to.equal(2); }); it('sends bid request to ad type', function () { const request = spec.buildRequests(bidRequests); const payload = JSON.parse(request.data); expect(payload.a).to.exist; expect(payload.a[0].at).to.equal('banner'); }); it('sends bid request to ENDPOINT via POST', function () { const request = spec.buildRequests(bidRequests); expect(request.url).to.contain('ads.servenobid.com/adreq'); expect(request.method).to.equal('POST'); }); it('should add gdpr consent information to the request', function () { let consentString = 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A=='; let bidderRequest = { 'bidderCode': 'nobid', 'auctionId': '1d1a030790a475', 'bidderRequestId': '22edbae2733bf6', 'timeout': 3000, 'gdprConsent': { consentString: consentString, gdprApplies: true } }; bidderRequest.bids = bidRequests; const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(request.data); expect(payload.gdpr).to.exist; expect(payload.gdpr.consentString).to.exist.and.to.equal(consentString); expect(payload.gdpr.consentRequired).to.exist.and.to.be.true; }); it('should add gdpr consent information to the request', function () { let bidderRequest = { 'bidderCode': 'nobid', 'auctionId': '1d1a030790a475', 'bidderRequestId': '22edbae2733bf6', 'timeout': 3000, 'gdprConsent': { gdprApplies: false } }; bidderRequest.bids = bidRequests; const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(request.data); expect(payload.gdpr).to.exist; expect(payload.gdpr.consentString).to.not.exist; expect(payload.gdpr.consentRequired).to.exist.and.to.be.false; }); it('should add usp consent information to the request', function () { let bidderRequest = { 'bidderCode': 'nobid', 'auctionId': '1d1a030790a475', 'bidderRequestId': '22edbae2733bf6', 'timeout': 3000, 'uspConsent': '1Y-N' }; bidderRequest.bids = bidRequests; const request = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(request.data); expect(payload.usp).to.exist; expect(payload.usp).to.exist.and.to.equal('1Y-N'); }); }); describe('buildRequestsRefreshCount', function () { const SITE_ID = 2; const REFERER = 'https://www.examplereferer.com'; let bidRequests = [ { 'bidder': 'nobid', 'params': { 'siteId': SITE_ID }, 'adUnitCode': 'adunit-code', 'sizes': [[300, 250]], 'bidId': '30b31c1838de1e', 'bidderRequestId': '22edbae2733bf6', 'auctionId': '1d1a030790a475', } ]; let bidderRequest = { refererInfo: {referer: REFERER} } it('should refreshCount = 4', function () { nobid.refreshLimit = 2; nobid.refreshCount = 0; spec.buildRequests(bidRequests, bidderRequest); spec.buildRequests(bidRequests, bidderRequest); spec.buildRequests(bidRequests, bidderRequest); const request = spec.buildRequests(bidRequests, bidderRequest); expect(nobid.refreshCount).to.equal(3); expect(typeof request).to.equal('undefined'); }); }); describe('interpretResponse', function () { const CREATIVE_ID_300x250 = 'CREATIVE-100'; const ADUNIT_300x250 = 'ADUNIT-1'; const ADMARKUP_300x250 = 'ADMARKUP-300x250'; const PRICE_300x250 = 0.51; const REQUEST_ID = '3db3773286ee59'; const DEAL_ID = 'deal123'; let response = { country: 'US', ip: '68.83.15.75', device: 'COMPUTER', site: 2, bids: [ {id: 1, bdrid: 101, divid: ADUNIT_300x250, dealid: DEAL_ID, creativeid: CREATIVE_ID_300x250, size: {'w': 300, 'h': 250}, adm: ADMARKUP_300x250, price: '' + PRICE_300x250 } ] }; it('should get correct bid response', function () { let expectedResponse = [ { requestId: REQUEST_ID, cpm: PRICE_300x250, width: 300, height: 250, creativeId: CREATIVE_ID_300x250, dealId: DEAL_ID, currency: 'USD', netRevenue: true, ttl: 300, ad: ADMARKUP_300x250, mediaType: 'banner' } ]; let bidderRequest = { bids: [{ bidId: REQUEST_ID, adUnitCode: ADUNIT_300x250 }] } let result = spec.interpretResponse({ body: response }, {bidderRequest: bidderRequest}); expect(result.length).to.equal(expectedResponse.length); expect(Object.keys(result[0])).to.have.members(Object.keys(expectedResponse[0])); expect(result[0].requestId).to.equal(expectedResponse[0].requestId); expect(result[0].cpm).to.equal(expectedResponse[0].cpm); }); it('should get correct empty response', function () { let bidderRequest = { bids: [{ bidId: REQUEST_ID, adUnitCode: ADUNIT_300x250 + '1' }] } let result = spec.interpretResponse({ body: response }, {bidderRequest: bidderRequest}); expect(result.length).to.equal(0); }); it('should get correct deal id', function () { let expectedResponse = [ { requestId: REQUEST_ID, cpm: PRICE_300x250, width: 300, height: 250, creativeId: CREATIVE_ID_300x250, dealId: DEAL_ID, currency: 'USD', netRevenue: true, ttl: 300, ad: ADMARKUP_300x250, mediaType: 'banner' } ]; let bidderRequest = { bids: [{ bidId: REQUEST_ID, adUnitCode: ADUNIT_300x250 }] } let result = spec.interpretResponse({ body: response }, {bidderRequest: bidderRequest}); expect(result.length).to.equal(expectedResponse.length); expect(result[0].dealId).to.equal(expectedResponse[0].dealId); }); }); describe('interpretResponseWithRefreshLimit', function () { const CREATIVE_ID_300x250 = 'CREATIVE-100'; const ADUNIT_300x250 = 'ADUNIT-1'; const ADMARKUP_300x250 = 'ADMARKUP-300x250'; const PRICE_300x250 = 0.51; const REQUEST_ID = '3db3773286ee59'; const DEAL_ID = 'deal123'; const REFRESH_LIMIT = 3; let response = { country: 'US', ip: '68.83.15.75', device: 'COMPUTER', site: 2, rlimit: REFRESH_LIMIT, bids: [ {id: 1, bdrid: 101, divid: ADUNIT_300x250, dealid: DEAL_ID, creativeid: CREATIVE_ID_300x250, size: {'w': 300, 'h': 250}, adm: ADMARKUP_300x250, price: '' + PRICE_300x250 } ] }; it('should refreshLimit be respected', function () { let bidderRequest = { bids: [{ bidId: REQUEST_ID, adUnitCode: ADUNIT_300x250 }] } let result = spec.interpretResponse({ body: response }, {bidderRequest: bidderRequest}); expect(nobid.refreshLimit).to.equal(REFRESH_LIMIT); }); }); describe('interpretResponseWithMeta', function () { const CREATIVE_ID_300x250 = 'CREATIVE-100'; const ADUNIT_300x250 = 'ADUNIT-1'; const ADMARKUP_300x250 = 'ADMARKUP-300x250'; const PRICE_300x250 = 0.51; const REQUEST_ID = '3db3773286ee59'; const DEAL_ID = 'deal123'; const ADOMAINS = ['adomain1', 'adomain2']; let response = { country: 'US', ip: '68.83.15.75', device: 'COMPUTER', site: 2, bids: [ {id: 1, bdrid: 101, divid: ADUNIT_300x250, dealid: DEAL_ID, creativeid: CREATIVE_ID_300x250, size: {'w': 300, 'h': 250}, adm: ADMARKUP_300x250, price: '' + PRICE_300x250, meta: { advertiserDomains: ADOMAINS } } ] }; it('should meta.advertiserDomains be respected', function () { let bidderRequest = { bids: [{ bidId: REQUEST_ID, adUnitCode: ADUNIT_300x250 }] } let result = spec.interpretResponse({ body: response }, {bidderRequest: bidderRequest}); expect(result[0].meta.advertiserDomains).to.equal(ADOMAINS); }); }); describe('buildRequestsWithSupplyChain', function () { const SITE_ID = 2; let bidRequests = [ { bidder: 'nobid', params: { siteId: SITE_ID }, adUnitCode: 'adunit-code', sizes: [[300, 250]], bidId: '30b31c1838de1e', bidderRequestId: '22edbae2733bf6', auctionId: '1d1a030790a475', coppa: true, schain: { validation: 'strict', config: { ver: '1.0', complete: 1, nodes: [ { asi: 'indirectseller.com', sid: '00001', name: 'name.com', hp: 1 } ] } } } ]; it('schain exist', function () { const request = spec.buildRequests(bidRequests); const payload = JSON.parse(request.data); expect(payload.schain).to.exist; expect(payload.schain.validation).to.exist.and.to.equal('strict'); expect(payload.schain.config.ver).to.exist.and.to.equal('1.0'); expect(payload.schain.config.complete).to.exist.and.to.equal(1); expect(payload.schain.config.nodes[0].asi).to.exist.and.to.equal('indirectseller.com'); expect(payload.schain.config.nodes[0].sid).to.exist.and.to.equal('00001'); expect(payload.schain.config.nodes[0].name).to.exist.and.to.equal('name.com'); expect(payload.schain.config.nodes[0].hp).to.exist.and.to.equal(1); expect(payload.coppa).to.exist; expect(payload.coppa).to.exist.and.to.be.true; expect(payload.a).to.be.lengthOf(1); expect(request.method).to.equal('POST'); }); }); describe('interpretResponseWithUserLimit', function () { const CREATIVE_ID_300x250 = 'CREATIVE-100'; const ADUNIT_300x250 = 'ADUNIT-1'; const ADMARKUP_300x250 = 'ADMARKUP-300x250'; const PRICE_300x250 = 0.51; const REQUEST_ID = '3db3773286ee59'; const DEAL_ID = 'deal123'; const ULIMIT = 1; let response = { country: 'US', ip: '68.83.15.75', device: 'COMPUTER', site: 2, ublock: ULIMIT, bids: [ {id: 1, bdrid: 101, divid: ADUNIT_300x250, dealid: DEAL_ID, creativeid: CREATIVE_ID_300x250, size: {'w': 300, 'h': 250}, adm: ADMARKUP_300x250, price: '' + PRICE_300x250 } ] }; it('should ULimit be respected', function () { const bidderRequest = { bids: [{ bidId: REQUEST_ID, adUnitCode: ADUNIT_300x250 }] } const bidRequests = [ { 'bidder': 'nobid', 'params': { 'siteId': 2 }, 'adUnitCode': 'adunit-code', 'sizes': [[300, 250]], 'bidId': '30b31c1838de1e', 'bidderRequestId': '22edbae2733bf6', 'auctionId': '1d1a030790a475', } ]; spec.interpretResponse({ body: response }, {bidderRequest: bidderRequest}); let request = spec.buildRequests(bidRequests, bidderRequest); expect(request).to.equal(undefined); }); }); describe('getUserSyncs', function () { const GDPR_CONSENT_STRING = 'GDPR_CONSENT_STRING'; it('should get correct user sync when iframeEnabled', function () { let pixel = spec.getUserSyncs({iframeEnabled: true}) expect(pixel[0].type).to.equal('iframe'); expect(pixel[0].url).to.equal('https://public.servenobid.com/sync.html'); }); it('should get correct user sync when iframeEnabled and pixelEnabled', function () { let pixel = spec.getUserSyncs({iframeEnabled: true, pixelEnabled: true}) expect(pixel[0].type).to.equal('iframe'); expect(pixel[0].url).to.equal('https://public.servenobid.com/sync.html'); }); it('should get correct user sync when iframeEnabled', function () { let pixel = spec.getUserSyncs({iframeEnabled: true}, {}, {gdprApplies: true, consentString: GDPR_CONSENT_STRING}) expect(pixel[0].type).to.equal('iframe'); expect(pixel[0].url).to.equal('https://public.servenobid.com/sync.html?gdpr=1&gdpr_consent=' + GDPR_CONSENT_STRING); }); it('should get correct user sync when !iframeEnabled', function () { let pixel = spec.getUserSyncs({iframeEnabled: false}) expect(pixel.length).to.equal(0); }); it('should get correct user sync when !iframeEnabled and pixelEnabled', function () { let pixel = spec.getUserSyncs({iframeEnabled: false, pixelEnabled: true}, [{body: {syncs: ['sync_url']}}]) expect(pixel.length).to.equal(1); expect(pixel[0].type).to.equal('image'); expect(pixel[0].url).to.equal('sync_url'); }); it('should get correct user sync when !iframeEnabled', function () { let pixel = spec.getUserSyncs({}) expect(pixel.length).to.equal(0); }); }); describe('onTimeout', function (syncOptions) { it('should increment timeoutTotal', function () { let timeoutTotal = spec.onTimeout() expect(timeoutTotal).to.equal(1); }); }); describe('onBidWon', function (syncOptions) { it('should increment bidWonTotal', function () { let bidWonTotal = spec.onBidWon() expect(bidWonTotal).to.equal(1); }); }); });