From d5d61ca78a772f8df7e2f64e2768cc638ebf485d Mon Sep 17 00:00:00 2001 From: Jason Snellbaker Date: Mon, 11 Apr 2022 15:35:13 -0400 Subject: [PATCH] appnexus bid adapter - support mediaTypes pos field --- modules/appnexusBidAdapter.js | 7 +++ test/spec/modules/appnexusBidAdapter_spec.js | 51 +++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/modules/appnexusBidAdapter.js b/modules/appnexusBidAdapter.js index 2758fc2d03a..418b8e6fe2e 100644 --- a/modules/appnexusBidAdapter.js +++ b/modules/appnexusBidAdapter.js @@ -802,6 +802,13 @@ function bidToTag(bid) { } if (bid.params.position) { tag.position = { 'above': 1, 'below': 2 }[bid.params.position] || 0; + } else { + let mediaTypePos = deepAccess(bid, `mediaTypes.banner.pos`) || deepAccess(bid, `mediaTypes.video.pos`); + // only support unknown, atf, and btf values for position at this time + if (mediaTypePos === 0 || mediaTypePos === 1 || mediaTypePos === 3) { + // ortb spec treats btf === 3, but our system interprets btf === 2; so converting the ortb value here for consistency + tag.position = (mediaTypePos === 3) ? 2 : mediaTypePos; + } } if (bid.params.trafficSourceCode) { tag.traffic_source_code = bid.params.trafficSourceCode; diff --git a/test/spec/modules/appnexusBidAdapter_spec.js b/test/spec/modules/appnexusBidAdapter_spec.js index 11e92a1af2e..9ee236ed62a 100644 --- a/test/spec/modules/appnexusBidAdapter_spec.js +++ b/test/spec/modules/appnexusBidAdapter_spec.js @@ -100,6 +100,55 @@ describe('AppNexusAdapter', function () { expect(payload.tags[0].private_sizes).to.deep.equal([{width: 300, height: 250}]); }); + it('should add position in request', function() { + // set from bid.params + let bidRequest = deepClone(bidRequests[0]); + bidRequest.params.position = 'above'; + + const request = spec.buildRequests([bidRequest]); + const payload = JSON.parse(request.data); + + expect(payload.tags[0].position).to.exist; + expect(payload.tags[0].position).to.deep.equal(1); + + // set from mediaTypes.banner.pos = 1 + bidRequest = deepClone(bidRequests[0]); + bidRequest.mediaTypes = { + banner: { pos: 1 } + }; + + const request2 = spec.buildRequests([bidRequest]); + const payload2 = JSON.parse(request2.data); + + expect(payload2.tags[0].position).to.exist; + expect(payload2.tags[0].position).to.deep.equal(1); + + // set from mediaTypes.video.pos = 3 + bidRequest = deepClone(bidRequests[0]); + bidRequest.mediaTypes = { + video: { pos: 3 } + }; + + const request3 = spec.buildRequests([bidRequest]); + const payload3 = JSON.parse(request3.data); + + expect(payload3.tags[0].position).to.exist; + expect(payload3.tags[0].position).to.deep.equal(2); + + // bid.params trumps mediatypes + bidRequest = deepClone(bidRequests[0]); + bidRequest.params.position = 'above'; + bidRequest.mediaTypes = { + banner: { pos: 3 } + }; + + const request4 = spec.buildRequests([bidRequest]); + const payload4 = JSON.parse(request4.data); + + expect(payload4.tags[0].position).to.exist; + expect(payload4.tags[0].position).to.deep.equal(1); + }); + it('should add publisher_id in request', function() { let bidRequest = Object.assign({}, bidRequests[0], @@ -116,7 +165,7 @@ describe('AppNexusAdapter', function () { expect(payload.tags[0].publisher_id).to.deep.equal(1231234); expect(payload.publisher_id).to.exist; expect(payload.publisher_id).to.deep.equal(1231234); - }) + }); it('should add source and verison to the tag', function () { const request = spec.buildRequests(bidRequests);