diff --git a/modules/startioBidAdapter.js b/modules/startioBidAdapter.js index 621c342b8c..92493efffd 100644 --- a/modules/startioBidAdapter.js +++ b/modules/startioBidAdapter.js @@ -26,6 +26,11 @@ const converter = ortbConverter({ imp.bidfloorcur = 'USD'; } + const placementId = bidRequest.params?.placementId; + if (placementId != null) { + imp.tagid = String(placementId); + } + return imp; }, request(buildRequest, imps, bidderRequest, context) { @@ -41,6 +46,11 @@ const converter = ortbConverter({ } request.ext = request.ext || {}; request.ext.prebid = request.ext.prebid || {}; + request.ext.prebid.channel = { name: 'pbjs', version: '$prebid.version$' }; + + if (bidParams?.test) { + request.test = 1; + } const ortb = bidderRequest.ortb2; request.regs ??= {}; @@ -107,6 +117,10 @@ function isValidBidFloorCurrency(bid) { return !bid.ortb2Imp?.bidfloorcur || bid.ortb2Imp.bidfloorcur === 'USD'; } +function getEndpointUrl(bidRequest) { + return bidRequest.params?.testAdsEnabled ? `${ENDPOINT_URL}&testAdsEnabled=true` : ENDPOINT_URL; +} + export const spec = { code: BIDDER_CODE, supportedMediaTypes: [VIDEO, BANNER, NATIVE], @@ -124,7 +138,7 @@ export const spec = { return { method: METHOD, - url: ENDPOINT_URL, + url: getEndpointUrl(bidRequest), options: { contentType: 'text/plain', withCredentials: true, diff --git a/test/spec/modules/startioBidAdapter_spec.js b/test/spec/modules/startioBidAdapter_spec.js index 59de436848..5aa917132a 100644 --- a/test/spec/modules/startioBidAdapter_spec.js +++ b/test/spec/modules/startioBidAdapter_spec.js @@ -322,6 +322,47 @@ describe('Prebid Adapter: Startio', function () { expect(request.imp[0].banner.battr).to.deep.equal([3, 4]); }); + it('should advertise the prebid channel (name + version) so the endpoint can identify the version', function () { + const request = spec.buildRequests([DEFAULT_REQUEST_DATA], DEFAULT_BIDDER_REQUEST)[0].data; + + expect(request.ext.prebid.channel).to.be.an('object'); + expect(request.ext.prebid.channel.name).to.equal('pbjs'); + expect(request.ext.prebid.channel.version).to.be.a('string').that.is.not.empty; + }); + + it('should map params.placementId to imp.tagid', function () { + let bidRequest = deepClone(DEFAULT_REQUEST_DATA); + bidRequest.params.placementId = 'placement-abc'; + + const request = spec.buildRequests([bidRequest], DEFAULT_BIDDER_REQUEST)[0].data; + + expect(request.imp[0].tagid).to.equal('placement-abc'); + }); + + it('should set request.test only when params.test is truthy', function () { + let bidRequest = deepClone(DEFAULT_REQUEST_DATA); + + let request = spec.buildRequests([bidRequest], DEFAULT_BIDDER_REQUEST)[0].data; + expect(request.test).to.equal(0); + + bidRequest.params.test = true; + request = spec.buildRequests([bidRequest], DEFAULT_BIDDER_REQUEST)[0].data; + expect(request.test).to.equal(1); + }); + + it('should append testAdsEnabled=true to the endpoint only when params.testAdsEnabled is set', function () { + let bidRequest = deepClone(DEFAULT_REQUEST_DATA); + + let request = spec.buildRequests([bidRequest], DEFAULT_BIDDER_REQUEST)[0]; + expect(request.url).to.include('pbc-rtb.startappnetwork.com'); + expect(request.url).to.not.include('testAdsEnabled'); + + bidRequest.params.testAdsEnabled = true; + request = spec.buildRequests([bidRequest], DEFAULT_BIDDER_REQUEST)[0]; + expect(request.url).to.include('pbc-rtb.startappnetwork.com'); + expect(request.url).to.include('testAdsEnabled=true'); + }); + if (FEATURES.VIDEO) { it('should build request for video media type', function () { const bidRequest = VALID_MEDIA_TYPES_REQUESTS[VIDEO][0];