Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bidfluence Adapter #1023

Merged
merged 10 commits into from
Mar 10, 2017
3 changes: 2 additions & 1 deletion adapters.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"adform",
"adkernel",
"admedia",
"bidfluence",
"vertamedia",
"aol",
"appnexus",
Expand All @@ -29,7 +30,7 @@
"rhythmone",
"rubicon",
"smartyads",
"smartadserver",
"smartadserver",
"sekindoUM",
"sonobi",
"sovrn",
Expand Down
64 changes: 64 additions & 0 deletions src/adapters/bidfluence.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
const bidmanager = require('../bidmanager.js');
const bidfactory = require('../bidfactory.js');
const utils = require('../utils.js');

var BidfluenceAdapter = function BidfluenceAdapter() {
//Callback

$$PREBID_GLOBAL$$.bfPbjsCB = function (bfr) {
var bidRequest = utils.getBidRequest(bfr.cbID);
var bidObject = null;
if (bfr.cpm > 0) {
bidObject = bidfactory.createBid(1, bidRequest);
bidObject.bidderCode = 'bidfluence';
bidObject.cpm = bfr.cpm;
bidObject.ad = bfr.ad;
bidObject.width = bfr.width;
bidObject.height = bfr.height;
} else {
bidObject = bidfactory.createBid(2, bidRequest);
bidObject.bidderCode = 'bidfluence';
}

bidmanager.addBidResponse(bfr.placementCode, bidObject);
};

function _callBids(params) {
var bfbids = params.bids || [];
for (var i = 0; i < bfbids.length; i++) {
var bid = bfbids[i];
call(bid);
}
}

function call(bid) {
var adunitId = utils.getBidIdParameter('adunitId', bid.params);
/* jshint ignore:start */
var publisherId = utils.getBidIdParameter('pubId', bid.params);
var reservePrice = utils.getBidIdParameter('reservePrice', bid.params);
var pbjsBfobj = {
placementCode: bid.placementCode,
cbID: bid.bidId
};
/* jshint ignore:end */

var s = document.createElement('script');
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is recommended to use loadscript function

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't use it because I need to set the Id of the new script element as per line 43, seems the loadscript function does not allow it.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alright, one question, why would you need an id on script element

Copy link
Contributor Author

@francescocristallo francescocristallo Mar 9, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was for legacy code, I spent some time today to fix that. The adapter now loadscript function as requested, all the update requested are complete. Thanks

s.async = true;
s.id = adunitId;
s.onload = function () {
/* jshint ignore:start */
FORGE.init([adunitId, publisherId, pbjsBfobj, reservePrice]);
FORGE.fire();
/* jshint ignore:end */
};
s.src = "//bidfluence.azureedge.net/forge.js";
var b = document.getElementsByTagName('head')[0];
b.parentNode.insertBefore(s, b);
}

return {
callBids: _callBids
};
};

module.exports = BidfluenceAdapter;
74 changes: 74 additions & 0 deletions test/spec/adapters/bidfluence_spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
describe('Bidfluence Adapter', () => {
const expect = require('chai').expect;
const adapter = require('src/adapters/bidfluence');
const bidmanager = require('src/bidmanager');

var REQUEST = {
bidderCode: "bidfluence",
sizes: [[300, 250]],
placementCode: "div-1",
bids: [{
bidder: 'bidfluence',
params: {
pubId: "747efe9c-5f8a-4b6e-872b-8e9939816298",
adunitId: "c4bbd807-7d22-485f-80f1-ba008ef1c619"
}
}]
};

var RESPONSE = {
ad: "ad-code",
cpm: 0.9,
width: 300,
height: 250,
placementCode: "div-1"
};

var NO_RESPONSE = {
ad: "ad-code",
cpm: 0,
width: 300,
height: 250,
placementCode: "div-1"
};

it('Should exist and be a function', function () {
expect($$PREBID_GLOBAL$$.bfPbjsCB).to.exist.and.to.be.a('function');
});

it('Shoud push a valid bid', () => {

var stubAddBidResponse = sinon.stub(bidmanager, "addBidResponse");
pbjs._bidsRequested.push(REQUEST);
adapter();
$$PREBID_GLOBAL$$.bfPbjsCB(RESPONSE);

var bidPlacementCode1 = stubAddBidResponse.getCall(0).args[0];
var bidObject1 = stubAddBidResponse.getCall(0).args[1];

expect(bidPlacementCode1).to.equal("div-1",);
expect(bidObject1.getStatusCode()).to.equal(1);
expect(bidObject1.bidderCode).to.equal('bidfluence');

stubAddBidResponse.restore();
});

it('Shoud push an empty bid', () => {

var stubAddBidResponse = sinon.stub(bidmanager, "addBidResponse");
pbjs._bidsRequested.push(REQUEST);
adapter();

$$PREBID_GLOBAL$$.bfPbjsCB(NO_RESPONSE);

var bidPlacementCode1 = stubAddBidResponse.getCall(0).args[0];
var bidObject1 = stubAddBidResponse.getCall(0).args[1];

expect(bidPlacementCode1).to.equal("div-1",);
expect(bidObject1.getStatusCode()).to.equal(2);
expect(bidObject1.bidderCode).to.equal('bidfluence');

stubAddBidResponse.restore();

});
});