mk9-prebid
Version:
Header Bidding Management Library
934 lines (853 loc) • 32 kB
JavaScript
// jshint esversion: 6, es3: false, node: true
import { assert } from 'chai';
import { spec } from 'modules/adfBidAdapter.js';
import { config } from 'src/config.js';
import { createEidsArray } from 'modules/userId/eids.js';
describe('Adf adapter', function () {
let bids = [];
describe('backwards-compatibility', function () {
it('should have adformOpenRTB alias defined', function () {
assert.equal(spec.aliases[0].code, 'adformOpenRTB');
assert.equal(spec.aliases[0].gvlid, 50);
});
it('should have adform alias defined', function () {
assert.equal(spec.aliases[1].code, 'adform');
assert.equal(spec.aliases[1].gvlid, 50);
});
});
describe('isBidRequestValid', function () {
let bid = {
'bidder': 'adformOpenRTB',
'params': {
'mid': '19910113'
}
};
it('should return true when required params found', function () {
assert(spec.isBidRequestValid(bid));
});
it('should return false when required params are missing', function () {
bid.params = { adxDomain: 'adx.adform.net' };
assert.isFalse(spec.isBidRequestValid(bid));
});
});
describe('buildRequests', function () {
beforeEach(function () {
config.resetConfig();
});
it('should send request with correct structure', function () {
let validBidRequests = [{
bidId: 'bidId',
params: {
adxDomain: '10.8.57.207'
}
}];
let request = spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } });
assert.equal(request.method, 'POST');
assert.equal(request.url, 'https://10.8.57.207/adx/openrtb');
assert.deepEqual(request.options, {contentType: 'application/json'});
assert.ok(request.data);
});
describe('user privacy', function () {
it('should send GDPR Consent data to adform if gdprApplies', function () {
let validBidRequests = [{ bidId: 'bidId', params: { test: 1 } }];
let bidderRequest = { gdprConsent: { gdprApplies: true, consentString: 'consentDataString' }, refererInfo: { referer: 'page' } };
let request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data);
assert.equal(request.user.ext.consent, bidderRequest.gdprConsent.consentString);
assert.equal(request.regs.ext.gdpr, bidderRequest.gdprConsent.gdprApplies);
assert.equal(typeof request.regs.ext.gdpr, 'number');
});
it('should send gdpr as number', function () {
let validBidRequests = [{ bidId: 'bidId', params: { test: 1 } }];
let bidderRequest = { gdprConsent: { gdprApplies: true, consentString: 'consentDataString' }, refererInfo: { referer: 'page' } };
let request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data);
assert.equal(typeof request.regs.ext.gdpr, 'number');
assert.equal(request.regs.ext.gdpr, 1);
});
it('should send CCPA Consent data to adform', function () {
let validBidRequests = [{ bidId: 'bidId', params: { test: 1 } }];
let bidderRequest = { uspConsent: '1YA-', refererInfo: { referer: 'page' } };
let request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data);
assert.equal(request.regs.ext.us_privacy, '1YA-');
bidderRequest = { uspConsent: '1YA-', gdprConsent: { gdprApplies: true, consentString: 'consentDataString' }, refererInfo: { referer: 'page' } };
request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data);
assert.equal(request.regs.ext.us_privacy, '1YA-');
assert.equal(request.user.ext.consent, 'consentDataString');
assert.equal(request.regs.ext.gdpr, 1);
});
it('should not send GDPR Consent data to adform if gdprApplies is undefined', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { siteId: 'siteId' }
}];
let bidderRequest = {gdprConsent: {gdprApplies: false, consentString: 'consentDataString'}, refererInfo: { referer: 'page' }};
let request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data);
assert.equal(request.user.ext.consent, 'consentDataString');
assert.equal(request.regs.ext.gdpr, 0);
bidderRequest = {gdprConsent: {consentString: 'consentDataString'}, refererInfo: { referer: 'page' }};
request = JSON.parse(spec.buildRequests(validBidRequests, bidderRequest).data);
assert.equal(request.user, undefined);
assert.equal(request.regs, undefined);
});
it('should send default GDPR Consent data to adform', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { siteId: 'siteId' }
}];
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
assert.equal(request.user, undefined);
assert.equal(request.regs, undefined);
});
});
it('should add test and is_debug to request, if test is set in parameters', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { test: 1 }
}];
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
assert.ok(request.is_debug);
assert.equal(request.test, 1);
});
it('should have default request structure', function () {
let keys = 'site,device,source,ext,imp'.split(',');
let validBidRequests = [{
bidId: 'bidId',
params: { siteId: 'siteId' }
}];
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
let data = Object.keys(request);
assert.deepEqual(keys, data);
});
it('should set request keys correct values', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { siteId: 'siteId' },
transactionId: 'transactionId'
}];
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
assert.equal(request.source.tid, validBidRequests[0].transactionId);
assert.equal(request.source.fd, 1);
});
it('should send info about device', function () {
config.setConfig({
device: { w: 100, h: 100 }
});
let validBidRequests = [{
bidId: 'bidId',
params: { mid: '1000' }
}];
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
assert.equal(request.device.ua, navigator.userAgent);
assert.equal(request.device.w, 100);
assert.equal(request.device.h, 100);
});
it('should send app info', function () {
config.setConfig({
app: { id: 'appid' },
ortb2: { app: { name: 'appname' } }
});
let validBidRequests = [{
bidId: 'bidId',
params: { mid: '1000' }
}];
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
assert.equal(request.app.id, 'appid');
assert.equal(request.app.name, 'appname');
assert.equal(request.site, undefined);
});
it('should send info about the site', function () {
config.setConfig({
site: {
id: '123123',
publisher: {
domain: 'publisher.domain.com'
}
},
ortb2: {
site: {
publisher: {
name: 'publisher\'s name'
}
}
}
});
let validBidRequests = [{
bidId: 'bidId',
params: { mid: '1000' }
}];
let refererInfo = { referer: 'page' };
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo }).data);
assert.deepEqual(request.site, {
page: refererInfo.referer,
publisher: {
domain: 'publisher.domain.com',
name: 'publisher\'s name'
},
id: '123123'
});
});
it('should pass extended ids', function () {
let validBidRequests = [{
bidId: 'bidId',
params: {},
userIdAsEids: createEidsArray({
tdid: 'TTD_ID_FROM_USER_ID_MODULE',
pubcid: 'pubCommonId_FROM_USER_ID_MODULE'
})
}];
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
assert.deepEqual(request.user.ext.eids, [
{ source: 'adserver.org', uids: [ { id: 'TTD_ID_FROM_USER_ID_MODULE', atype: 1, ext: { rtiPartner: 'TDID' } } ] },
{ source: 'pubcid.org', uids: [ { id: 'pubCommonId_FROM_USER_ID_MODULE', atype: 1 } ] }
]);
});
it('should send currency if defined', function () {
config.setConfig({ currency: { adServerCurrency: 'EUR' } });
let validBidRequests = [{ params: {} }];
let refererInfo = { referer: 'page' };
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo }).data);
assert.deepEqual(request.cur, [ 'EUR' ]);
});
it('should pass supply chain object', function () {
let validBidRequests = [{
bidId: 'bidId',
params: {},
schain: {
validation: 'strict',
config: {
ver: '1.0'
}
}
}];
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
assert.deepEqual(request.source.ext.schain, {
validation: 'strict',
config: {
ver: '1.0'
}
});
});
describe('priceType', function () {
it('should send default priceType', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { siteId: 'siteId' }
}];
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
assert.equal(request.ext.pt, 'net');
});
it('should send correct priceType value', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { priceType: 'net' }
}];
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
assert.equal(request.ext.pt, 'net');
});
});
describe('bids', function () {
it('should add more than one bid to the request', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { siteId: 'siteId' }
}, {
bidId: 'bidId2',
params: { siteId: 'siteId' }
}];
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data);
assert.equal(request.imp.length, 2);
});
it('should add incrementing values of id', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { mid: '1000' },
mediaTypes: {video: {}}
}, {
bidId: 'bidId2',
params: { mid: '1000' },
mediaTypes: {video: {}}
}, {
bidId: 'bidId3',
params: { mid: '1000' },
mediaTypes: {video: {}}
}];
let imps = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp;
for (let i = 0; i < 3; i++) {
assert.equal(imps[i].id, i + 1);
}
});
it('should add mid', function () {
let validBidRequests = [{ bidId: 'bidId', params: {mid: 1000}, mediaTypes: {video: {}} },
{ bidId: 'bidId2', params: {mid: 1001}, mediaTypes: {video: {}} },
{ bidId: 'bidId3', params: {mid: 1002}, mediaTypes: {video: {}} }];
let imps = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp;
for (let i = 0; i < 3; i++) {
assert.equal(imps[i].tagid, validBidRequests[i].params.mid);
}
});
describe('multiple media types', function () {
it('should use single media type for bidding', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { mid: 1000 },
mediaTypes: {
banner: {
sizes: [[100, 100], [200, 300]]
},
video: {}
}
}, {
bidId: 'bidId1',
params: { mid: 1000 },
mediaTypes: {
video: {},
native: {}
}
}, {
bidId: 'bidId2',
params: { mid: 1000 },
nativeParams: {
title: { required: true, len: 140 }
},
mediaTypes: {
banner: {
sizes: [[100, 100], [200, 300]]
},
native: {}
}
}];
let [ banner, video, native ] = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp;
assert.ok(banner.banner);
assert.equal(banner.video, undefined);
assert.equal(banner.native, undefined);
assert.ok(video.video);
assert.equal(video.banner, undefined);
assert.equal(video.native, undefined);
assert.ok(native.native);
assert.equal(native.video, undefined);
assert.equal(native.banner, undefined);
});
});
describe('banner', function () {
it('should convert sizes to openrtb format', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { mid: 1000 },
mediaTypes: {
banner: {
sizes: [[100, 100], [200, 300]]
}
}
}];
let { banner } = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0];
assert.deepEqual(banner, {
format: [ { w: 100, h: 100 }, { w: 200, h: 300 } ]
});
});
});
describe('video', function () {
it('should pass video mediatype config', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { mid: 1000 },
mediaTypes: {
video: {
playerSize: [640, 480],
context: 'outstream',
mimes: ['video/mp4']
}
}
}];
let { video } = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0];
assert.deepEqual(video, {
playerSize: [640, 480],
context: 'outstream',
mimes: ['video/mp4']
});
});
});
describe('native', function () {
describe('assets', function () {
it('should set correct asset id', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { mid: 1000 },
nativeParams: {
title: { required: true, len: 140 },
image: { required: false, wmin: 836, hmin: 627, w: 325, h: 300, mimes: ['image/jpg', 'image/gif'] },
body: { len: 140 }
}
}];
let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets;
assert.equal(assets[0].id, 0);
assert.equal(assets[1].id, 3);
assert.equal(assets[2].id, 4);
});
it('should add required key if it is necessary', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { mid: 1000 },
nativeParams: {
title: { required: true, len: 140 },
image: { required: false, wmin: 836, hmin: 627, w: 325, h: 300, mimes: ['image/jpg', 'image/gif'] },
body: { len: 140 },
sponsoredBy: { required: true, len: 140 }
}
}];
let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets;
assert.equal(assets[0].required, 1);
assert.ok(!assets[1].required);
assert.ok(!assets[2].required);
assert.equal(assets[3].required, 1);
});
it('should map img and data assets', function () {
let validBidRequests = [{
bidId: 'bidId',
params: { mid: 1000 },
nativeParams: {
title: { required: true, len: 140 },
image: { required: true, sizes: [150, 50] },
icon: { required: false, sizes: [50, 50] },
body: { required: false, len: 140 },
sponsoredBy: { required: true },
cta: { required: false },
clickUrl: { required: false }
}
}];
let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets;
assert.ok(assets[0].title);
assert.equal(assets[0].title.len, 140);
assert.deepEqual(assets[1].img, { type: 3, w: 150, h: 50 });
assert.deepEqual(assets[2].img, { type: 1, w: 50, h: 50 });
assert.deepEqual(assets[3].data, { type: 2, len: 140 });
assert.deepEqual(assets[4].data, { type: 1 });
assert.deepEqual(assets[5].data, { type: 12 });
assert.ok(!assets[6]);
});
describe('icon/image sizing', function () {
it('should flatten sizes and utilise first pair', function () {
const validBidRequests = [{
bidId: 'bidId',
params: { mid: 1000 },
nativeParams: {
image: {
sizes: [[200, 300], [100, 200]]
},
}
}];
let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets;
assert.ok(assets[0].img);
assert.equal(assets[0].img.w, 200);
assert.equal(assets[0].img.h, 300);
});
});
it('should utilise aspect_ratios', function () {
const validBidRequests = [{
bidId: 'bidId',
params: { mid: 1000 },
nativeParams: {
image: {
aspect_ratios: [{
min_width: 100,
ratio_height: 3,
ratio_width: 1
}]
},
icon: {
aspect_ratios: [{
min_width: 10,
ratio_height: 5,
ratio_width: 2
}]
}
}
}];
let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets;
assert.ok(assets[0].img);
assert.equal(assets[0].img.wmin, 100);
assert.equal(assets[0].img.hmin, 300);
assert.ok(assets[1].img);
assert.equal(assets[1].img.wmin, 10);
assert.equal(assets[1].img.hmin, 25);
});
it('should not throw error if aspect_ratios config is not defined', function () {
const validBidRequests = [{
bidId: 'bidId',
params: { mid: 1000 },
nativeParams: {
image: {
aspect_ratios: []
},
icon: {
aspect_ratios: []
}
}
}];
assert.doesNotThrow(() => spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }));
});
});
it('should expect any dimensions if min_width not passed', function () {
const validBidRequests = [{
bidId: 'bidId',
params: { mid: 1000 },
nativeParams: {
image: {
aspect_ratios: [{
ratio_height: 3,
ratio_width: 1
}]
}
}
}];
let assets = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { referer: 'page' } }).data).imp[0].native.request.assets;
assert.ok(assets[0].img);
assert.equal(assets[0].img.wmin, 0);
assert.equal(assets[0].img.hmin, 0);
assert.ok(!assets[1]);
});
});
});
});
describe('interpretResponse', function () {
it('should return if no body in response', function () {
let serverResponse = {};
let bidRequest = {};
assert.ok(!spec.interpretResponse(serverResponse, bidRequest));
});
it('should return more than one bids', function () {
let serverResponse = {
body: {
seatbid: [{
bid: [{impid: '1', native: {ver: '1.1', link: { url: 'link' }, assets: [{id: 1, title: {text: 'Asset title text'}}]}}]
}, {
bid: [{impid: '2', native: {ver: '1.1', link: { url: 'link' }, assets: [{id: 1, data: {value: 'Asset title text'}}]}}]
}]
}
};
let bidRequest = {
data: {},
bids: [
{
bidId: 'bidId1',
params: { mid: 1000 },
nativeParams: {
title: { required: true, len: 140 },
image: { required: false, wmin: 836, hmin: 627, w: 325, h: 300, mimes: ['image/jpg', 'image/gif'] },
body: { len: 140 }
}
},
{
bidId: 'bidId2',
params: { mid: 1000 },
nativeParams: {
title: { required: true, len: 140 },
image: { required: false, wmin: 836, hmin: 627, w: 325, h: 300, mimes: ['image/jpg', 'image/gif'] },
body: { len: 140 }
}
}
]
};
bids = spec.interpretResponse(serverResponse, bidRequest);
assert.equal(spec.interpretResponse(serverResponse, bidRequest).length, 2);
});
it('should parse seatbids', function () {
let serverResponse = {
body: {
seatbid: [{
bid: [
{impid: '1', native: {ver: '1.1', link: { url: 'link1' }, assets: [{id: 1, title: {text: 'Asset title text'}}]}},
{impid: '4', native: {ver: '1.1', link: { url: 'link4' }, assets: [{id: 1, title: {text: 'Asset title text'}}]}}
]
}, {
bid: [{impid: '2', native: {ver: '1.1', link: { url: 'link2' }, assets: [{id: 1, data: {value: 'Asset title text'}}]}}]
}]
}
};
let bidRequest = {
data: {},
bids: [
{
bidId: 'bidId1',
params: { mid: 1000 },
nativeParams: {
title: { required: true, len: 140 },
image: { required: false, wmin: 836, hmin: 627, w: 325, h: 300, mimes: ['image/jpg', 'image/gif'] },
body: { len: 140 }
}
},
{
bidId: 'bidId2',
params: { mid: 1000 },
nativeParams: {
title: { required: true, len: 140 },
image: { required: false, wmin: 836, hmin: 627, w: 325, h: 300, mimes: ['image/jpg', 'image/gif'] },
body: { len: 140 }
}
},
{
bidId: 'bidId3',
params: { mid: 1000 },
nativeParams: {
title: { required: true, len: 140 },
image: { required: false, wmin: 836, hmin: 627, w: 325, h: 300, mimes: ['image/jpg', 'image/gif'] },
body: { len: 140 }
}
},
{
bidId: 'bidId4',
params: { mid: 1000 },
nativeParams: {
title: { required: true, len: 140 },
image: { required: false, wmin: 836, hmin: 627, w: 325, h: 300, mimes: ['image/jpg', 'image/gif'] },
body: { len: 140 }
}
}
]
};
bids = spec.interpretResponse(serverResponse, bidRequest).map(bid => {
const { requestId, native: { clickUrl } } = bid;
return [ requestId, clickUrl ];
});
assert.equal(bids.length, 3);
assert.deepEqual(bids, [[ 'bidId1', 'link1' ], [ 'bidId2', 'link2' ], [ 'bidId4', 'link4' ]]);
});
it('should set correct values to bid', function () {
let serverResponse = {
body: {
id: null,
bidid: null,
seatbid: [{
bid: [
{
impid: '1',
price: 93.1231,
crid: '12312312',
native: {
assets: [],
link: { url: 'link' },
imptrackers: ['imptrackers url1', 'imptrackers url2']
},
dealid: 'deal-id',
adomain: [ 'demo.com' ]
}
]
}],
cur: 'NOK'
}
};
let bidRequest = {
data: {},
bids: [
{
bidId: 'bidId1',
params: { mid: 1000 },
mediaType: 'native',
nativeParams: {
title: { required: true, len: 140 },
image: { required: false, wmin: 836, hmin: 627, w: 325, h: 300, mimes: ['image/jpg', 'image/gif'] },
body: { len: 140 }
}
}
]
};
const bids = spec.interpretResponse(serverResponse, bidRequest);
const bid = serverResponse.body.seatbid[0].bid[0];
assert.deepEqual(bids[0].requestId, bidRequest.bids[0].bidId);
assert.deepEqual(bids[0].cpm, bid.price);
assert.deepEqual(bids[0].creativeId, bid.crid);
assert.deepEqual(bids[0].ttl, 360);
assert.deepEqual(bids[0].netRevenue, false);
assert.deepEqual(bids[0].currency, serverResponse.body.cur);
assert.deepEqual(bids[0].mediaType, 'native');
assert.deepEqual(bids[0].meta.mediaType, 'native');
assert.deepEqual(bids[0].meta.advertiserDomains, [ 'demo.com' ]);
assert.deepEqual(bids[0].dealId, 'deal-id');
});
it('should set correct native params', function () {
const bid = [
{
impid: '1',
price: 93.1231,
crid: '12312312',
native: {
assets: [
{
data: null,
id: 0,
img: null,
required: 0,
title: {text: 'title', len: null},
video: null
}, {
data: null,
id: 2,
img: {type: null, url: 'test.url.com/Files/58345/308185.jpg?bv=1', w: 30, h: 10},
required: 0,
title: null,
video: null
}, {
data: null,
id: 3,
img: {type: null, url: 'test.url.com/Files/58345/308200.jpg?bv=1', w: 100, h: 100},
required: 0,
title: null,
video: null
}, {
data: {type: null, len: null, value: 'body'},
id: 4,
img: null,
required: 0,
title: null,
video: null
}, {
data: {type: null, len: null, value: 'cta'},
id: 1,
img: null,
required: 0,
title: null,
video: null
}, {
data: {type: null, len: null, value: 'sponsoredBy'},
id: 5,
img: null,
required: 0,
title: null,
video: null
}
],
link: { url: 'clickUrl', clicktrackers: ['clickTracker1', 'clickTracker2'] },
imptrackers: ['imptrackers url1', 'imptrackers url2'],
jstracker: 'jstracker'
}
}
];
const serverResponse = {
body: {
id: null,
bidid: null,
seatbid: [{ bid }],
cur: 'NOK'
}
};
let bidRequest = {
data: {},
bids: [{ bidId: 'bidId1' }]
};
const result = spec.interpretResponse(serverResponse, bidRequest)[0].native;
const native = bid[0].native;
const assets = native.assets;
assert.deepEqual({
clickUrl: native.link.url,
clickTrackers: native.link.clicktrackers,
impressionTrackers: native.imptrackers,
javascriptTrackers: [ native.jstracker ],
title: assets[0].title.text,
icon: {url: assets[1].img.url, width: assets[1].img.w, height: assets[1].img.h},
image: {url: assets[2].img.url, width: assets[2].img.w, height: assets[2].img.h},
body: assets[3].data.value,
cta: assets[4].data.value,
sponsoredBy: assets[5].data.value
}, result);
});
it('should return empty when there is no bids in response', function () {
const serverResponse = {
body: {
id: null,
bidid: null,
seatbid: [{ bid: [] }],
cur: 'NOK'
}
};
let bidRequest = {
data: {},
bids: [{ bidId: 'bidId1' }]
};
const result = spec.interpretResponse(serverResponse, bidRequest)[0];
assert.ok(!result);
});
describe('banner', function () {
it('should set ad content on response', function () {
let serverResponse = {
body: {
seatbid: [{
bid: [{ impid: '1', adm: '<banner>' }]
}]
}
};
let bidRequest = {
data: {},
bids: [
{
bidId: 'bidId1',
params: { mid: 1000 },
mediaType: 'banner'
}
]
};
bids = spec.interpretResponse(serverResponse, bidRequest);
assert.equal(bids.length, 1);
assert.equal(bids[0].ad, '<banner>');
});
});
describe('video', function () {
it('should set vastXml on response', function () {
let serverResponse = {
body: {
seatbid: [{
bid: [{ impid: '1', adm: '<vast>' }]
}]
}
};
let bidRequest = {
data: {},
bids: [
{
bidId: 'bidId1',
params: { mid: 1000 },
mediaType: 'video'
}
]
};
bids = spec.interpretResponse(serverResponse, bidRequest);
assert.equal(bids.length, 1);
assert.equal(bids[0].vastXml, '<vast>');
});
it('should add renderer for outstream bids', function () {
let serverResponse = {
body: {
seatbid: [{
bid: [{ impid: '1', adm: '<vast>' }, { impid: '2', adm: '<vast>' }]
}]
}
};
let bidRequest = {
data: {},
bids: [
{
bidId: 'bidId1',
params: { mid: 1000 },
mediaType: 'video',
mediaTypes: {
video: {
context: 'outstream'
}
}
},
{
bidId: 'bidId2',
params: { mid: 1000 },
mediaType: 'video',
mediaTypes: {
video: {
constext: 'instream'
}
}
}
]
};
bids = spec.interpretResponse(serverResponse, bidRequest);
assert.ok(bids[0].renderer);
assert.equal(bids[1].renderer, undefined);
});
});
});
});