Skip to content

Commit

Permalink
rtbhouseBidAdapter changes (prebid#3241)
Browse files Browse the repository at this point in the history
* Add transactionId support

* Change site getting method

* Add bidfloor param
  • Loading branch information
Kamoris authored and Pedro López Jiménez committed Mar 18, 2019
1 parent 33e69f4 commit 12a1619
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 21 deletions.
21 changes: 16 additions & 5 deletions modules/rtbhouseBidAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,12 @@ export const spec = {
const request = {
id: validBidRequests[0].auctionId,
imp: validBidRequests.map(slot => mapImpression(slot)),
site: mapSite(validBidRequests),
site: mapSite(validBidRequests, bidderRequest),
cur: DEFAULT_CURRENCY_ARR,
test: validBidRequests[0].params.test || 0
test: validBidRequests[0].params.test || 0,
source: {
tid: validBidRequests[0].transactionId
}
};
if (bidderRequest && bidderRequest.gdprConsent && bidderRequest.gdprConsent.gdprApplies) {
const consentStr = (bidderRequest.gdprConsent.consentString)
Expand Down Expand Up @@ -89,12 +92,19 @@ registerBidder(spec);
* @returns {object} Imp by OpenRTB 2.5 §3.2.4
*/
function mapImpression(slot) {
return {
const imp = {
id: slot.bidId,
banner: mapBanner(slot),
native: mapNative(slot),
tagid: slot.adUnitCode.toString()
};

const bidfloor = parseFloat(slot.params.bidfloor);
if (bidfloor) {
imp.bidfloor = bidfloor
}

return imp;
}

/**
Expand All @@ -118,17 +128,18 @@ function mapBanner(slot) {

/**
* @param {object} slot Ad Unit Params by Prebid
* @param {object} bidderRequest by Prebid
* @returns {object} Site by OpenRTB 2.5 §3.2.13
*/
function mapSite(slot) {
function mapSite(slot, bidderRequest) {
const pubId = slot && slot.length > 0
? slot[0].params.publisherId
: 'unknown';
return {
publisher: {
id: pubId.toString(),
},
page: utils.getTopWindowUrl(),
page: bidderRequest.refererInfo.referer,
name: utils.getOrigin()
}
}
Expand Down
6 changes: 4 additions & 2 deletions modules/rtbhouseBidAdapter.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ Maintainer: prebid@rtbhouse.com
# Description

Connects to RTB House unique demand.
Banner formats are supported.
Banner and native formats are supported.
Unique publisherId is required.
Please reach out to pmp@rtbhouse.com to receive your own

Expand All @@ -23,7 +23,8 @@ Please reach out to pmp@rtbhouse.com to receive your own
bidder: "rtbhouse",
params: {
region: 'prebid-eu',
publisherId: 'PREBID_TEST_ID'
publisherId: 'PREBID_TEST_ID',
bidfloor: 0.01 // optional
}
}
]
Expand All @@ -50,6 +51,7 @@ Please reach out to pmp@rtbhouse.com to receive your own
params: {
region: 'prebid-eu',
publisherId: 'PREBID_TEST_ID'
bidfloor: 0.01 // optional
}
}
]
Expand Down
63 changes: 49 additions & 14 deletions test/spec/modules/rtbhouseBidAdapter_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,26 @@ describe('RTBHouseAdapter', () => {
'sizes': [[300, 250], [300, 600]],
'bidId': '30b31c1838de1e',
'bidderRequestId': '22edbae2733bf6',
'auctionId': '1d1a030790a475'
'auctionId': '1d1a030790a475',
'transactionId': 'example-transaction-id',
}
];
const bidderRequest = {
'refererInfo': {
'numIframes': 0,
'reachedTop': true,
'referer': 'http://example.com',
'stack': ['http://example.com']
}
};

it('should build test param into the request', () => {
let builtTestRequest = spec.buildRequests(bidRequests).data;
let builtTestRequest = spec.buildRequests(bidRequests, bidderRequest).data;
expect(JSON.parse(builtTestRequest).test).to.equal(1);
});

it('should build valid OpenRTB banner object', () => {
const request = JSON.parse(spec.buildRequests((bidRequests)).data);
const request = JSON.parse(spec.buildRequests(bidRequests, bidderRequest).data);
const imp = request.imp[0];
expect(imp.banner).to.deep.equal({
w: 300,
Expand All @@ -80,15 +89,15 @@ describe('RTBHouseAdapter', () => {
it('sends bid request to ENDPOINT via POST', function () {
let bidRequest = Object.assign([], bidRequests);
delete bidRequest[0].params.test;
const request = spec.buildRequests(bidRequest);
const request = spec.buildRequests(bidRequest, bidderRequest);
expect(request.url).to.equal('https://prebid-eu.creativecdn.com/bidder/prebid/bids');
expect(request.method).to.equal('POST');
});

it('should not populate GDPR if for non-EEA users', function () {
let bidRequest = Object.assign([], bidRequests);
delete bidRequest[0].params.test;
const request = spec.buildRequests(bidRequest);
const request = spec.buildRequests(bidRequest, bidderRequest);
let data = JSON.parse(request.data);
expect(data).to.not.have.property('regs');
expect(data).to.not.have.property('user');
Expand All @@ -97,12 +106,15 @@ describe('RTBHouseAdapter', () => {
it('should populate GDPR and consent string if available for EEA users', function () {
let bidRequest = Object.assign([], bidRequests);
delete bidRequest[0].params.test;
const request = spec.buildRequests(bidRequest, {
gdprConsent: {
gdprApplies: true,
consentString: 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A=='
}
});
const request = spec.buildRequests(
bidRequest,
Object.assign({}, bidderRequest, {
gdprConsent: {
gdprApplies: true,
consentString: 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A=='
}
})
);
let data = JSON.parse(request.data);
expect(data.regs.ext.gdpr).to.equal(1);
expect(data.user.ext.consent).to.equal('BOJ8RZsOJ8RZsABAB8AAAAAZ-A');
Expand All @@ -111,19 +123,41 @@ describe('RTBHouseAdapter', () => {
it('should populate GDPR and empty consent string if available for EEA users without consent string but with consent', function () {
let bidRequest = Object.assign([], bidRequests);
delete bidRequest[0].params.test;
const request = spec.buildRequests(bidRequest, {gdprConsent: {gdprApplies: true}});
const request = spec.buildRequests(
bidRequest,
Object.assign({}, bidderRequest, {
gdprConsent: {
gdprApplies: true
}
})
);
let data = JSON.parse(request.data);
expect(data.regs.ext.gdpr).to.equal(1);
expect(data.user.ext.consent).to.equal('');
});

it('should include banner imp in request', () => {
const bidRequest = Object.assign([], bidRequests);
const request = spec.buildRequests(bidRequest);
const request = spec.buildRequests(bidRequest, bidderRequest);
const data = JSON.parse(request.data);
expect(data.imp[0].banner).to.not.be.empty;
});

it('should include source.tid in request', () => {
const bidRequest = Object.assign([], bidRequests);
const request = spec.buildRequests(bidRequest, bidderRequest);
const data = JSON.parse(request.data);
expect(data.source.tid).to.equal('example-transaction-id');
});

it('should include bidfloor in request if available', () => {
const bidRequest = Object.assign([], bidRequests);
bidRequest[0].params.bidfloor = 0.01;
const request = spec.buildRequests(bidRequest, bidderRequest);
const data = JSON.parse(request.data);
expect(data.imp[0].bidfloor).to.equal(0.01)
});

describe('native imp', () => {
function basicRequest(extension) {
return Object.assign({
Expand All @@ -139,7 +173,8 @@ describe('RTBHouseAdapter', () => {
}

function buildImp(request) {
return JSON.parse(spec.buildRequests([request]).data).imp[0];
const resultRequest = spec.buildRequests([request], bidderRequest);
return JSON.parse(resultRequest.data).imp[0];
}

it('should extract native params when single mediaType', () => {
Expand Down

0 comments on commit 12a1619

Please sign in to comment.