mk9-prebid
Version:
Header Bidding Management Library
722 lines (672 loc) • 28.8 kB
JavaScript
import { BANNER, VIDEO } from 'src/mediaTypes.js';
import { expect } from 'chai';
import { newBidder } from 'src/adapters/bidderFactory.js';
import { spec } from 'modules/gumgumBidAdapter.js';
const ENDPOINT = 'https://g2.gumgum.com/hbid/imp';
const JCSI = { t: 0, rq: 8, pbv: '$prebid.version$' }
describe('gumgumAdapter', function () {
const adapter = newBidder(spec);
describe('inherited functions', function () {
it('exists and is a function', function () {
expect(adapter.callBids).to.exist.and.to.be.a('function');
});
});
describe('isBidRequestValid', function () {
let bid = {
'bidder': 'gumgum',
'params': {
'inScreen': '10433394',
'bidfloor': 0.05
},
'adUnitCode': 'adunit-code',
'mediaTypes': {
'banner': {
sizes: [[300, 250], [300, 600], [1, 1]]
}
},
'bidId': '30b31c1838de1e',
'bidderRequestId': '22edbae2733bf6',
'auctionId': '1d1a030790a475',
};
it('should return true when required params found', function () {
const zoneBid = { ...bid, params: { 'zone': '123' } };
const pubIdBid = { ...bid, params: { 'pubId': 123 } };
expect(spec.isBidRequestValid(bid)).to.equal(true);
expect(spec.isBidRequestValid(zoneBid)).to.equal(true);
expect(spec.isBidRequestValid(pubIdBid)).to.equal(true);
});
it('should return true when required params found', function () {
let bid = Object.assign({}, bid);
delete bid.params;
bid.params = {
'inSlot': '789'
};
expect(spec.isBidRequestValid(bid)).to.equal(true);
});
it('should return true when inslot sends sizes and trackingid', function () {
let bid = Object.assign({}, bid);
delete bid.params;
bid.params = {
'inSlot': '789',
'sizes': [[0, 1], [2, 3], [4, 5], [6, 7]]
};
expect(spec.isBidRequestValid(bid)).to.equal(true);
});
it('should return false when no unit type is specified', function () {
let bid = Object.assign({}, bid);
delete bid.params;
bid.params = {
'placementId': 0
};
expect(spec.isBidRequestValid(bid)).to.equal(false);
});
it('should return false when bidfloor is not a number', function () {
let bid = Object.assign({}, bid);
delete bid.params;
bid.params = {
'inSlot': '789',
'bidfloor': '0.50'
};
expect(spec.isBidRequestValid(bid)).to.equal(false);
});
it('should return false if invalid request id is found', function () {
const bidRequest = {
id: 12345,
sizes: [[300, 250], [1, 1]],
url: ENDPOINT,
method: 'GET',
pi: 3,
data: { t: '10433394' }
};
let body;
spec.interpretResponse({ body }, bidRequest); // empty response
expect(spec.isBidRequestValid(bid)).to.be.equal(false);
});
});
describe('buildRequests', function () {
let sizesArray = [[300, 250], [300, 600]];
let bidRequests = [
{
bidder: 'gumgum',
params: {
inSlot: 9
},
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: 'exchange2.com',
sid: 'abcd',
hp: 1,
rid: 'bid-request-2',
name: 'intermediary',
domain: 'intermediary.com'
}
]
}
}
];
const vidMediaTypes = {
video: {
playerSize: [640, 480],
context: 'instream',
minduration: 1,
maxduration: 2,
linearity: 1,
startdelay: 1,
placement: 123456,
protocols: [1, 2]
}
};
const zoneParam = { 'zone': '123a' };
const pubIdParam = { 'pubId': 123 };
it('should set pubId param if found', function () {
const request = { ...bidRequests[0], params: pubIdParam };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.pubId).to.equal(pubIdParam.pubId);
});
it('should set t param when zone param is found', function () {
const request = { ...bidRequests[0], params: zoneParam };
const bidRequest = spec.buildRequests([request])[0];
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];
expect(bidRequest.data).to.have.property('iriscat');
});
it('should not set the iriscat param when not found', function () {
const request = { ...bidRequests[0] }
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data).to.not.have.property('iriscat');
});
it('should set the irisid param when found', function () {
const request = { ...bidRequests[0], params: { irisid: 'abc123' } }
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data).to.have.property('irisid');
});
it('should not set the irisid param when not found', function () {
const request = { ...bidRequests[0] }
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data).to.not.have.property('irisid');
});
it('should not set the irisid param when not of type string', function () {
const request = { ...bidRequests[0], params: { irisid: 123456 } }
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data).to.not.have.property('irisid');
});
it('should set the global placement id (gpid)', function () {
const req = { ...bidRequests[0], ortb2Imp: { ext: { data: { adserver: { name: 'test', adslot: 123456 } } } } }
const bidRequest = spec.buildRequests([req])[0];
expect(bidRequest.data).to.have.property('gpid');
expect(bidRequest.data.gpid).to.equal(123456);
});
it('should set the bid floor if getFloor module is not present but static bid floor is defined', function () {
const req = { ...bidRequests[0], params: { bidfloor: 42 } }
const bidRequest = spec.buildRequests([req])[0];
expect(bidRequest.data).to.have.property('fp');
expect(bidRequest.data.fp).to.equal(42);
});
describe('product id', function () {
it('should set the correct pi param if native param is found', function () {
const request = { ...bidRequests[0], params: { ...zoneParam, native: 2 } };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.pi).to.equal(5);
});
it('should set the correct pi param for video', function () {
const request = { ...bidRequests[0], params: zoneParam, mediaTypes: vidMediaTypes };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.pi).to.equal(7);
});
it('should set the correct pi param for invideo', function () {
const invideo = { video: { ...vidMediaTypes.video, linearity: 2 } };
const request = { ...bidRequests[0], params: zoneParam, mediaTypes: invideo };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.pi).to.equal(6);
});
it('should set the correct pi param if slot param is found', function () {
const request = { ...bidRequests[0], params: { ...zoneParam, slot: '123s' } };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.pi).to.equal(3);
});
it('should default the pi param to 2 if only zone or pubId param is found', function () {
const zoneRequest = { ...bidRequests[0], params: zoneParam };
const pubIdRequest = { ...bidRequests[0], params: pubIdParam };
const zoneBidRequest = spec.buildRequests([zoneRequest])[0];
const pubIdBidRequest = spec.buildRequests([pubIdRequest])[0];
expect(zoneBidRequest.data.pi).to.equal(2);
expect(pubIdBidRequest.data.pi).to.equal(2);
});
});
it('should return a defined sizes field for video', function () {
const request = { ...bidRequests[0], mediaTypes: vidMediaTypes, params: { 'videoPubID': 123 } };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.sizes).to.equal(vidMediaTypes.video.playerSize);
});
it('should handle multiple sizes for inslot', function () {
const mediaTypes = { banner: { sizes: [[300, 250], [300, 600]] } }
const request = { ...bidRequests[0], mediaTypes };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.bf).to.equal('300x250,300x600');
});
describe('floorModule', function () {
const floorTestData = {
'currency': 'USD',
'floor': 1.50
};
bidRequests[0].getFloor = _ => {
return floorTestData;
};
it('should return the value from getFloor if present', function () {
const request = spec.buildRequests(bidRequests)[0];
expect(request.data.fp).to.equal(floorTestData.floor);
});
it('should return the getFloor.floor value if it is greater than bidfloor', function () {
const bidfloor = 0.80;
const request = { ...bidRequests[0] };
request.params.bidfloor = bidfloor;
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.fp).to.equal(floorTestData.floor);
});
it('should return the bidfloor value if it is greater than getFloor.floor', function () {
const bidfloor = 1.80;
const request = { ...bidRequests[0] };
request.params.bidfloor = bidfloor;
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.fp).to.equal(bidfloor);
});
it('should return a floor currency', function () {
const request = spec.buildRequests(bidRequests)[0];
expect(request.data.fpc).to.equal(floorTestData.currency);
})
});
it('sends bid request to ENDPOINT via GET', function () {
const request = spec.buildRequests(bidRequests)[0];
expect(request.url).to.equal(ENDPOINT);
expect(request.method).to.equal('GET');
expect(request.id).to.equal('30b31c1838de1e');
});
it('should set t and fp parameters in bid request if inScreen request param is found', function () {
const request = Object.assign({}, bidRequests[0]);
delete request.params;
request.params = {
'inScreen': '10433394',
'bidfloor': 0.05
};
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.pi).to.equal(2);
expect(bidRequest.data).to.include.any.keys('t');
expect(bidRequest.data).to.include.any.keys('fp');
});
it('should set iriscat parameter if iriscat param is found and is of type string', function () {
const iriscat = 'segment';
const request = { ...bidRequests[0] };
request.params = { ...request.params, iriscat };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.iriscat).to.equal(iriscat);
});
it('should not send iriscat parameter if iriscat param is not found', function () {
const request = { ...bidRequests[0] };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.iriscat).to.be.undefined;
});
it('should not send iriscat parameter if iriscat param is not of type string', function () {
const iriscat = 123;
const request = { ...bidRequests[0] };
request.params = { ...request.params, iriscat };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.iriscat).to.be.undefined;
});
it('should send pubId if inScreenPubID param is specified', function () {
const request = Object.assign({}, bidRequests[0]);
delete request.params;
request.params = {
'inScreenPubID': 123
};
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data).to.include.any.keys('pubId');
expect(bidRequest.data.pubId).to.equal(request.params.inScreenPubID);
expect(bidRequest.data).to.not.include.any.keys('t');
});
it('should send pubId if videoPubID param is specified', function () {
const request = { ...bidRequests[0], mediaTypes: vidMediaTypes, params: { 'videoPubID': 123 } };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data).to.include.any.keys('pubId');
expect(bidRequest.data.pubId).to.equal(request.params.videoPubID);
expect(bidRequest.data).to.not.include.any.keys('t');
});
it('should set a ni parameter in bid request if ICV request param is found', function () {
const request = Object.assign({}, bidRequests[0]);
delete request.params;
request.params = {
'ICV': '10433395'
};
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.pi).to.equal(5);
expect(bidRequest.data).to.include.any.keys('ni');
});
it('should add parameters associated with video if video request param is found', function () {
const videoVals = {
playerSize: [640, 480],
context: 'instream',
minduration: 1,
maxduration: 2,
linearity: 1,
startdelay: 1,
placement: 123456,
protocols: [1, 2]
};
const request = Object.assign({}, bidRequests[0]);
delete request.params;
request.mediaTypes = {
video: videoVals
};
request.params = {
'video': '10433395'
};
const bidRequest = spec.buildRequests([request])[0];
// 7 is video product line
expect(bidRequest.data.pi).to.eq(7);
expect(bidRequest.data.mind).to.eq(videoVals.minduration);
expect(bidRequest.data.maxd).to.eq(videoVals.maxduration);
expect(bidRequest.data.li).to.eq(videoVals.linearity);
expect(bidRequest.data.sd).to.eq(videoVals.startdelay);
expect(bidRequest.data.pt).to.eq(videoVals.placement);
expect(bidRequest.data.pr).to.eq(videoVals.protocols.join(','));
expect(bidRequest.data.viw).to.eq(videoVals.playerSize[0].toString());
expect(bidRequest.data.vih).to.eq(videoVals.playerSize[1].toString());
});
it('should add parameters associated with invideo if invideo request param is found', function () {
const inVideoVals = {
playerSize: [640, 480],
context: 'instream',
minduration: 1,
maxduration: 2,
linearity: 1,
startdelay: 1,
placement: 123456,
protocols: [1, 2]
};
const request = Object.assign({}, bidRequests[0]);
delete request.params;
request.mediaTypes = {
video: inVideoVals
};
request.params = {
'inVideo': '10433395'
};
const bidRequest = spec.buildRequests([request])[0];
// 6 is invideo product line
expect(bidRequest.data.pi).to.eq(6);
expect(bidRequest.data.mind).to.eq(inVideoVals.minduration);
expect(bidRequest.data.maxd).to.eq(inVideoVals.maxduration);
expect(bidRequest.data.li).to.eq(inVideoVals.linearity);
expect(bidRequest.data.sd).to.eq(inVideoVals.startdelay);
expect(bidRequest.data.pt).to.eq(inVideoVals.placement);
expect(bidRequest.data.pr).to.eq(inVideoVals.protocols.join(','));
expect(bidRequest.data.viw).to.eq(inVideoVals.playerSize[0].toString());
expect(bidRequest.data.vih).to.eq(inVideoVals.playerSize[1].toString());
});
it('should not add additional parameters depending on params field', function () {
const request = spec.buildRequests(bidRequests)[0];
expect(request.data).to.not.include.any.keys('ni');
expect(request.data).to.not.include.any.keys('t');
expect(request.data).to.not.include.any.keys('eAdBuyId');
expect(request.data).to.not.include.any.keys('adBuyId');
});
it('should add gdpr consent parameters if gdprConsent is present', function () {
const gdprConsent = { consentString: 'BOJ/P2HOJ/P2HABABMAAAAAZ+A==', gdprApplies: true };
const fakeBidRequest = { gdprConsent: gdprConsent };
const bidRequest = spec.buildRequests(bidRequests, fakeBidRequest)[0];
expect(bidRequest.data.gdprApplies).to.eq(1);
expect(bidRequest.data.gdprConsent).to.eq('BOJ/P2HOJ/P2HABABMAAAAAZ+A==');
});
it('should handle gdprConsent is present but values are undefined case', function () {
const gdprConsent = { consent_string: undefined, gdprApplies: undefined };
const fakeBidRequest = { gdprConsent: gdprConsent };
const bidRequest = spec.buildRequests(bidRequests, fakeBidRequest)[0];
expect(bidRequest.data).to.not.include.any.keys('gdprConsent')
});
it('should add uspConsent parameter if it is present in the bidderRequest', function () {
const noUspBidRequest = spec.buildRequests(bidRequests)[0];
const uspConsentObj = { uspConsent: '1YYY' };
const bidRequest = spec.buildRequests(bidRequests, uspConsentObj)[0];
expect(noUspBidRequest.data).to.not.include.any.keys('uspConsent');
expect(bidRequest.data).to.include.any.keys('uspConsent');
expect(bidRequest.data.uspConsent).to.eq(uspConsentObj.uspConsent);
});
it('should add a tdid parameter if request contains unified id from TradeDesk', function () {
const unifiedId = {
'userId': {
'tdid': 'tradedesk-id'
}
}
const request = Object.assign(unifiedId, bidRequests[0]);
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data.tdid).to.eq(unifiedId.userId.tdid);
});
it('should not add a tdid parameter if unified id is not found', function () {
const request = spec.buildRequests(bidRequests)[0];
expect(request.data).to.not.include.any.keys('tdid');
});
it('should send IDL envelope ID if available', function () {
const idl_env = 'abc123';
const request = { ...bidRequests[0], userId: { idl_env } };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data).to.have.property('idl_env');
expect(bidRequest.data.idl_env).to.equal(idl_env);
});
it('should not send IDL envelope if not available', function () {
const request = { ...bidRequests[0] };
const bidRequest = spec.buildRequests([request])[0];
expect(bidRequest.data).to.not.have.property('idl_env');
});
it('should send schain parameter in serialized form', function () {
const serializedForm = '1.0,1!exchange1.com,1234,1,bid-request-1,publisher,publisher.com!exchange2.com,abcd,1,bid-request-2,intermediary,intermediary.com'
const request = spec.buildRequests(bidRequests)[0];
expect(request.data).to.include.any.keys('schain');
expect(request.data.schain).to.eq(serializedForm);
});
it('should send ns parameter if browser contains navigator.connection property', function () {
const bidRequest = spec.buildRequests(bidRequests)[0];
const connection = window.navigator && window.navigator.connection;
if (connection) {
const downlink = connection.downlink || connection.bandwidth;
expect(bidRequest.data).to.include.any.keys('ns');
expect(bidRequest.data.ns).to.eq(Math.round(downlink * 1024));
} else {
expect(bidRequest.data).to.not.include.any.keys('ns');
}
});
it('adds jcsi param with correct keys', function () {
const expectedKeys = Object.keys(JCSI).sort();
const jcsi = JSON.stringify(JCSI);
const bidRequest = spec.buildRequests(bidRequests)[0];
const actualKeys = Object.keys(JSON.parse(bidRequest.data.jcsi)).sort();
expect(actualKeys).to.eq(actualKeys);
expect(bidRequest.data.jcsi).to.eq(jcsi);
});
})
describe('interpretResponse', function () {
const metaData = { adomain: ['advertiser.com'], mediaType: BANNER }
const serverResponse = {
ad: {
id: 29593,
width: 300,
height: 250,
ipd: 2000,
markup: '<html><h3>I am an ad</h3></html>',
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);'
},
jcsi: { t: 0, rq: 8 },
thms: 10000,
meta: metaData
}
const bidRequest = {
id: 12345,
sizes: [[300, 250], [1, 1]],
url: ENDPOINT,
method: 'GET',
pi: 3
}
const expectedMetaData = { advertiserDomains: ['advertiser.com'], mediaType: BANNER };
const expectedResponse = {
ad: '<html><h3>I am an ad</h3></html>',
cpm: 0,
creativeId: 29593,
currency: 'USD',
height: '250',
netRevenue: true,
requestId: 12345,
width: '300',
mediaType: BANNER,
ttl: 60,
meta: expectedMetaData
};
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 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 };
expect(spec.interpretResponse({ body: response }, bidRequest)).to.deep.equal([expected]);
});
it('should pass correct currency if found in bid response', function () {
const cur = 'EURO';
const response = { ...serverResponse };
response.ad.cur = cur;
const expected = { ...expectedResponse };
expected.currency = cur;
expect(spec.interpretResponse({ body: response }, bidRequest)).to.deep.equal([expected]);
});
it('handles nobid responses', function () {
let response = {
'ad': {},
'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: response }, bidRequest);
expect(result.length).to.equal(0);
});
it('handles empty response', function () {
let body;
let result = spec.interpretResponse({ body }, bidRequest);
expect(result.length).to.equal(0);
});
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('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': '<html><h3>Hello</h3></html>',
'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');
});
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('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 () {
const response = Object.assign({ cw: 'AD_JSON' }, serverResponse);
const bidResponse = spec.interpretResponse({ body: response }, bidRequest)[0].ad;
const decodedResponse = JSON.parse(atob(bidResponse));
expect(decodedResponse.jcsi).to.eql(JCSI);
});
it('sets the correct mediaType depending on product', function () {
const bannerBidResponse = spec.interpretResponse({ body: serverResponse }, bidRequest)[0];
const invideoBidResponse = spec.interpretResponse({ body: serverResponse }, { ...bidRequest, data: { pi: 6 } })[0];
const videoBidResponse = spec.interpretResponse({ body: serverResponse }, { ...bidRequest, data: { pi: 7 } })[0];
expect(bannerBidResponse.mediaType).to.equal(BANNER);
expect(invideoBidResponse.mediaType).to.equal(VIDEO);
expect(videoBidResponse.mediaType).to.equal(VIDEO);
});
it('sets a vastXml property if mediaType is video', function () {
const videoBidResponse = spec.interpretResponse({ body: serverResponse }, { ...bidRequest, data: { pi: 7 } })[0];
expect(videoBidResponse.vastXml).to.exist;
});
})
describe('getUserSyncs', function () {
const syncOptions = {
'iframeEnabled': 'true'
}
const response = {
'pxs': {
'scr': [
{
't': 'i',
'u': 'https://c.gumgum.com/images/pixel.gif'
},
{
't': 'f',
'u': 'https://www.nytimes.com/'
}
]
}
}
let result = spec.getUserSyncs(syncOptions, [{ body: response }]);
expect(result[0].type).to.equal('image')
expect(result[1].type).to.equal('iframe')
})
});