From 4257158a4d72302de6c3553c79541f9e672084de Mon Sep 17 00:00:00 2001 From: Devastator Date: Fri, 14 Apr 2017 21:41:12 +0800 Subject: [PATCH] - New Adapter: Innity (#1074) * Oct 27 Oct 27 * Added Innity Innity Adapter * Innity GPT Test Page * Restore Master pbjs_example_gpt.html * Changes based on jaiminpanchal27 feedback - Align innity in adapters.json - Format innity_spec.js - Add bidRequest into innity.js * Fixed formatting and remove unnecessary code (#1074) --- adapters.json | 1 + integrationExamples/gpt/pbjs_innity_gpt.html | 94 +++++++++++ src/adapters/innity.js | 56 +++++++ test/spec/adapters/innity_spec.js | 162 +++++++++++++++++++ 4 files changed, 313 insertions(+) create mode 100644 integrationExamples/gpt/pbjs_innity_gpt.html create mode 100644 src/adapters/innity.js create mode 100644 test/spec/adapters/innity_spec.js diff --git a/adapters.json b/adapters.json index bf65a6d033d..eb586a76cd4 100644 --- a/adapters.json +++ b/adapters.json @@ -19,6 +19,7 @@ "gumgum", "hiromedia", "indexExchange", + "innity", "kruxlink", "getintent", "inneractive", diff --git a/integrationExamples/gpt/pbjs_innity_gpt.html b/integrationExamples/gpt/pbjs_innity_gpt.html new file mode 100644 index 00000000000..7882d44791d --- /dev/null +++ b/integrationExamples/gpt/pbjs_innity_gpt.html @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + +

Prebid.js Test

+
Div-1
+
+ +
+ + \ No newline at end of file diff --git a/src/adapters/innity.js b/src/adapters/innity.js new file mode 100644 index 00000000000..0f877f6f8a1 --- /dev/null +++ b/src/adapters/innity.js @@ -0,0 +1,56 @@ +var bidfactory = require('../bidfactory.js'); +var bidmanager = require('../bidmanager.js'); +var adloader = require('../adloader.js'); +var utils = require('../utils.js'); +var CONSTANTS = require('../constants.json'); + +var InnityAdapter = function InnityAdapter() { + + function _callBids(params) { + var bidURL, bids = params.bids || [], requestURL = window.location.protocol + '//as.innity.com/synd/?cb=' + new Date().getTime() + '&ver=2&hb=1&output=js&'; + for (var i = 0; i < bids.length; i++) { + var requestParams = {}, bid = bids[i]; + requestParams.pub = bid.params.pub; + requestParams.zone = bid.params.zone; + // Page URL + requestParams.url = utils.getTopWindowUrl(); + // Sizes + var parseSized = utils.parseSizesInput(bid.sizes), arrSize = parseSized[0].split('x'); + requestParams.width = arrSize[0]; + requestParams.height = arrSize[1]; + // Callback function + requestParams.callback = "$$PREBID_GLOBAL$$._doInnityCallback"; + // Callback ID + requestParams.callback_uid = bid.bidId; + // Load Bidder URL + bidURL = requestURL + utils.parseQueryStringParameters(requestParams); + utils.logMessage('Innity.prebid, Bid ID: ' + bid.bidId + ', Pub ID: ' + bid.params.pub + ', Zone ID: ' + bid.params.zone + ', URL: ' + bidURL); + adloader.loadScript(bidURL); + } + } + + $$PREBID_GLOBAL$$._doInnityCallback = function(response) { + var bidObject, bidRequest, callbackID, libURL = window.location.protocol + "//cdn.innity.net/frame_util.js"; + callbackID = response.callback_uid; + bidRequest = utils.getBidRequest(callbackID); + if (response.cpm > 0) { + bidObject = bidfactory.createBid(CONSTANTS.STATUS.GOOD, bidRequest); + bidObject.bidderCode = 'innity'; + bidObject.cpm = parseFloat(response.cpm) / 100; + bidObject.ad = '' + response.tag; + bidObject.width = response.width; + bidObject.height = response.height; + } else { + bidObject = bidfactory.createBid(CONSTANTS.STATUS.NO_BID, bidRequest); + bidObject.bidderCode = 'innity'; + utils.logMessage('No Bid response from Innity request: ' + callbackID); + } + bidmanager.addBidResponse(bidRequest.placementCode, bidObject); + }; + + return { + callBids: _callBids + }; +}; + +module.exports = InnityAdapter; \ No newline at end of file diff --git a/test/spec/adapters/innity_spec.js b/test/spec/adapters/innity_spec.js new file mode 100644 index 00000000000..850cdf99041 --- /dev/null +++ b/test/spec/adapters/innity_spec.js @@ -0,0 +1,162 @@ +describe('innity adapter tests', function () { + + var expect = require('chai').expect; + var urlParse = require('url-parse'); + var querystringify = require('querystringify'); + var adapter = require('src/adapters/innity'); + var adLoader = require('src/adloader'); + var bidmanager = require('src/bidmanager'); + + var stubLoadScript; + + beforeEach(function () { + stubLoadScript = sinon.stub(adLoader, 'loadScript'); + }); + + afterEach(function () { + stubLoadScript.restore(); + }); + + describe('creation of bid url', function () { + + if (typeof($$PREBID_GLOBAL$$._bidsReceived) === "undefined") { + $$PREBID_GLOBAL$$._bidsReceived = []; + } + if (typeof($$PREBID_GLOBAL$$._bidsRequested) === "undefined") { + $$PREBID_GLOBAL$$._bidsRequested = []; + } + + it('bid request for single placement', function () { + + var params = { + bids: [{ + placementCode: '/19968336/header-bid-tag-0', + sizes: [[300,250]], + bidId: 'b12345', + bidder: 'innity', + params: { pub: '267', zone: '62546' } + }] + }; + + adapter().callBids(params); + + var bidUrl = stubLoadScript.getCall(0).args[0]; + + sinon.assert.calledOnce(stubLoadScript); + + var parsedBidUrl = urlParse(bidUrl); + var parsedBidUrlQueryString = querystringify.parse(parsedBidUrl.query); + + expect(parsedBidUrlQueryString).to.have.property('pub').and.to.equal('267'); + expect(parsedBidUrlQueryString).to.have.property('zone').and.to.equal('62546'); + expect(parsedBidUrlQueryString).to.have.property('width').and.to.equal('300'); + expect(parsedBidUrlQueryString).to.have.property('height').and.to.equal('250'); + }); + }); + + describe('handling bid response', function () { + it('should return complete bid response', function() { + + var stubAddBidResponse = sinon.stub(bidmanager, 'addBidResponse'); + + var params = { + bids: [{ + placementCode: '/19968336/header-bid-tag-0', + sizes: [[300,250]], + bidId: 'b12345', + bidder: 'innity', + params: { pub: '267', zone: '62546' } + }] + }; + + var response = { + cpm: 100, + width: 300, + height: 250, + callback_uid: 'b12345', + tag: '