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
57 changes: 57 additions & 0 deletions src/adapters/bidfluence.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
const bidmanager = require('../bidmanager.js');
const bidfactory = require('../bidfactory.js');
const utils = require('../utils.js');
const adloader = require('../adloader');

var BidfluenceAdapter = function BidfluenceAdapter() {

const scriptUrl = "//bidfluence.azureedge.net/forge.js";

$$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);
var publisherId = utils.getBidIdParameter('pubId', bid.params);
var reservePrice = utils.getBidIdParameter('reservePrice', bid.params);
var pbjsBfobj = {
placementCode: bid.placementCode,
cbID: bid.bidId
};

var cb = function () {
/* globals FORGE */
FORGE.init([adunitId, publisherId, pbjsBfobj, reservePrice]);
};

adloader.loadScript(scriptUrl, cb);
}
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();

});
});