From 77e16d656f0e96d745c24a3fae64f46fb1b41d20 Mon Sep 17 00:00:00 2001 From: Susan Date: Thu, 25 Mar 2021 15:54:45 -0700 Subject: [PATCH 1/4] adds meta field to bidresponse --- modules/gumgumBidAdapter.js | 14 ++++- test/spec/modules/gumgumBidAdapter_spec.js | 63 ++++++++++++++-------- 2 files changed, 53 insertions(+), 24 deletions(-) diff --git a/modules/gumgumBidAdapter.js b/modules/gumgumBidAdapter.js index 9a01cd21fa4..3ea5cbd542a 100644 --- a/modules/gumgumBidAdapter.js +++ b/modules/gumgumBidAdapter.js @@ -388,6 +388,9 @@ function interpretResponse (serverResponse, bidRequest) { }, pag: { pvid: 0 + }, + meta: { + adomain: [] } } const { @@ -401,7 +404,10 @@ function interpretResponse (serverResponse, bidRequest) { pag: { pvid }, - jcsi + jcsi, + meta: { + adomain: advertiserDomains + } } = Object.assign(defaultResponse, serverResponseBody) let data = bidRequest.data || {} let product = data.pi @@ -409,6 +415,9 @@ function interpretResponse (serverResponse, bidRequest) { let isTestUnit = (product === 3 && data.si === 9) let sizes = utils.parseSizesInput(bidRequest.sizes) let [width, height] = sizes[0].split('x') + let metaData = { + advertiserDomains: advertiserDomains + } // return 1x1 when breakout expected if ((product === 2 || product === 5) && includes(sizes, '1x1')) { @@ -437,7 +446,8 @@ function interpretResponse (serverResponse, bidRequest) { netRevenue: true, requestId: bidRequest.id, ttl: TIME_TO_LIVE, - width + width, + meta: metaData }) } return bidResponses diff --git a/test/spec/modules/gumgumBidAdapter_spec.js b/test/spec/modules/gumgumBidAdapter_spec.js index 3f5d32bcef7..c798447df31 100644 --- a/test/spec/modules/gumgumBidAdapter_spec.js +++ b/test/spec/modules/gumgumBidAdapter_spec.js @@ -462,27 +462,30 @@ describe('gumgumAdapter', function () { describe('interpretResponse', function () { let serverResponse = { - 'ad': { - 'id': 29593, - 'width': 300, - 'height': 250, - 'ipd': 2000, - 'markup': '

I am an ad

', - 'ii': true, - 'du': null, - 'price': 0, - 'zi': 0, - 'impurl': 'http://g2.gumgum.com/ad/view', - 'clsurl': 'http://g2.gumgum.com/ad/close' + ad: { + id: 29593, + width: 300, + height: 250, + ipd: 2000, + markup: '

I am an ad

', + ii: true, + du: null, + price: 0, + zi: 0, + impurl: 'http://g2.gumgum.com/ad/view', + clsurl: 'http://g2.gumgum.com/ad/close' }, - 'pag': { - 't': 'ggumtest', - 'pvid': 'aa8bbb65-427f-4689-8cee-e3eed0b89eec', - 'css': 'html { overflow-y: auto }', - 'js': 'console.log("environment", env);' + pag: { + t: 'ggumtest', + pvid: 'aa8bbb65-427f-4689-8cee-e3eed0b89eec', + css: 'html { overflow-y: auto }', + js: 'console.log("environment", env);' }, - 'jcsi': { t: 0, rq: 8 }, - 'thms': 10000 + jcsi: { t: 0, rq: 8 }, + thms: 10000, + meta: { + adomain: ['advertiser.com'] + } } let bidRequest = { id: 12345, @@ -501,19 +504,35 @@ describe('gumgumAdapter', function () { requestId: 12345, width: '300', mediaType: BANNER, - ttl: 60 + ttl: 60, + meta: { + advertiserDomains: ['advertiser.com'] + } }; it('should get correct bid response', function () { expect(spec.interpretResponse({ body: serverResponse }, bidRequest)).to.deep.equal([expectedResponse]); }); + it('should set a default value for advertiserDomains if adomain is not found', function () { + const response = { ...serverResponse }; + delete response.meta; + + const expected = { ...expectedResponse }; + const meta = { advertiserDomains: [] }; + expected.meta = meta; + + expect(spec.interpretResponse({ body: response }, bidRequest)).to.deep.equal([expected]); + }); + it('should pass correct currency if found in bid response', function () { const cur = 'EURO'; - let response = Object.assign({}, serverResponse); - let expected = Object.assign({}, expectedResponse); + const response = { ...serverResponse }; response.ad.cur = cur; + + const expected = { ...expectedResponse }; expected.currency = cur; + expect(spec.interpretResponse({ body: response }, bidRequest)).to.deep.equal([expected]); }); From 1a659d39b935ef832a39e4bdb26186966fb4522c Mon Sep 17 00:00:00 2001 From: Susan Date: Thu, 25 Mar 2021 18:12:08 -0700 Subject: [PATCH 2/4] adds meta mediatype and advertiserdomain default --- modules/gumgumBidAdapter.js | 9 ++++-- test/spec/modules/gumgumBidAdapter_spec.js | 33 +++++++++++++--------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/modules/gumgumBidAdapter.js b/modules/gumgumBidAdapter.js index 3ea5cbd542a..606f8335a19 100644 --- a/modules/gumgumBidAdapter.js +++ b/modules/gumgumBidAdapter.js @@ -390,7 +390,8 @@ function interpretResponse (serverResponse, bidRequest) { pvid: 0 }, meta: { - adomain: [] + adomain: [], + mediaType: '' } } const { @@ -406,7 +407,8 @@ function interpretResponse (serverResponse, bidRequest) { }, jcsi, meta: { - adomain: advertiserDomains + adomain: advertiserDomains, + mediaType: type } } = Object.assign(defaultResponse, serverResponseBody) let data = bidRequest.data || {} @@ -416,7 +418,8 @@ function interpretResponse (serverResponse, bidRequest) { let sizes = utils.parseSizesInput(bidRequest.sizes) let [width, height] = sizes[0].split('x') let metaData = { - advertiserDomains: advertiserDomains + advertiserDomains: advertiserDomains || [], + mediaType: type || mediaType } // return 1x1 when breakout expected diff --git a/test/spec/modules/gumgumBidAdapter_spec.js b/test/spec/modules/gumgumBidAdapter_spec.js index c798447df31..2365fddd01f 100644 --- a/test/spec/modules/gumgumBidAdapter_spec.js +++ b/test/spec/modules/gumgumBidAdapter_spec.js @@ -461,7 +461,8 @@ describe('gumgumAdapter', function () { }) describe('interpretResponse', function () { - let serverResponse = { + const metaData = { adomain: ['advertiser.com'], mediaType: BANNER } + const serverResponse = { ad: { id: 29593, width: 300, @@ -483,18 +484,17 @@ describe('gumgumAdapter', function () { }, jcsi: { t: 0, rq: 8 }, thms: 10000, - meta: { - adomain: ['advertiser.com'] - } + meta: metaData } - let bidRequest = { + const bidRequest = { id: 12345, sizes: [[300, 250], [1, 1]], url: ENDPOINT, method: 'GET', pi: 3 } - let expectedResponse = { + const expectedMetaData = { advertiserDomains: ['advertiser.com'], mediaType: BANNER }; + const expectedResponse = { ad: '

I am an ad

', cpm: 0, creativeId: 29593, @@ -505,9 +505,7 @@ describe('gumgumAdapter', function () { width: '300', mediaType: BANNER, ttl: 60, - meta: { - advertiserDomains: ['advertiser.com'] - } + meta: expectedMetaData }; it('should get correct bid response', function () { @@ -515,12 +513,21 @@ describe('gumgumAdapter', function () { }); it('should set a default value for advertiserDomains if adomain is not found', function () { - const response = { ...serverResponse }; - delete response.meta; + const meta = { ...metaData }; + delete meta.adomain; + + const response = { ...serverResponse, meta }; + const expectedMeta = { ...expectedMetaData, advertiserDomains: [] }; + const expected = { ...expectedResponse, meta: expectedMeta }; + + expect(spec.interpretResponse({ body: response }, bidRequest)).to.deep.equal([expected]); + }); + it('should set a default value for meta.mediaType if mediaType is not found in the response', function () { + const meta = { ...metaData }; + delete meta.mediaType; + const response = { ...serverResponse, meta }; const expected = { ...expectedResponse }; - const meta = { advertiserDomains: [] }; - expected.meta = meta; expect(spec.interpretResponse({ body: response }, bidRequest)).to.deep.equal([expected]); }); From 3f19552ae516bbe153e3a80602c1d86b2507d1d5 Mon Sep 17 00:00:00 2001 From: Susan Date: Fri, 23 Apr 2021 10:52:39 -0700 Subject: [PATCH 3/4] use response sizes in bidresponse --- modules/gumgumBidAdapter.js | 11 ++++++++--- test/spec/modules/gumgumBidAdapter_spec.js | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/modules/gumgumBidAdapter.js b/modules/gumgumBidAdapter.js index 606f8335a19..4786fd04b15 100644 --- a/modules/gumgumBidAdapter.js +++ b/modules/gumgumBidAdapter.js @@ -384,7 +384,9 @@ function interpretResponse (serverResponse, bidRequest) { ad: { price: 0, id: 0, - markup: '' + markup: '', + width: 0, + height: 0 }, pag: { pvid: 0 @@ -399,7 +401,9 @@ function interpretResponse (serverResponse, bidRequest) { price: cpm, id: creativeId, markup, - cur + cur, + width: responseWidth, + height: responseHeight }, cw: wrapper, pag: { @@ -415,7 +419,8 @@ function interpretResponse (serverResponse, bidRequest) { let product = data.pi let mediaType = (product === 6 || product === 7) ? VIDEO : BANNER let isTestUnit = (product === 3 && data.si === 9) - let sizes = utils.parseSizesInput(bidRequest.sizes) + // use response sizes if available + let sizes = responseWidth && responseHeight ? [`${responseWidth}x${responseHeight}`] : utils.parseSizesInput(bidRequest.sizes) let [width, height] = sizes[0].split('x') let metaData = { advertiserDomains: advertiserDomains || [], diff --git a/test/spec/modules/gumgumBidAdapter_spec.js b/test/spec/modules/gumgumBidAdapter_spec.js index 2365fddd01f..a7b18a16173 100644 --- a/test/spec/modules/gumgumBidAdapter_spec.js +++ b/test/spec/modules/gumgumBidAdapter_spec.js @@ -564,6 +564,25 @@ describe('gumgumAdapter', function () { expect(result.length).to.equal(0); }); + it('uses response width and height', function () { + const result = spec.interpretResponse({ body: serverResponse }, bidRequest)[0]; + expect(result.width).to.equal(serverResponse.ad.width.toString()); + expect(result.height).to.equal(serverResponse.ad.height.toString()); + }); + + it('defaults to use bidRequest sizes when width and height are not found', function () { + const { ad, jcsi, pag, thms, meta } = serverResponse + const noAdSizes = { ...ad } + delete noAdSizes.width + delete noAdSizes.height + const responseWithoutSizes = { jcsi, pag, thms, meta, ad: noAdSizes } + const request = { ...bidRequest, sizes: [[100, 200]] } + const result = spec.interpretResponse({ body: responseWithoutSizes }, request)[0]; + + expect(result.width).to.equal(request.sizes[0][0].toString()) + expect(result.height).to.equal(request.sizes[0][1].toString()) + }); + it('returns 1x1 when eligible product and size available', function () { let inscreenBidRequest = { id: 12346, From a69b7a335a694aa85af673e7bff75f44e7a9db89 Mon Sep 17 00:00:00 2001 From: Susan Date: Wed, 28 Jul 2021 18:11:08 -0700 Subject: [PATCH 4/4] sends maxw and maxh query params for slot requests --- modules/gumgumBidAdapter.js | 86 ++++++---- test/spec/modules/gumgumBidAdapter_spec.js | 173 ++++++++++++--------- 2 files changed, 159 insertions(+), 100 deletions(-) diff --git a/modules/gumgumBidAdapter.js b/modules/gumgumBidAdapter.js index 9b4ec41049c..d375c98b127 100644 --- a/modules/gumgumBidAdapter.js +++ b/modules/gumgumBidAdapter.js @@ -19,7 +19,7 @@ const DELAY_REQUEST_TIME = 1800000; // setting to 30 mins let invalidRequestIds = {}; let browserParams = {}; -let pageViewId = null +let pageViewId = null; // TODO: potential 0 values for browserParams sent to ad server function _getBrowserParams(topWindowUrl) { @@ -28,12 +28,12 @@ function _getBrowserParams(topWindowUrl) { let topUrl let ggad let ns - function getNetworkSpeed () { + function getNetworkSpeed() { const connection = window.navigator && (window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection) const Mbps = connection && (connection.downlink || connection.bandwidth) return Mbps ? Math.round(Mbps * 1024) : null } - function getOgURL () { + function getOgURL() { let ogURL = '' const ogURLSelector = "meta[property='og:url']" const head = document && document.getElementsByTagName('head')[0] @@ -122,7 +122,7 @@ function _serializeSupplyChainObj(schainObj) { * @param {BidRequest} bid The bid params to validate. * @return boolean True if this is a valid bid, and false otherwise. */ -function isBidRequestValid (bid) { +function isBidRequestValid(bid) { const { params, adUnitCode @@ -163,7 +163,7 @@ function isBidRequestValid (bid) { * @param {Object} attributes * @returns {Object} */ -function _getVidParams (attributes) { +function _getVidParams(attributes) { const { minduration: mind, maxduration: maxd, @@ -200,7 +200,7 @@ function _getVidParams (attributes) { * @param {Object} bid * @returns {Number} floor */ -function _getFloor (mediaTypes, staticBidFloor, bid) { +function _getFloor(mediaTypes, staticBidFloor, bid) { const curMediaType = Object.keys(mediaTypes)[0] || 'banner'; const bidFloor = { floor: 0, currency: 'USD' }; @@ -222,7 +222,29 @@ function _getFloor (mediaTypes, staticBidFloor, bid) { return bidFloor; } -function getEids (userId) { +/** + * loops through bannerSizes array to get greatest slot dimensions + * @param {number[][]} sizes + * @returns {number[]} + */ +function getGreatestDimensions(sizes) { + let maxw = 0; + let maxh = 0; + let greatestVal = 0; + sizes.forEach(bannerSize => { + let [width, height] = bannerSize; + let greaterSide = width > height ? width : height; + if ((greaterSide > greatestVal) || (greaterSide === greatestVal && width >= maxw && height >= maxh)) { + greatestVal = greaterSide; + maxw = width; + maxh = height; + } + }); + + return [maxw, maxh]; +} + +function getEids(userId) { const idProperties = [ 'uid', 'eid', @@ -251,7 +273,7 @@ function getEids (userId) { * @param {validBidRequests[]} - an array of bids * @return ServerRequest Info describing the request to the server. */ -function buildRequests (validBidRequests, bidderRequest) { +function buildRequests(validBidRequests, bidderRequest) { const bids = []; const gdprConsent = bidderRequest && bidderRequest.gdprConsent; const uspConsent = bidderRequest && bidderRequest.uspConsent; @@ -311,6 +333,9 @@ function buildRequests (validBidRequests, bidderRequest) { data.pi = 2; // inscreen // override pi if the following is found if (params.slot) { + const [maxw, maxh] = getGreatestDimensions(sizes); + data.maxw = maxw; + data.maxh = maxh; data.si = parseInt(params.slot, 10); data.pi = 3; data.bf = sizes.reduce((acc, curSlotDim) => `${acc}${acc && ','}${curSlotDim[0]}x${curSlotDim[1]}`, ''); @@ -353,7 +378,7 @@ function buildRequests (validBidRequests, bidderRequest) { return bids; } -function handleLegacyParams (params, sizes) { +function handleLegacyParams(params, sizes) { const data = {}; if (params.inScreenPubID) { data.pubId = params.inScreenPubID; @@ -364,6 +389,9 @@ function handleLegacyParams (params, sizes) { data.pi = 2; } if (params.inSlot) { + const [maxw, maxh] = getGreatestDimensions(sizes); + data.maxw = maxw; + data.maxh = maxh; data.si = parseInt(params.inSlot, 10); data.pi = 3; data.bf = sizes.reduce((acc, curSlotDim) => `${acc}${acc && ','}${curSlotDim[0]}x${curSlotDim[1]}`, ''); @@ -393,12 +421,12 @@ function handleLegacyParams (params, sizes) { * @param {*} serverResponse A successful response from the server. * @return {Bid[]} An array of bids which were nested inside the server. */ -function interpretResponse (serverResponse, bidRequest) { +function interpretResponse(serverResponse, bidRequest) { const bidResponses = [] const serverResponseBody = serverResponse.body if (!serverResponseBody || serverResponseBody.err) { - const data = bidRequest.data || {} + const data = bidRequest.data || {}; const id = data.si || data.ni || data.t || data.pubId; const delayTime = serverResponseBody ? serverResponseBody.err.drt : DELAY_REQUEST_TIME; invalidRequestIds[id] = { productId: data.pi, timestamp: new Date().getTime() }; @@ -432,7 +460,9 @@ function interpretResponse (serverResponse, bidRequest) { markup, cur, width: responseWidth, - height: responseHeight + height: responseHeight, + maxw, + maxh }, cw: wrapper, pag: { @@ -443,24 +473,26 @@ function interpretResponse (serverResponse, bidRequest) { adomain: advertiserDomains, mediaType: type } - } = Object.assign(defaultResponse, serverResponseBody) - let data = bidRequest.data || {} - let product = data.pi - let mediaType = (product === 6 || product === 7) ? VIDEO : BANNER - let isTestUnit = (product === 3 && data.si === 9) - // use response sizes if available - let sizes = responseWidth && responseHeight ? [`${responseWidth}x${responseHeight}`] : utils.parseSizesInput(bidRequest.sizes) - let [width, height] = sizes[0].split('x') + } = Object.assign(defaultResponse, serverResponseBody); + let data = bidRequest.data || {}; + let product = data.pi; + let mediaType = (product === 6 || product === 7) ? VIDEO : BANNER; + let isTestUnit = (product === 3 && data.si === 9); let metaData = { advertiserDomains: advertiserDomains || [], mediaType: type || mediaType + }; + let sizes = utils.parseSizesInput(bidRequest.sizes); + + if (maxw && maxh) { + sizes = [`${maxw}x${maxh}`]; + } else if (product === 5 && includes(sizes, '1x1')) { + sizes = ['1x1']; + } else if (product === 2 && includes(sizes, '1x1')) { + sizes = responseWidth && responseHeight ? [`${responseWidth}x${responseHeight}`] : utils.parseSizesInput(bidRequest.sizes) } - // return 1x1 when breakout expected - if ((product === 2 || product === 5) && includes(sizes, '1x1')) { - width = '1' - height = '1' - } + let [width, height] = sizes[0].split('x'); if (jcsi) { serverResponseBody.jcsi = JCSI @@ -474,7 +506,7 @@ function interpretResponse (serverResponse, bidRequest) { // dealId: DEAL_ID, // referrer: REFERER, ad: wrapper ? getWrapperCode(wrapper, Object.assign({}, serverResponseBody, { bidRequest })) : markup, - ...(mediaType === VIDEO && {ad: markup, vastXml: markup}), + ...(mediaType === VIDEO && { ad: markup, vastXml: markup }), mediaType, cpm: isTestUnit ? 0.1 : cpm, creativeId, @@ -497,7 +529,7 @@ function interpretResponse (serverResponse, bidRequest) { * @param {ServerResponse[]} serverResponses List of server's responses. * @return {UserSync[]} The user syncs which should be dropped. */ -function getUserSyncs (syncOptions, serverResponses) { +function getUserSyncs(syncOptions, serverResponses) { const responses = serverResponses.map((response) => { return (response.body && response.body.pxs && response.body.pxs.scr) || [] }) diff --git a/test/spec/modules/gumgumBidAdapter_spec.js b/test/spec/modules/gumgumBidAdapter_spec.js index 75a9c5c975a..78b25e3c5d1 100644 --- a/test/spec/modules/gumgumBidAdapter_spec.js +++ b/test/spec/modules/gumgumBidAdapter_spec.js @@ -101,32 +101,37 @@ describe('gumgumAdapter', function () { let sizesArray = [[300, 250], [300, 600]]; let bidRequests = [ { - 'bidder': 'gumgum', - 'params': { - 'inSlot': '9' + bidder: 'gumgum', + params: { + inSlot: 9 }, - 'adUnitCode': 'adunit-code', - 'sizes': sizesArray, - 'bidId': '30b31c1838de1e', - 'schain': { - 'ver': '1.0', - 'complete': 1, - 'nodes': [ + mediaTypes: { + banner: { + sizes: sizesArray + } + }, + adUnitCode: 'adunit-code', + sizes: sizesArray, + bidId: '30b31c1838de1e', + schain: { + ver: '1.0', + complete: 1, + nodes: [ { - 'asi': 'exchange1.com', - 'sid': '1234', - 'hp': 1, - 'rid': 'bid-request-1', - 'name': 'publisher', - 'domain': 'publisher.com' + asi: 'exchange1.com', + sid: '1234', + hp: 1, + rid: 'bid-request-1', + name: 'publisher', + domain: 'publisher.com' }, { - 'asi': 'exchange2.com', - 'sid': 'abcd', - 'hp': 1, - 'rid': 'bid-request-2', - 'name': 'intermediary', - 'domain': 'intermediary.com' + asi: 'exchange2.com', + sid: 'abcd', + hp: 1, + rid: 'bid-request-2', + name: 'intermediary', + domain: 'intermediary.com' } ] } @@ -159,6 +164,21 @@ describe('gumgumAdapter', function () { expect(bidRequest.data.t).to.equal(zoneParam.zone); }); + it('should send the banner dimension with the greatest width or height for slot ads', function () { + const legacyRequest = { ...bidRequests[0] }; + const slotZoneRequest = { ...bidRequests[0], params: { ...zoneParam, slot: 9 } } + const slotPubIdRequest = { ...bidRequests[0], params: { ...pubIdParam, slot: 9 } } + const legacyBidRequest = spec.buildRequests([legacyRequest])[0]; + const slotZoneBidRequest = spec.buildRequests([slotZoneRequest])[0]; + const slotPubIdBidRequest = spec.buildRequests([slotPubIdRequest])[0]; + expect(legacyBidRequest.data.maxw).to.equal(300); + expect(legacyBidRequest.data.maxh).to.equal(600); + expect(slotZoneBidRequest.data.maxw).to.equal(300); + expect(slotZoneBidRequest.data.maxh).to.equal(600); + expect(slotPubIdBidRequest.data.maxw).to.equal(300); + expect(slotPubIdBidRequest.data.maxh).to.equal(600); + }) + it('should set the iriscat param when found', function () { const request = { ...bidRequests[0], params: { iriscat: 'abc123' } } const bidRequest = spec.buildRequests([request])[0]; @@ -592,60 +612,67 @@ describe('gumgumAdapter', function () { expect(result.length).to.equal(0); }); - it('uses response width and height', function () { - const result = spec.interpretResponse({ body: serverResponse }, bidRequest)[0]; - expect(result.width).to.equal(serverResponse.ad.width.toString()); - expect(result.height).to.equal(serverResponse.ad.height.toString()); - }); + describe('bidResponse width and height', function () { + it('uses response maxw and maxh for when found in bidresponse', function () { + const maxSlotAdResponse = { ...serverResponse.ad, maxw: 300, maxh: 600 }; + const result = spec.interpretResponse({ body: { ...serverResponse, ad: maxSlotAdResponse } }, bidRequest)[0]; + expect(result.width).to.equal(maxSlotAdResponse.maxw.toString()); + expect(result.height).to.equal(maxSlotAdResponse.maxh.toString()); + }); - it('defaults to use bidRequest sizes when width and height are not found', function () { - const { ad, jcsi, pag, thms, meta } = serverResponse - const noAdSizes = { ...ad } - delete noAdSizes.width - delete noAdSizes.height - const responseWithoutSizes = { jcsi, pag, thms, meta, ad: noAdSizes } - const request = { ...bidRequest, sizes: [[100, 200]] } - const result = spec.interpretResponse({ body: responseWithoutSizes }, request)[0]; + it('returns 1x1 when eligible product and size are available', function () { + let bidRequest = { + id: 12346, + sizes: [[300, 250], [1, 1]], + url: ENDPOINT, + method: 'GET', + data: { + pi: 5, + t: 'ggumtest' + } + } + let serverResponse = { + 'ad': { + 'id': 2065333, + 'height': 90, + 'ipd': 2000, + 'markup': '

Hello

', + 'ii': true, + 'du': null, + 'price': 1, + 'zi': 0, + 'impurl': 'http://g2.gumgum.com/ad/view', + 'clsurl': 'http://g2.gumgum.com/ad/close' + }, + 'pag': { + 't': 'ggumtest', + 'pvid': 'aa8bbb65-427f-4689-8cee-e3eed0b89eec', + }, + 'thms': 10000 + } + let result = spec.interpretResponse({ body: serverResponse }, bidRequest); + expect(result[0].width).to.equal('1'); + expect(result[0].height).to.equal('1'); + }); - expect(result.width).to.equal(request.sizes[0][0].toString()) - expect(result.height).to.equal(request.sizes[0][1].toString()) - }); + it('uses response width and height for inscreen product', function () { + const result = spec.interpretResponse({ body: serverResponse }, bidRequest)[0]; + expect(result.width).to.equal(serverResponse.ad.width.toString()); + expect(result.height).to.equal(serverResponse.ad.height.toString()); + }); - it('returns 1x1 when eligible product and size available', function () { - let inscreenBidRequest = { - id: 12346, - sizes: [[300, 250], [1, 1]], - url: ENDPOINT, - method: 'GET', - data: { - pi: 2, - t: 'ggumtest' - } - } - let inscreenServerResponse = { - 'ad': { - 'id': 2065333, - 'height': 90, - 'ipd': 2000, - 'markup': '

I am an inscreen ad

', - 'ii': true, - 'du': null, - 'price': 1, - 'zi': 0, - 'impurl': 'http://g2.gumgum.com/ad/view', - 'clsurl': 'http://g2.gumgum.com/ad/close' - }, - 'pag': { - 't': 'ggumtest', - 'pvid': 'aa8bbb65-427f-4689-8cee-e3eed0b89eec', - 'css': 'html { overflow-y: auto }', - 'js': 'console.log("environment", env);' - }, - 'thms': 10000 - } - let result = spec.interpretResponse({ body: inscreenServerResponse }, inscreenBidRequest); - expect(result[0].width).to.equal('1'); - expect(result[0].height).to.equal('1'); + it('defaults to use bidRequest sizes', function () { + const { ad, jcsi, pag, thms, meta } = serverResponse + const noAdSizes = { ...ad } + delete noAdSizes.width + delete noAdSizes.height + const responseWithoutSizes = { jcsi, pag, thms, meta, ad: noAdSizes } + const request = { ...bidRequest, sizes: [[100, 200]] } + const result = spec.interpretResponse({ body: responseWithoutSizes }, request)[0]; + + expect(result.width).to.equal(request.sizes[0][0].toString()) + expect(result.height).to.equal(request.sizes[0][1].toString()) + }); }); it('updates jcsi object when the server response jcsi prop is found', function () {