From 64a171567e3e6327ffce59e5b44eb84bedc71b79 Mon Sep 17 00:00:00 2001 From: Egor Gordeev Date: Mon, 7 Dec 2020 22:46:00 +0400 Subject: [PATCH 1/9] EX-2549 Pass segments parameter as imp.ext.dealids array --- modules/sovrnBidAdapter.js | 8 +++++++ test/spec/modules/sovrnBidAdapter_spec.js | 26 +++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index 62f5e85779e..bf43cd711aa 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -88,6 +88,14 @@ export const spec = { }; } + let segmentsString = utils.getBidIdParameter('segments', bid.params) + + if (segmentsStr) { + let dealids = segmentsStr.split(','); + utils.deepSetValue(sovrnBidReq, 'imp.ext.dealids', dealids); + } + + if (bidderRequest.gdprConsent) { utils.deepSetValue(sovrnBidReq, 'regs.ext.gdpr', +bidderRequest.gdprConsent.gdprApplies); utils.deepSetValue(sovrnBidReq, 'user.ext.consent', bidderRequest.gdprConsent.consentString) diff --git a/test/spec/modules/sovrnBidAdapter_spec.js b/test/spec/modules/sovrnBidAdapter_spec.js index 983ade4dd14..80018ad9647 100644 --- a/test/spec/modules/sovrnBidAdapter_spec.js +++ b/test/spec/modules/sovrnBidAdapter_spec.js @@ -276,6 +276,32 @@ describe('sovrnBidAdapter', function() { expect(data.user.ext.tpid[0].uid).to.equal('A_CRITEO_ID') expect(data.user.ext.prebid_criteoid).to.equal('A_CRITEO_ID') }); + + it('should ignore empty segments', function() { + const payload = JSON.parse(request.data) + expect(payload.imp[0].ext.dealids).to.be.empty + }) + + it('should pass segments param as dealids array', function() { + const segmentsRequests = [{ + 'bidder': 'sovrn', + 'params': { + 'segments': 'test1,test2' + }, + 'adUnitCode': 'adunit-code', + 'sizes': [ + [300, 250], + [300, 600] + ], + 'bidId': '30b31c1838de1e', + 'bidderRequestId': '22edbae2733bf6', + 'auctionId': '1d1a030790a475' + }]; + const request = spec.buildRequests(segmentsRequests, bidderRequest) + const payload = JSON.parse(request.data) + expect(payload.imp[0].ext.dealids[0]).to.equal('test1') + expect(payload.imp[0].ext.dealids[1]).to.equal('test2') + }) }); describe('interpretResponse', function () { From d8b8d28babe947ee87abe6699cef966b7eeaa058 Mon Sep 17 00:00:00 2001 From: Egor Gordeev Date: Tue, 8 Dec 2020 08:30:56 +0400 Subject: [PATCH 2/9] EX-2549 Address Jon's feedback --- modules/sovrnBidAdapter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index bf43cd711aa..1d5de65f521 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -88,10 +88,10 @@ export const spec = { }; } - let segmentsString = utils.getBidIdParameter('segments', bid.params) + const segmentsString = utils.getBidIdParameter('segments', bid.params) if (segmentsStr) { - let dealids = segmentsStr.split(','); + const dealids = segmentsStr.split(','); utils.deepSetValue(sovrnBidReq, 'imp.ext.dealids', dealids); } From 21c5ac7ec57abf393a867beca74fed936d21c892 Mon Sep 17 00:00:00 2001 From: Egor Gordeev Date: Tue, 8 Dec 2020 16:09:33 +0400 Subject: [PATCH 3/9] EX-2549 Reworked the solution --- modules/sovrnBidAdapter.js | 23 +++++++++++++---------- test/spec/modules/sovrnBidAdapter_spec.js | 2 +- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index 1d5de65f521..80d9627ec22 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -30,6 +30,7 @@ export const spec = { let eids; let tpid = [] let criteoId; + let imp; utils._each(bidReqs, function (bid) { if (!eids && bid.userId) { @@ -53,7 +54,7 @@ export const spec = { bidSizes = ((utils.isArray(bidSizes) && utils.isArray(bidSizes[0])) ? bidSizes : [bidSizes]) bidSizes = bidSizes.filter(size => utils.isArray(size)) const processedSizes = bidSizes.map(size => ({w: parseInt(size[0], 10), h: parseInt(size[1], 10)})) - sovrnImps.push({ + imp = { adunitcode: bid.adUnitCode, id: bid.bidId, banner: { @@ -63,7 +64,17 @@ export const spec = { }, tagid: String(utils.getBidIdParameter('tagid', bid.params)), bidfloor: utils.getBidIdParameter('bidfloor', bid.params) - }); + } + + sovrnImps.push(imp); + + const segmentsString = utils.getBidIdParameter('segments', bid.params) + + if (segmentsString) { + imp.ext = { + dealids: segmentsString.split(',') + } + } }); const page = bidderRequest.refererInfo.referer @@ -88,14 +99,6 @@ export const spec = { }; } - const segmentsString = utils.getBidIdParameter('segments', bid.params) - - if (segmentsStr) { - const dealids = segmentsStr.split(','); - utils.deepSetValue(sovrnBidReq, 'imp.ext.dealids', dealids); - } - - if (bidderRequest.gdprConsent) { utils.deepSetValue(sovrnBidReq, 'regs.ext.gdpr', +bidderRequest.gdprConsent.gdprApplies); utils.deepSetValue(sovrnBidReq, 'user.ext.consent', bidderRequest.gdprConsent.consentString) diff --git a/test/spec/modules/sovrnBidAdapter_spec.js b/test/spec/modules/sovrnBidAdapter_spec.js index 80018ad9647..f3fc11834fa 100644 --- a/test/spec/modules/sovrnBidAdapter_spec.js +++ b/test/spec/modules/sovrnBidAdapter_spec.js @@ -279,7 +279,7 @@ describe('sovrnBidAdapter', function() { it('should ignore empty segments', function() { const payload = JSON.parse(request.data) - expect(payload.imp[0].ext.dealids).to.be.empty + expect(payload.imp[0].ext).to.be.undefined }) it('should pass segments param as dealids array', function() { From 20a3c53928f582e951b01c476bdfa5dccb800dcf Mon Sep 17 00:00:00 2001 From: Egor Gordeev Date: Tue, 8 Dec 2020 18:48:10 +0400 Subject: [PATCH 4/9] EX-2549 Blackbird compatibility --- modules/sovrnBidAdapter.js | 2 +- test/spec/modules/sovrnBidAdapter_spec.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index 80d9627ec22..ce7874308fb 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -72,7 +72,7 @@ export const spec = { if (segmentsString) { imp.ext = { - dealids: segmentsString.split(',') + deals: segmentsString.split(',') } } }); diff --git a/test/spec/modules/sovrnBidAdapter_spec.js b/test/spec/modules/sovrnBidAdapter_spec.js index f3fc11834fa..e14331f9145 100644 --- a/test/spec/modules/sovrnBidAdapter_spec.js +++ b/test/spec/modules/sovrnBidAdapter_spec.js @@ -299,8 +299,8 @@ describe('sovrnBidAdapter', function() { }]; const request = spec.buildRequests(segmentsRequests, bidderRequest) const payload = JSON.parse(request.data) - expect(payload.imp[0].ext.dealids[0]).to.equal('test1') - expect(payload.imp[0].ext.dealids[1]).to.equal('test2') + expect(payload.imp[0].ext.deals[0]).to.equal('test1') + expect(payload.imp[0].ext.deals[1]).to.equal('test2') }) }); From 2b452a021ae880f82c5c9dfa8305cda7bc1aa7b7 Mon Sep 17 00:00:00 2001 From: Egor Gordeev Date: Tue, 8 Dec 2020 20:39:04 +0400 Subject: [PATCH 5/9] EX-2549 Address Jon's comments --- modules/sovrnBidAdapter.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index ce7874308fb..2b70afdb8a7 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -30,7 +30,6 @@ export const spec = { let eids; let tpid = [] let criteoId; - let imp; utils._each(bidReqs, function (bid) { if (!eids && bid.userId) { @@ -54,7 +53,7 @@ export const spec = { bidSizes = ((utils.isArray(bidSizes) && utils.isArray(bidSizes[0])) ? bidSizes : [bidSizes]) bidSizes = bidSizes.filter(size => utils.isArray(size)) const processedSizes = bidSizes.map(size => ({w: parseInt(size[0], 10), h: parseInt(size[1], 10)})) - imp = { + const imp = { adunitcode: bid.adUnitCode, id: bid.bidId, banner: { @@ -66,8 +65,6 @@ export const spec = { bidfloor: utils.getBidIdParameter('bidfloor', bid.params) } - sovrnImps.push(imp); - const segmentsString = utils.getBidIdParameter('segments', bid.params) if (segmentsString) { @@ -75,6 +72,8 @@ export const spec = { deals: segmentsString.split(',') } } + + sovrnImps.push(imp); }); const page = bidderRequest.refererInfo.referer From f58d3552c70b967103814566e458d386fbd1cc53 Mon Sep 17 00:00:00 2001 From: Egor Gordeev Date: Wed, 9 Dec 2020 14:45:55 +0400 Subject: [PATCH 6/9] EX-2549 Addressed upstream PR comments --- modules/sovrnBidAdapter.js | 2 +- test/spec/modules/sovrnBidAdapter_spec.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index 2b70afdb8a7..8f8158fd0c9 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -69,7 +69,7 @@ export const spec = { if (segmentsString) { imp.ext = { - deals: segmentsString.split(',') + deals: segmentsString.split(',').map(deal => deal.trim()) } } diff --git a/test/spec/modules/sovrnBidAdapter_spec.js b/test/spec/modules/sovrnBidAdapter_spec.js index e14331f9145..769be73a272 100644 --- a/test/spec/modules/sovrnBidAdapter_spec.js +++ b/test/spec/modules/sovrnBidAdapter_spec.js @@ -282,11 +282,11 @@ describe('sovrnBidAdapter', function() { expect(payload.imp[0].ext).to.be.undefined }) - it('should pass segments param as dealids array', function() { + it('should pass the segments param value as trimmed deal ids array', function() { const segmentsRequests = [{ 'bidder': 'sovrn', 'params': { - 'segments': 'test1,test2' + 'segments': ' test1,test2 ' }, 'adUnitCode': 'adunit-code', 'sizes': [ From bb1bf3899d341af82fb5b98550500daedd48587f Mon Sep 17 00:00:00 2001 From: John Rosendahl Date: Tue, 29 Dec 2020 14:38:32 -0700 Subject: [PATCH 7/9] added floor module support --- modules/sovrnBidAdapter.js | 16 +++++++--- test/spec/modules/sovrnBidAdapter_spec.js | 39 +++++++++++++++++++++-- 2 files changed, 49 insertions(+), 6 deletions(-) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index 8f8158fd0c9..cad66536e1e 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -45,14 +45,22 @@ export const spec = { } if (bid.schain) { - schain = schain || bid.schain; + schain = schain || bid.schain } - iv = iv || utils.getBidIdParameter('iv', bid.params); + iv = iv || utils.getBidIdParameter('iv', bid.params) - let bidSizes = (bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes) || bid.sizes; + let bidSizes = (bid.mediaTypes && bid.mediaTypes.banner && bid.mediaTypes.banner.sizes) || bid.sizes bidSizes = ((utils.isArray(bidSizes) && utils.isArray(bidSizes[0])) ? bidSizes : [bidSizes]) bidSizes = bidSizes.filter(size => utils.isArray(size)) const processedSizes = bidSizes.map(size => ({w: parseInt(size[0], 10), h: parseInt(size[1], 10)})) + + const floorInfo = bid.getFloor ? bid.getFloor({ + currency: 'USD', + mediaType: 'banner', + size: '*' + }) : {} + floorInfo.floor = floorInfo.floor || utils.getBidIdParameter('bidfloor', bid.params) + const imp = { adunitcode: bid.adUnitCode, id: bid.bidId, @@ -62,7 +70,7 @@ export const spec = { h: 1, }, tagid: String(utils.getBidIdParameter('tagid', bid.params)), - bidfloor: utils.getBidIdParameter('bidfloor', bid.params) + bidfloor: floorInfo.floor } const segmentsString = utils.getBidIdParameter('segments', bid.params) diff --git a/test/spec/modules/sovrnBidAdapter_spec.js b/test/spec/modules/sovrnBidAdapter_spec.js index 769be73a272..618a5102943 100644 --- a/test/spec/modules/sovrnBidAdapter_spec.js +++ b/test/spec/modules/sovrnBidAdapter_spec.js @@ -4,11 +4,26 @@ import {newBidder} from 'src/adapters/bidderFactory.js'; const ENDPOINT = `https://ap.lijit.com/rtb/bid?src=$$REPO_AND_VERSION$$`; +const adUnitBidRequest = { + 'bidder': 'sovrn', + 'params': { + 'tagid': '403370' + }, + 'adUnitCode': 'adunit-code', + 'sizes': [ + [300, 250], + [300, 600] + ], + 'bidId': '30b31c1838de1e', + 'bidderRequestId': '22edbae2733bf6', + 'auctionId': '1d1a030790a475', +} + describe('sovrnBidAdapter', function() { const adapter = newBidder(spec); describe('isBidRequestValid', function () { - let bid = { + const bid = { 'bidder': 'sovrn', 'params': { 'tagid': '403370' @@ -296,12 +311,32 @@ describe('sovrnBidAdapter', function() { 'bidId': '30b31c1838de1e', 'bidderRequestId': '22edbae2733bf6', 'auctionId': '1d1a030790a475' - }]; + }] const request = spec.buildRequests(segmentsRequests, bidderRequest) const payload = JSON.parse(request.data) expect(payload.imp[0].ext.deals[0]).to.equal('test1') expect(payload.imp[0].ext.deals[1]).to.equal('test2') }) + it('should use the floor provided from the floor module if present', function() { + const floorBid = {...adUnitBidRequest, getFloor: () => ({currency: 'USD', floor: 1.10})} + floorBid.params = { + tagid: 1234, + bidfloor: 2.00 + } + const request = spec.buildRequests([floorBid], bidderRequest) + const payload = JSON.parse(request.data) + expect(payload.imp[0].bidfloor).to.equal(1.10) + }) + it('should use the floor from the param if there is no floor from the floor module', function() { + const floorBid = {...adUnitBidRequest, getFloor: () => ({})} + floorBid.params = { + tagid: 1234, + bidfloor: 2.00 + } + const request = spec.buildRequests([floorBid], bidderRequest) + const payload = JSON.parse(request.data) + expect(payload.imp[0].bidfloor).to.equal(2.00) + }) }); describe('interpretResponse', function () { From 77cbfaca7411b92309706b0251d9aa7878735603 Mon Sep 17 00:00:00 2001 From: John Rosendahl Date: Wed, 13 Jan 2021 09:46:32 -0700 Subject: [PATCH 8/9] added function check --- modules/sovrnBidAdapter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index 279f7b8852a..c1bffe30f01 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -53,7 +53,7 @@ export const spec = { bidSizes = ((utils.isArray(bidSizes) && utils.isArray(bidSizes[0])) ? bidSizes : [bidSizes]) bidSizes = bidSizes.filter(size => utils.isArray(size)) const processedSizes = bidSizes.map(size => ({w: parseInt(size[0], 10), h: parseInt(size[1], 10)})) - const floorInfo = bid.getFloor ? bid.getFloor({ + const floorInfo = (bid.getFloor && typeof bid.getFloor === 'function') ? bid.getFloor({ currency: 'USD', mediaType: 'banner', size: '*' From 75ecd31ea659136b5cc94f5f684a1d648a685d7e Mon Sep 17 00:00:00 2001 From: John Rosendahl Date: Wed, 13 Jan 2021 12:15:44 -0700 Subject: [PATCH 9/9] rerun test --- modules/sovrnBidAdapter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/sovrnBidAdapter.js b/modules/sovrnBidAdapter.js index c1bffe30f01..9ec4d339753 100644 --- a/modules/sovrnBidAdapter.js +++ b/modules/sovrnBidAdapter.js @@ -14,7 +14,7 @@ export const spec = { * @return boolean for whether or not a bid is valid */ isBidRequestValid: function(bid) { - return !!(bid.params.tagid && !isNaN(parseFloat(bid.params.tagid)) && isFinite(bid.params.tagid)); + return !!(bid.params.tagid && !isNaN(parseFloat(bid.params.tagid)) && isFinite(bid.params.tagid)) }, /**