mk9-prebid
Version:
Header Bidding Management Library
364 lines (324 loc) • 10.9 kB
JavaScript
import { expect } from 'chai';
import { spec } from 'modules/braveBidAdapter.js';
const request_native = {
code: 'brave-native-prebid',
mediaTypes: {
native: {
title: {
required: true,
len: 800
},
image: {
required: true,
len: 80
},
sponsoredBy: {
required: true
},
clickUrl: {
required: true
},
privacyLink: {
required: false
},
body: {
required: true
},
icon: {
required: true,
sizes: [50, 50]
}
}
},
bidder: 'brave',
params: {
placementId: 'to0QI2aPgkbBZq6vgf0oHitouZduz0qw'
}
};
const request_banner = {
code: 'brave-prebid',
mediaTypes: {
banner: {
sizes: [[300, 250]]
}
},
bidder: 'brave',
params: {
placementId: 'to0QI2aPgkbBZq6vgf0oHitouZduz0qw'
}
}
const bidRequest = {
gdprConsent: {
consentString: 'HFIDUYFIUYIUYWIPOI87392DSU',
gdprApplies: true
},
uspConsent: 'uspConsentString',
bidderRequestId: 'testid',
refererInfo: {
referer: 'testdomain.com'
},
timeout: 700
}
const request_video = {
code: 'brave-video-prebid',
mediaTypes: { video: {
minduration: 1,
maxduration: 999,
boxingallowed: 1,
skip: 0,
mimes: [
'application/javascript',
'video/mp4'
],
playerSize: [[768, 1024]],
protocols: [
2, 3
],
linearity: 1,
api: [
1,
2
]
}
},
bidder: 'brave',
params: {
placementId: 'to0QI2aPgkbBZq6vgf0oHitouZduz0qw'
}
}
const response_banner = {
id: 'request_id',
bidid: 'request_imp_id',
seatbid: [{
bid: [{
id: 'bid_id',
impid: 'request_imp_id',
price: 5,
adomain: ['example.com'],
adm: 'admcode',
crid: 'crid',
ext: {
mediaType: 'banner'
}
}]
}]
};
const response_video = {
id: 'request_id',
bidid: 'request_imp_id',
seatbid: [{
bid: [{
id: 'bid_id',
impid: 'request_imp_id',
price: 5,
adomain: ['example.com'],
adm: 'admcode',
crid: 'crid',
ext: {
mediaType: 'video'
}
}],
}],
};
let imgData = {
url: `https://example.com/image`,
w: 1200,
h: 627
};
const response_native = {
id: 'request_id',
bidid: 'request_imp_id',
seatbid: [{
bid: [{
id: 'bid_id',
impid: 'request_imp_id',
price: 5,
adomain: ['example.com'],
adm: { native:
{
assets: [
{id: 1, title: 'dummyText'},
{id: 3, image: imgData},
{
id: 5,
data: {value: 'organization.name'}
}
],
link: {url: 'example.com'},
imptrackers: ['tracker1.com', 'tracker2.com', 'tracker3.com'],
jstracker: 'tracker1.com'
}
},
crid: 'crid',
ext: {
mediaType: 'native'
}
}],
}],
};
describe('BraveBidAdapter', function() {
describe('isBidRequestValid', function() {
it('should return true when required params found', function () {
expect(spec.isBidRequestValid(request_banner)).to.equal(true);
});
it('should return false when required params are not passed', function () {
let bid = Object.assign({}, request_banner);
bid.params = {
'IncorrectParam': 0
};
expect(spec.isBidRequestValid(bid)).to.equal(false);
});
});
describe('build Native Request', function () {
const request = spec.buildRequests([request_native], bidRequest);
it('Creates a ServerRequest object with method, URL and data', function () {
expect(request).to.exist;
expect(request.method).to.exist;
expect(request.url).to.exist;
expect(request.data).to.exist;
});
it('sends bid request to our endpoint via POST', function () {
expect(request.method).to.equal('POST');
});
it('Returns valid URL', function () {
expect(request.url).to.equal('https://point.bravegroup.tv/?t=2&partner=to0QI2aPgkbBZq6vgf0oHitouZduz0qw');
});
it('Returns empty data if no valid requests are passed', function () {
let serverRequest = spec.buildRequests([]);
expect(serverRequest).to.be.an('array').that.is.empty;
});
});
describe('build Banner Request', function () {
const request = spec.buildRequests([request_banner], bidRequest);
it('Creates a ServerRequest object with method, URL and data', function () {
expect(request).to.exist;
expect(request.method).to.exist;
expect(request.url).to.exist;
expect(request.data).to.exist;
});
it('sends bid request to our endpoint via POST', function () {
expect(request.method).to.equal('POST');
});
it('Returns valid URL', function () {
expect(request.url).to.equal('https://point.bravegroup.tv/?t=2&partner=to0QI2aPgkbBZq6vgf0oHitouZduz0qw');
});
});
describe('build Video Request', function () {
const request = spec.buildRequests([request_video], bidRequest);
it('Creates a ServerRequest object with method, URL and data', function () {
expect(request).to.exist;
expect(request.method).to.exist;
expect(request.url).to.exist;
expect(request.data).to.exist;
});
it('sends bid request to our endpoint via POST', function () {
expect(request.method).to.equal('POST');
});
it('Returns valid URL', function () {
expect(request.url).to.equal('https://point.bravegroup.tv/?t=2&partner=to0QI2aPgkbBZq6vgf0oHitouZduz0qw');
});
});
describe('interpretResponse', function () {
it('Empty response must return empty array', function() {
const emptyResponse = null;
let response = spec.interpretResponse(emptyResponse);
expect(response).to.be.an('array').that.is.empty;
})
it('Should interpret banner response', function () {
const bannerResponse = {
body: response_banner
}
const expectedBidResponse = {
requestId: response_banner.seatbid[0].bid[0].impid,
cpm: response_banner.seatbid[0].bid[0].price,
width: response_banner.seatbid[0].bid[0].w,
height: response_banner.seatbid[0].bid[0].h,
ttl: response_banner.ttl || 1200,
currency: response_banner.cur || 'USD',
netRevenue: true,
creativeId: response_banner.seatbid[0].bid[0].crid,
dealId: response_banner.seatbid[0].bid[0].dealid,
mediaType: 'banner',
ad: response_banner.seatbid[0].bid[0].adm
}
let bannerResponses = spec.interpretResponse(bannerResponse);
expect(bannerResponses).to.be.an('array').that.is.not.empty;
let dataItem = bannerResponses[0];
expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'ad', 'ttl', 'creativeId',
'netRevenue', 'currency', 'dealId', 'mediaType');
expect(dataItem.requestId).to.equal(expectedBidResponse.requestId);
expect(dataItem.cpm).to.equal(expectedBidResponse.cpm);
expect(dataItem.ad).to.equal(expectedBidResponse.ad);
expect(dataItem.ttl).to.equal(expectedBidResponse.ttl);
expect(dataItem.creativeId).to.equal(expectedBidResponse.creativeId);
expect(dataItem.netRevenue).to.be.true;
expect(dataItem.currency).to.equal(expectedBidResponse.currency);
expect(dataItem.width).to.equal(expectedBidResponse.width);
expect(dataItem.height).to.equal(expectedBidResponse.height);
});
it('Should interpret video response', function () {
const videoResponse = {
body: response_video
}
const expectedBidResponse = {
requestId: response_video.seatbid[0].bid[0].impid,
cpm: response_video.seatbid[0].bid[0].price,
width: response_video.seatbid[0].bid[0].w,
height: response_video.seatbid[0].bid[0].h,
ttl: response_video.ttl || 1200,
currency: response_video.cur || 'USD',
netRevenue: true,
creativeId: response_video.seatbid[0].bid[0].crid,
dealId: response_video.seatbid[0].bid[0].dealid,
mediaType: 'video',
vastUrl: response_video.seatbid[0].bid[0].adm
}
let videoResponses = spec.interpretResponse(videoResponse);
expect(videoResponses).to.be.an('array').that.is.not.empty;
let dataItem = videoResponses[0];
expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'vastUrl', 'ttl', 'creativeId',
'netRevenue', 'currency', 'dealId', 'mediaType');
expect(dataItem.requestId).to.equal(expectedBidResponse.requestId);
expect(dataItem.cpm).to.equal(expectedBidResponse.cpm);
expect(dataItem.vastUrl).to.equal(expectedBidResponse.vastUrl)
expect(dataItem.ttl).to.equal(expectedBidResponse.ttl);
expect(dataItem.creativeId).to.equal(expectedBidResponse.creativeId);
expect(dataItem.netRevenue).to.be.true;
expect(dataItem.currency).to.equal(expectedBidResponse.currency);
expect(dataItem.width).to.equal(expectedBidResponse.width);
expect(dataItem.height).to.equal(expectedBidResponse.height);
});
it('Should interpret native response', function () {
const nativeResponse = {
body: response_native
}
const expectedBidResponse = {
requestId: response_native.seatbid[0].bid[0].impid,
cpm: response_native.seatbid[0].bid[0].price,
width: response_native.seatbid[0].bid[0].w,
height: response_native.seatbid[0].bid[0].h,
ttl: response_native.ttl || 1200,
currency: response_native.cur || 'USD',
netRevenue: true,
creativeId: response_native.seatbid[0].bid[0].crid,
dealId: response_native.seatbid[0].bid[0].dealid,
mediaType: 'native',
native: {clickUrl: response_native.seatbid[0].bid[0].adm.native.link.url}
}
let nativeResponses = spec.interpretResponse(nativeResponse);
expect(nativeResponses).to.be.an('array').that.is.not.empty;
let dataItem = nativeResponses[0];
expect(dataItem).to.have.all.keys('requestId', 'cpm', 'width', 'height', 'native', 'ttl', 'creativeId',
'netRevenue', 'currency', 'dealId', 'mediaType');
expect(dataItem.requestId).to.equal(expectedBidResponse.requestId);
expect(dataItem.cpm).to.equal(expectedBidResponse.cpm);
expect(dataItem.native.clickUrl).to.equal(expectedBidResponse.native.clickUrl)
expect(dataItem.ttl).to.equal(expectedBidResponse.ttl);
expect(dataItem.creativeId).to.equal(expectedBidResponse.creativeId);
expect(dataItem.netRevenue).to.be.true;
expect(dataItem.currency).to.equal(expectedBidResponse.currency);
expect(dataItem.width).to.equal(expectedBidResponse.width);
expect(dataItem.height).to.equal(expectedBidResponse.height);
});
});
})