it('should include all adserver targeting in cust_params if pbjs.enableSendAllBids is true', function () { const adUnitsCopy = utils.deepClone(adUnit); adUnitsCopy.bids.push({ 'bidder': 'testBidder2', 'params': { 'placementId': '9333431', 'video': { 'skipppable': false, 'playback_methods': ['auto_play_sound_off'] } } }); const bidCopy = utils.deepClone(bid); bidCopy.adserverTargeting = Object.assign(bidCopy.adserverTargeting, { hb_adid: 'ad_id', }); const url = parse(buildDfpVideoUrl({ adUnit: adUnitsCopy, bid: bidCopy, params: { 'iu': 'my/adUnit' } })); const queryObject = parseQS(url.query); const customParams = parseQS('?' + decodeURIComponent(queryObject.cust_params)); expect(customParams).to.have.property('hb_adid', 'ad_id'); expect(customParams).to.have.property('hb_uuid', bid.videoCacheKey); expect(customParams).to.have.property('hb_cache_id', bid.videoCacheKey); expect(customParams).to.have.property('hb_bidder_appnexus', 'appnexus'); expect(customParams).to.have.property('hb_bidder_testBidder2', 'testBidder2'); });
it('should include hb_uuid and hb_cache_id in cust_params when both keys are exluded from overwritten bidderSettings', function () { const bidCopy = utils.deepClone(bid); delete bidCopy.adserverTargeting.hb_uuid; delete bidCopy.adserverTargeting.hb_cache_id; const url = parse(buildDfpVideoUrl({ adUnit: adUnit, bid: bidCopy, params: { 'iu': 'my/adUnit' } })); const queryObject = parseQS(url.query); const customParams = parseQS('?' + decodeURIComponent(queryObject.cust_params)); expect(customParams).to.have.property('hb_uuid', bid.videoCacheKey); expect(customParams).to.have.property('hb_cache_id', bid.videoCacheKey); });
it('should include the cache key and adserver targeting in cust_params', () => { const bidCopy = Object.assign({ }, bid); bidCopy.adserverTargeting = { hb_adid: 'ad_id', }; const url = parse(buildDfpVideoUrl({ adUnit: adUnit, bid: bidCopy, params: { 'iu': 'my/adUnit' } })); const queryObject = parseQS(url.query); const customParams = parseQS('?' + decodeURIComponent(queryObject.cust_params)); expect(customParams).to.have.property('hb_adid', 'ad_id'); expect(customParams).to.have.property('hb_uuid', bid.videoCacheKey); });
it('overwrites url params when both url and params object are given', () => { const url = parse(buildDfpVideoUrl({ adUnit: adUnit, bid: bid, url: 'https://video.adserver.example/ads?sz=640x480&iu=/123/aduniturl&impl=s', params: { iu: 'my/adUnit' } })); const queryObject = parseQS(url.query); expect(queryObject.iu).to.equal('my/adUnit'); });
it('should include hb_uuid and hb_cache_id in cust params from overwritten standard bidderSettings', function () { const bidCopy = utils.deepClone(bid); bidCopy.adserverTargeting = Object.assign(bidCopy.adserverTargeting, { hb_uuid: 'def', hb_cache_id: 'def' }); const url = parse(buildDfpVideoUrl({ adUnit: adUnit, bid: bidCopy, params: { 'iu': 'my/adUnit' } })); const queryObject = parseQS(url.query); const customParams = parseQS('?' + decodeURIComponent(queryObject.cust_params)); expect(customParams).to.have.property('hb_uuid', 'def'); expect(customParams).to.have.property('hb_cache_id', 'def'); });
it('should override param defaults with user-provided ones', () => { const url = parse(buildDfpVideoUrl({ adUnit: adUnit, bid: bid, params: { 'iu': 'my/adUnit', 'output': 'vast', } })); expect(parseQS(url.query)).to.have.property('output', 'vast'); });
it('should merge the user-provided cust-params with the default ones when using url object', () => { const bidCopy = Object.assign({ }, bid); bidCopy.adserverTargeting = { hb_adid: 'ad_id', }; const url = parse(buildDfpVideoUrl({ adUnit: adUnit, bid: bidCopy, url: 'https://video.adserver.example/ads?sz=640x480&iu=/123/aduniturl&impl=s&cust_params=section%3dblog%26mykey%3dmyvalue' })); const queryObject = parseQS(url.query); const customParams = parseQS('?' + decodeURIComponent(queryObject.cust_params)); expect(customParams).to.have.property('hb_adid', 'ad_id'); expect(customParams).to.have.property('section', 'blog'); expect(customParams).to.have.property('mykey', 'myvalue'); expect(customParams).to.have.property('hb_uuid', 'abc'); expect(customParams).to.have.property('hb_cache_id', 'abc'); });
it('should merge the user-provided cust_params with the default ones', () => { const bidCopy = Object.assign({ }, bid); bidCopy.adserverTargeting = { hb_adid: 'ad_id', }; const url = parse(buildDfpVideoUrl({ adUnit: adUnit, bid: bidCopy, params: { 'iu': 'my/adUnit', cust_params: { 'my_targeting': 'foo', }, }, })); const queryObject = parseQS(url.query); const customParams = parseQS('?' + decodeURIComponent(queryObject.cust_params)); expect(customParams).to.have.property('hb_adid', 'ad_id'); expect(customParams).to.have.property('my_targeting', 'foo'); });
it('can take an adserver url as a parameter', () => { const bidCopy = Object.assign({ }, bid); bidCopy.vastUrl = 'vastUrl.example'; const url = parse(buildDfpVideoUrl({ adUnit: adUnit, bid: bidCopy, url: 'https://video.adserver.example/', })); expect(url.host).to.equal('video.adserver.example'); const queryObject = parseQS(url.query); expect(queryObject.description_url).to.equal('vastUrl.example'); });
it('should not overwrite an existing description_url for object input and cache disabled', () => { const bidCopy = Object.assign({}, bid); bidCopy.vastUrl = 'vastUrl.example'; const url = parse(buildDfpVideoUrl({ adUnit: adUnit, bid: bidCopy, params: { iu: 'my/adUnit', description_url: 'descriptionurl.example' } })); const queryObject = parseQS(url.query); expect(queryObject.description_url).to.equal('descriptionurl.example'); });
it('should make a legal request URL when given the required params', () => { const url = parse(buildDfpVideoUrl({ adUnit: adUnit, bid: bid, params: { 'iu': 'my/adUnit', 'description_url': 'someUrl.com', } })); expect(url.protocol).to.equal('https:'); expect(url.host).to.equal('pubads.g.doubleclick.net'); const queryParams = parseQS(url.query); expect(queryParams).to.have.property('correlator'); expect(queryParams).to.have.property('description_url', 'someUrl.com'); expect(queryParams).to.have.property('env', 'vp'); expect(queryParams).to.have.property('gdfp_req', '1'); expect(queryParams).to.have.property('iu', 'my/adUnit'); expect(queryParams).to.have.property('output', 'xml_vast3'); expect(queryParams).to.have.property('sz', '640x480'); expect(queryParams).to.have.property('unviewed_position_start', '1'); expect(queryParams).to.have.property('url'); });