diff --git a/modules/mediasquareBidAdapter.js b/modules/mediasquareBidAdapter.js index c431fe2059e..819ff280e35 100644 --- a/modules/mediasquareBidAdapter.js +++ b/modules/mediasquareBidAdapter.js @@ -3,6 +3,7 @@ import {config} from '../src/config.js'; import {registerBidder} from '../src/adapters/bidderFactory.js'; import {BANNER, NATIVE, VIDEO} from '../src/mediaTypes.js'; import { convertOrtbRequestToProprietaryNative } from '../src/native.js'; +import {Renderer} from '../src/Renderer.js'; const BIDDER_CODE = 'mediasquare'; const BIDDER_URL_PROD = 'https://pbs-front.mediasquare.fr/' @@ -10,6 +11,8 @@ const BIDDER_URL_TEST = 'https://bidder-test.mediasquare.fr/' const BIDDER_ENDPOINT_AUCTION = 'msq_prebid'; const BIDDER_ENDPOINT_WINNING = 'winning'; +const OUTSTREAM_RENDERER_URL = 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js'; + export const spec = { code: BIDDER_CODE, gvlid: 791, @@ -40,11 +43,15 @@ export const spec = { const test = config.getConfig('debug') ? 1 : 0; let adunitValue = null; Object.keys(validBidRequests).forEach(key => { + floor = {}; adunitValue = validBidRequests[key]; if (typeof adunitValue.getFloor === 'function') { - floor = adunitValue.getFloor({currency: 'EUR', mediaType: '*', size: '*'}); - } else { - floor = {}; + if (Array.isArray(adunitValue.sizes)) { + adunitValue.sizes.forEach(value => { + let tmpFloor = adunitValue.getFloor({currency: 'USD', mediaType: '*', size: value}); + if (tmpFloor != {}) { floor[value.join('x')] = tmpFloor; } + }); + } } codes.push({ owner: adunitValue.params.owner, @@ -132,6 +139,7 @@ export const spec = { if ('url' in value['video']) { bidResponse['vastUrl'] = value['video']['url'] } if ('xml' in value['video']) { bidResponse['vastXml'] = value['video']['xml'] } bidResponse['mediaType'] = 'video'; + bidResponse['renderer'] = createRenderer(value, OUTSTREAM_RENDERER_URL); } if (value.hasOwnProperty('deal_id')) { bidResponse['dealId'] = value['deal_id']; } bidResponses.push(bidResponse); @@ -182,4 +190,35 @@ export const spec = { } } + +function outstreamRender(bid) { + bid.renderer.push(() => { + window.ANOutstreamVideo.renderAd({ + sizes: [bid.width, bid.height], + targetId: bid.adUnitCode, + adResponse: bid.adResponse, + rendererOptions: { + showBigPlayButton: false, + showProgressBar: 'bar', + showVolume: false, + allowFullscreen: true, + skippable: false, + content: bid.vastXml + } + }); + }); +} + +function createRenderer(bid, url) { + const renderer = Renderer.install({ + id: bid.bidId, + url: url, + loaded: false, + adUnitCode: bid.adUnitCode, + targetId: bid.adUnitCode + }); + renderer.setRender(outstreamRender); + return renderer; +} + registerBidder(spec); diff --git a/test/spec/modules/mediasquareBidAdapter_spec.js b/test/spec/modules/mediasquareBidAdapter_spec.js index eeab047a405..346d02d91d0 100644 --- a/test/spec/modules/mediasquareBidAdapter_spec.js +++ b/test/spec/modules/mediasquareBidAdapter_spec.js @@ -78,7 +78,8 @@ describe('MediaSquare bid adapter tests', function () { owner: 'test', code: 'publishername_atf_desktop_rg_pave' }, - getFloor: function (a) { return { currency: 'EUR', floor: 1.0 }; }, + sizes: [[300, 250]], + getFloor: function (a) { return { currency: 'USD', floor: 1.0 }; }, }]; var BID_RESPONSE = {'body': { 'responses': [{ @@ -142,7 +143,7 @@ describe('MediaSquare bid adapter tests', function () { const requestfloor = spec.buildRequests(FLOORS_PARAMS, DEFAULT_OPTIONS); const responsefloor = JSON.parse(requestfloor.data); expect(responsefloor.codes[0]).to.have.property('floor').exist; - expect(responsefloor.codes[0].floor).to.have.property('floor').and.to.equal(1.0); + expect(responsefloor.codes[0].floor).to.have.property('300x250').and.to.have.property('floor').and.to.equal(1); }); it('Verify parse response', function () { @@ -239,6 +240,7 @@ describe('MediaSquare bid adapter tests', function () { const bid = response[0]; expect(bid).to.have.property('vastXml'); expect(bid).to.have.property('vastUrl'); + expect(bid).to.have.property('renderer'); delete BID_RESPONSE.body.responses[0].video; }); });