From 82686c9993f4ef21a429f554768f061a09c5a562 Mon Sep 17 00:00:00 2001 From: Dmitriy Shimko Date: Thu, 13 Jul 2017 09:51:31 +0300 Subject: [PATCH 01/11] Adding Orbitsoft module --- modules/orbitsoftBidAdapter.js | 228 +++++++++++ test/spec/modules/orbitsoftBidAdapter_spec.js | 358 ++++++++++++++++++ 2 files changed, 586 insertions(+) create mode 100644 modules/orbitsoftBidAdapter.js create mode 100644 test/spec/modules/orbitsoftBidAdapter_spec.js diff --git a/modules/orbitsoftBidAdapter.js b/modules/orbitsoftBidAdapter.js new file mode 100644 index 00000000000..e4fe863d645 --- /dev/null +++ b/modules/orbitsoftBidAdapter.js @@ -0,0 +1,228 @@ +import { getBidRequest } from 'src/utils'; +import adaptermanager from 'src/adaptermanager'; + +let CONSTANTS = require('src/constants'); +let utils = require('src/utils'); +let adloader = require('src/adloader'); +let bidmanager = require('src/bidmanager'); +let bidfactory = require('src/bidfactory'); +let Adapter = require('src/adapter'); + +let styleParamsToFieldsMap = { + 'title.family': 'f1', // headerFont + 'title.size': 'fs1', // headerFontSize + 'title.weight': 'w1', // headerWeight + 'title.style': 's1', // headerStyle + 'title.color': 'c3', // headerColor + 'description.family': 'f2', // descriptionFont + 'description.size': 'fs2', // descriptionFontSize + 'description.weight': 'w2', // descriptionWeight + 'description.style': 's2', // descriptionStyle + 'description.color': 'c4', // descriptionColor + 'url.family': 'f3', // urlFont + 'url.size': 'fs3', // urlFontSize + 'url.weight': 'w3', // urlWeight + 'url.style': 's3', // urlStyle + 'url.color': 'c5', // urlColor + 'colors.background': 'c2', // borderColor + 'colors.border': 'c1', // borderColor + 'colors.link': 'c6', // lnkColor +}; + +let OrbitsoftAdapter; +OrbitsoftAdapter = function OrbitsoftAdapter() { + let baseAdapter = Adapter.createNew('orbitsoft'); + + baseAdapter.callBids = function (params) { + let bids = params.bids || []; + + if (bids.length === 0) { + return; + } + + for (let i = 0; i < bids.length; i++) { + let bidRequest = bids[i]; + let callbackId = bidRequest.bidId; + adloader.loadScript(buildJPTCall(bidRequest, callbackId)); + } + }; + + function buildJPTCall(bid, callbackId) { + // Determine tag params + let placementId = utils.getBidIdParameter('placementId', bid.params); + + let referrer = utils.getBidIdParameter('ref', bid.params); + let location = utils.getBidIdParameter('loc', bid.params); + let jptCall = utils.getBidIdParameter('requestUrl', bid.params); + if (jptCall.length === 0) { + // No param requestUrl + // @if NODE_ENV='debug' + utils.logMessage('No param requestUrl'); + // @endif + return null; + } + else { + jptCall += '?'; + } + + jptCall = utils.tryAppendQueryString(jptCall, 'callback', '$$PREBID_GLOBAL$$.handleOASCB'); + jptCall = utils.tryAppendQueryString(jptCall, 'callback_uid', callbackId); + jptCall = utils.tryAppendQueryString(jptCall, 'scid', placementId); + + // Sizes takes a bit more logic + let sizeQueryString; + let parsedSizes = utils.parseSizesInput(bid.sizes); + + // Combine string into proper query string + let parsedSizesLength = parsedSizes.length; + if (parsedSizesLength > 0) { + // First value should be "size" + sizeQueryString = 'size=' + parsedSizes[0]; + jptCall += sizeQueryString + '&'; + } + + // Append custom attributes: + let paramsCopy = Object.assign({}, bid.params); + + // Delete attributes already used + delete paramsCopy.placementId; + delete paramsCopy.referrer; + delete paramsCopy.style; + delete paramsCopy.customParams; + + // Get the reminder + jptCall += utils.parseQueryStringParameters(paramsCopy); + + // Append location & referrer + if (location === '') { + location = utils.getTopWindowUrl(); + } + if (referrer === '') { + referrer = window.top.document.referrer; + } + jptCall = utils.tryAppendQueryString(jptCall, 'loc', location); + jptCall = utils.tryAppendQueryString(jptCall, 'ref', referrer); + + // Remove the trailing "&" + jptCall = removeTrailingAmp(jptCall); + + // @if NODE_ENV='debug' + utils.logMessage('jpt request built: ' + jptCall); + // @endif + + // Append a timer here to track latency + bid.startTime = new Date().getTime(); + + return jptCall; + } + + // Remove the trailing "&" + function removeTrailingAmp(url) { + if (url.lastIndexOf('&') === url.length - 1) { + url = url.substring(0, url.length - 1); + } + return url; + } + + // Expose the callback to the global object + $$PREBID_GLOBAL$$.handleOASCB = function (jptResponseObj) { + let bidCode; + + if (jptResponseObj && jptResponseObj.callback_uid) { + let responseCPM; + let id = jptResponseObj.callback_uid; + let placementCode = ''; + let bidObj = getBidRequest(id); + if (bidObj) { + bidCode = bidObj.bidder; + + placementCode = bidObj.placementCode; + + // Set the status + bidObj.status = CONSTANTS.STATUS.GOOD; + } + + // @if NODE_ENV='debug' + utils.logMessage('JSONP callback function called for ad ID: ' + id); + // @endif + + let bid = []; + if (jptResponseObj.cpm && jptResponseObj.cpm !== 0) { + // Store bid response + responseCPM = jptResponseObj.cpm; + // Bid status is good (indicating 1) + bid = bidfactory.createBid(CONSTANTS.STATUS.GOOD, bidObj); + bid.bidderCode = bidCode; + bid.cpm = responseCPM; + bid.adUrl = jptResponseObj.content_url; + bid.width = jptResponseObj.width; + bid.height = jptResponseObj.height; + + // Styles params + let styles = utils.getBidIdParameter('style', bidObj.params); + let stylesParams = {}; + for (let currentValue in styles) { + if (styles.hasOwnProperty(currentValue)) { + let currentStyle = styles[currentValue]; + for (let field in currentStyle) { + if (currentStyle.hasOwnProperty(field)) { + let styleField = styleParamsToFieldsMap[currentValue + '.' + field]; + if (styleField !== undefined) { + stylesParams[styleField] = currentStyle[field]; + } + } + } + } + } + bid.adUrl += '&' + utils.parseQueryStringParameters(stylesParams); + + // Custom params + let customParams = utils.getBidIdParameter('customParams', bidObj.params); + let customParamsArray = {}; + for (let customField in customParams) { + if (customParams.hasOwnProperty(customField)) { + customParamsArray['c.' + customField] = customParams[customField]; + } + } + let customParamsLink = utils.parseQueryStringParameters(customParamsArray); + if (customParamsLink) { + // Don't append a "&" here, we have already done it in parseQueryStringParameters + bid.adUrl += customParamsLink; + } + + // Remove the trailing "&" + bid.adUrl = removeTrailingAmp(bid.adUrl); + + bidmanager.addBidResponse(placementCode, bid); + } else { + // No response data + // @if NODE_ENV='debug' + utils.logMessage('No prebid response from Orbitsoft for placement code ' + placementCode); + // @endif + // indicate that there is no bid for this placement + bid = bidfactory.createBid(CONSTANTS.STATUS.NO_BID, bidObj); + bid.bidderCode = bidCode; + bidmanager.addBidResponse(placementCode, bid); + } + } else { + // No response data + // @if NODE_ENV='debug' + utils.logMessage('No prebid response for placement'); + // @endif + } + }; + + return { + callBids: baseAdapter.callBids, + setBidderCode: baseAdapter.setBidderCode, + buildJPTCall: buildJPTCall + }; +}; + +adaptermanager.registerBidAdapter(new OrbitsoftAdapter, 'orbitsoft'); +adaptermanager.aliasBidAdapter('orbitsoft', 'orbitadserving'); +adaptermanager.aliasBidAdapter('orbitsoft', 'orbitscripts'); +adaptermanager.aliasBidAdapter('orbitsoft', 'orbitsoftcom'); +adaptermanager.aliasBidAdapter('orbitsoft', 'orbitsoftru'); + +module.exports = OrbitsoftAdapter; diff --git a/test/spec/modules/orbitsoftBidAdapter_spec.js b/test/spec/modules/orbitsoftBidAdapter_spec.js new file mode 100644 index 00000000000..efe25492e54 --- /dev/null +++ b/test/spec/modules/orbitsoftBidAdapter_spec.js @@ -0,0 +1,358 @@ +describe('Orbitsoft Adapter tests', function () { + const expect = require('chai').expect; + const assert = require('chai').assert; + const adapter = require('modules/orbitsoftBidAdapter'); + const bidmanager = require('src/bidmanager'); + const adloader = require('src/adloader'); + const CONSTANTS = require('src/constants.json'); + + const contentCallEndPoint = 'http://orbitsoft.com/ads/show/content?'; + const jptCallEndPoint = 'http://orbitsoft.com/ads/show/hb?'; + + before(() => sinon.stub(document.body, 'appendChild')); + after(() => document.body.appendChild.restore()); + + describe('test orbitsoft callback response', function () { + it('should exist and be a function', function () { + expect(pbjs.handleOASCB).to.exist.and.to.be.a('function'); + }); + + it('should add empty bid responses if no bids returned', function () { + let stubAddBidResponse = sinon.stub(bidmanager, 'addBidResponse'); + + let bidderRequest = { + bidderCode: 'orbitsoft', + bids: [ + { + bidId: 'bidIdOrbitsoft1', + bidder: 'orbitsoft', + params: { + placementId: '16', + requestUrl: jptCallEndPoint + }, + sizes: [[300, 250]], + placementCode: 'test-div-12345' + } + ] + }; + + // Empty bid response + let response = { + callback_uid: 'bidIdOrbitsoft1', + cpm: 0 + }; + + pbjs._bidsRequested.push(bidderRequest); + // Adapter needs to be called, in order for the stub to register. + adapter(); + + pbjs.handleOASCB(response); + + let bidPlacementCode1 = stubAddBidResponse.getCall(0).args[0]; + let bidResponse1 = stubAddBidResponse.getCall(0).args[1]; + expect(bidPlacementCode1).to.equal('test-div-12345'); + expect(bidResponse1.getStatusCode()).to.equal(CONSTANTS.STATUS.NO_BID); + expect(bidResponse1.bidderCode).to.equal('orbitsoft'); + stubAddBidResponse.restore(); + }); + + it('should add empty bid responses if no bidId returned', function () { + let stubAddBidResponse = sinon.stub(bidmanager, 'addBidResponse'); + + let bidderRequest = { + bidderCode: 'orbitsoft', + bids: [ + { + bidId: 'bidIdOrbitsoft1', + bidder: 'orbitsoft', + params: { + placementId: '16', + requestUrl: jptCallEndPoint + }, + sizes: [[300, 250]], + placementCode: 'test-div-12345' + } + ] + }; + + // Empty bid response + let response = { + cpm: 0 + }; + + pbjs._bidsRequested.push(bidderRequest); + // Adapter needs to be called, in order for the stub to register. + adapter(); + + pbjs.handleOASCB(response); + + expect(stubAddBidResponse.getCall(0)).to.equal(null); + stubAddBidResponse.restore(); + }); + }); + + it('should add bid responses if bids are returned', function () { + let stubAddBidResponse = sinon.stub(bidmanager, 'addBidResponse'); + + let bidderRequest = { + bidderCode: 'orbitsoft', + bids: [ + { + bidId: 'bidIdOrbitsoft1', + bidder: 'orbitsoft', + params: { + placementId: '16', + requestUrl: jptCallEndPoint + }, + sizes: [[300, 250]], + placementCode: 'test-div-12345' + } + ] + }; + + // Bid response + let response = { + callback_uid: 'bidIdOrbitsoft1', + content_url: contentCallEndPoint + 'id=1_201707031440_56069e8e70318303e5869fad86722cb0', + cpm: 0.03, + width: 300, + height: 250 + }; + + pbjs._bidsRequested.push(bidderRequest); + // Adapter needs to be called, in order for the stub to register. + adapter(); + + pbjs.handleOASCB(response); + + let bidPlacementCode1 = stubAddBidResponse.getCall(0).args[0]; + let bidResponse1 = stubAddBidResponse.getCall(0).args[1]; + let bid1width = 300; + let bid1height = 250; + let cpm = 0.03; + let content_url = contentCallEndPoint + 'id=1_201707031440_56069e8e70318303e5869fad86722cb0'; + expect(bidPlacementCode1).to.equal('test-div-12345'); + expect(bidResponse1.getStatusCode()).to.equal(CONSTANTS.STATUS.GOOD); + expect(bidResponse1.bidderCode).to.equal('orbitsoft'); + expect(bidResponse1.width).to.equal(bid1width); + expect(bidResponse1.height).to.equal(bid1height); + expect(bidResponse1.cpm).to.equal(cpm); + expect(bidResponse1.adUrl).to.equal(content_url); + stubAddBidResponse.restore(); + }); + + it('should call loadscript with the correct params', function () { + let spyLoadScript = sinon.spy(adloader, 'loadScript'); + let params = { + bids: [ + { + sizes: [[300, 250], [300, 600]], + params: { + placementId: '16', + requestUrl: jptCallEndPoint + } + } + ] + }; + adapter().callBids(params); + + sinon.assert.calledOnce(spyLoadScript); + + let bidUrl = spyLoadScript.getCall(0).args[0]; + expect(bidUrl).to.include(jptCallEndPoint); + expect(bidUrl).to.include('scid=16'); + expect(bidUrl).to.include('size=300x250'); + expect(bidUrl).to.include('loc'); + spyLoadScript.restore(); + }); + + describe('test orbitsoft callback with params', function () { + it('should not call loadscript when inputting with empty params', function () { + let spyLoadScript = sinon.spy(adloader, 'loadScript'); + adapter().callBids({}); + assert(!spyLoadScript.called); + spyLoadScript.restore(); + }); + + it('should not call loadscript when inputting without requestUrl param ', function () { + let spyLoadScript = sinon.spy(adloader, 'loadScript'); + let params = { + bids: [ + { + params: { + placementId: '16' + } + } + ] + }; + adapter().callBids(params); + assert(!spyLoadScript.called); + spyLoadScript.restore(); + }); + + it('should not call loadscript when inputting with empty params by string ', function () { + let spyLoadScript = sinon.spy(adloader, 'loadScript'); + adapter().callBids(''); + assert(!spyLoadScript.called); + spyLoadScript.restore(); + }); + + it('should call loadscript without size in params', function () { + let spyLoadScript = sinon.spy(adloader, 'loadScript'); + let params = { + bids: [ + { + params: { + placementId: '16', + requestUrl: jptCallEndPoint + } + } + ] + }; + adapter().callBids(params); + + sinon.assert.calledOnce(spyLoadScript); + + let bidUrl = spyLoadScript.getCall(0).args[0]; + expect(bidUrl).to.include(jptCallEndPoint); + expect(bidUrl).to.include('scid=16'); + expect(bidUrl).to.not.include('size='); + expect(bidUrl).to.include('loc'); + spyLoadScript.restore(); + }); + + it('should add style params to adUrl if bids are returned', function () { + let stubAddBidResponse = sinon.stub(bidmanager, 'addBidResponse'); + + let bidderRequest = { + bidderCode: 'orbitsoft', + bids: [ + { + bidId: 'bidIdOrbitsoft2', + bidder: 'orbitsoft', + params: { + placementId: '16', + requestUrl: jptCallEndPoint, + style: { + title: { + family: 'Tahoma', + size: 'medium', + weight: 'normal', + style: 'normal', + color: '0053F9' + }, + description: { + family: 'Tahoma', + size: 'medium', + weight: 'normal', + style: 'normal', + color: '0053F9' + }, + url: { + family: 'Tahoma', + size: 'medium', + weight: 'normal', + style: 'normal', + color: '0053F9' + }, + colors: { + background: 'ffffff', + border: 'E0E0E0', + link: '5B99FE' + } + } + }, + sizes: [[300, 250]], + placementCode: 'test-div-12345' + } + ] + }; + + // Bid response with content_url + let response = { + callback_uid: 'bidIdOrbitsoft2', + content_url: contentCallEndPoint + 'id=1_201707031440_56069e8e70318303e5869fad86722cb0', + cpm: 0.03, + width: 300, + height: 250 + }; + + pbjs._bidsRequested.push(bidderRequest); + // Adapter needs to be called, in order for the stub to register. + adapter(); + + pbjs.handleOASCB(response); + + let bidResponse1 = stubAddBidResponse.getCall(0).args[1]; + let adUrl = bidResponse1.adUrl; + let content_url = contentCallEndPoint + 'id=1_201707031440_56069e8e70318303e5869fad86722cb0'; + expect(adUrl).to.include(content_url); + expect(adUrl).to.include('f1=Tahoma'); + expect(adUrl).to.include('fs1=medium'); + expect(adUrl).to.include('w1=normal'); + expect(adUrl).to.include('s1=normal'); + expect(adUrl).to.include('c3=0053F9'); + expect(adUrl).to.include('f2=Tahoma'); + expect(adUrl).to.include('fs2=medium'); + expect(adUrl).to.include('w2=normal'); + expect(adUrl).to.include('s2=normal'); + expect(adUrl).to.include('c4=0053F9'); + expect(adUrl).to.include('f3=Tahoma'); + expect(adUrl).to.include('fs3=medium'); + expect(adUrl).to.include('w3=normal'); + expect(adUrl).to.include('s3=normal'); + expect(adUrl).to.include('c5=0053F9'); + expect(adUrl).to.include('c2=ffffff'); + expect(adUrl).to.include('c1=E0E0E0'); + expect(adUrl).to.include('c6=5B99FE'); + + stubAddBidResponse.restore(); + }); + + it('should add custom params to adUrl if bids are returned', function () { + let stubAddBidResponse = sinon.stub(bidmanager, 'addBidResponse'); + + let bidderRequest = { + bidderCode: 'orbitsoft', + bids: [ + { + bidId: 'bidIdOrbitsoft3', + bidder: 'orbitsoft', + params: { + placementId: '16', + requestUrl: jptCallEndPoint, + customParams: { + macro_name: 'macro_value' + } + }, + sizes: [[300, 250]], + placementCode: 'test-div-12345' + } + ] + }; + + // Bid response with custom params + let response = { + callback_uid: 'bidIdOrbitsoft3', + content_url: contentCallEndPoint + 'id=1_201707031440_56069e8e70318303e5869fad86722cb0', + cpm: 0.03, + width: 300, + height: 250 + }; + + pbjs._bidsRequested.push(bidderRequest); + // Adapter needs to be called, in order for the stub to register. + adapter(); + + pbjs.handleOASCB(response); + + let bidResponse1 = stubAddBidResponse.getCall(0).args[1]; + let adUrl = bidResponse1.adUrl; + let content_url = contentCallEndPoint + 'id=1_201707031440_56069e8e70318303e5869fad86722cb0'; + expect(adUrl).to.include(content_url); + expect(adUrl).to.include('c.macro_name=macro_value'); + + stubAddBidResponse.restore(); + }); + }); +}); From d068d59fa26534fb73af6f00272ce9b3d9e73486 Mon Sep 17 00:00:00 2001 From: Dmitriy Shimko Date: Thu, 13 Jul 2017 14:07:10 +0300 Subject: [PATCH 02/11] Adding Orbitsoft module (corrected) --- modules/orbitsoftBidAdapter.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/orbitsoftBidAdapter.js b/modules/orbitsoftBidAdapter.js index e4fe863d645..59700eb7d3f 100644 --- a/modules/orbitsoftBidAdapter.js +++ b/modules/orbitsoftBidAdapter.js @@ -43,7 +43,8 @@ OrbitsoftAdapter = function OrbitsoftAdapter() { for (let i = 0; i < bids.length; i++) { let bidRequest = bids[i]; let callbackId = bidRequest.bidId; - adloader.loadScript(buildJPTCall(bidRequest, callbackId)); + let jptCall = buildJPTCall(bidRequest, callbackId); + if (jptCall) {adloader.loadScript(jptCall);} } }; From 42f1d664ccfe1da0eb0cd27e36727b204fed18c7 Mon Sep 17 00:00:00 2001 From: Dmitriy Shimko Date: Fri, 28 Jul 2017 16:14:47 +0300 Subject: [PATCH 03/11] Adding Orbitsoft module (correction of remarks) --- modules/orbitsoftBidAdapter.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/modules/orbitsoftBidAdapter.js b/modules/orbitsoftBidAdapter.js index 59700eb7d3f..8475dc3b15d 100644 --- a/modules/orbitsoftBidAdapter.js +++ b/modules/orbitsoftBidAdapter.js @@ -36,15 +36,18 @@ OrbitsoftAdapter = function OrbitsoftAdapter() { baseAdapter.callBids = function (params) { let bids = params.bids || []; - if (bids.length === 0) { - return; - } - for (let i = 0; i < bids.length; i++) { let bidRequest = bids[i]; let callbackId = bidRequest.bidId; let jptCall = buildJPTCall(bidRequest, callbackId); - if (jptCall) {adloader.loadScript(jptCall);} + + if (jptCall) { adloader.loadScript(jptCall); } + else { + // indicate that there is no bid for this placement + let bid = bidfactory.createBid(CONSTANTS.STATUS.NO_BID, bidRequest); + bid.bidderCode = params.bidderCode; + bidmanager.addBidResponse(bidRequest.placementCode, bid); + } } }; From aba01a3f4a93547ed64b2fa28ba54d769869b536 Mon Sep 17 00:00:00 2001 From: Dmitriy Shimko Date: Fri, 28 Jul 2017 16:32:10 +0300 Subject: [PATCH 04/11] Adding Orbitsoft module (correction of remarks) --- modules/orbitsoftBidAdapter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/orbitsoftBidAdapter.js b/modules/orbitsoftBidAdapter.js index 8475dc3b15d..17e25505e18 100644 --- a/modules/orbitsoftBidAdapter.js +++ b/modules/orbitsoftBidAdapter.js @@ -223,7 +223,7 @@ OrbitsoftAdapter = function OrbitsoftAdapter() { }; }; -adaptermanager.registerBidAdapter(new OrbitsoftAdapter, 'orbitsoft'); +adaptermanager.registerBidAdapter(new OrbitsoftAdapter(), 'orbitsoft'); adaptermanager.aliasBidAdapter('orbitsoft', 'orbitadserving'); adaptermanager.aliasBidAdapter('orbitsoft', 'orbitscripts'); adaptermanager.aliasBidAdapter('orbitsoft', 'orbitsoftcom'); From be50c559e201f6541a0f1885c0fd17787ce1f2aa Mon Sep 17 00:00:00 2001 From: Dmitriy Shimko Date: Thu, 14 Sep 2017 12:55:51 +0300 Subject: [PATCH 05/11] Adding Orbitsoft module (correction to alias-able) --- modules/orbitsoftBidAdapter.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/modules/orbitsoftBidAdapter.js b/modules/orbitsoftBidAdapter.js index 17e25505e18..94e82ba02f7 100644 --- a/modules/orbitsoftBidAdapter.js +++ b/modules/orbitsoftBidAdapter.js @@ -31,9 +31,8 @@ let styleParamsToFieldsMap = { let OrbitsoftAdapter; OrbitsoftAdapter = function OrbitsoftAdapter() { - let baseAdapter = Adapter.createNew('orbitsoft'); - baseAdapter.callBids = function (params) { + function _callBids(params) { let bids = params.bids || []; for (let i = 0; i < bids.length; i++) { @@ -49,7 +48,7 @@ OrbitsoftAdapter = function OrbitsoftAdapter() { bidmanager.addBidResponse(bidRequest.placementCode, bid); } } - }; + } function buildJPTCall(bid, callbackId) { // Determine tag params @@ -216,13 +215,18 @@ OrbitsoftAdapter = function OrbitsoftAdapter() { } }; - return { - callBids: baseAdapter.callBids, - setBidderCode: baseAdapter.setBidderCode, - buildJPTCall: buildJPTCall - }; + return Object.assign(Adapter.createNew('orbitsoft'), { + callBids: _callBids, + buildJPTCall: buildJPTCall, + createNew: OrbitsoftAdapter.createNew + }); }; +OrbitsoftAdapter.createNew = function() { + return new OrbitsoftAdapter(); +}; + + adaptermanager.registerBidAdapter(new OrbitsoftAdapter(), 'orbitsoft'); adaptermanager.aliasBidAdapter('orbitsoft', 'orbitadserving'); adaptermanager.aliasBidAdapter('orbitsoft', 'orbitscripts'); From 0af08c92dcc9e9918633e0c03cbca2f8a856f837 Mon Sep 17 00:00:00 2001 From: Dmitriy Shimko Date: Thu, 14 Sep 2017 14:59:39 +0300 Subject: [PATCH 06/11] Adding Orbitsoft module (correction to alias-able) --- modules/orbitsoftBidAdapter.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/modules/orbitsoftBidAdapter.js b/modules/orbitsoftBidAdapter.js index 94e82ba02f7..f8ff9e236be 100644 --- a/modules/orbitsoftBidAdapter.js +++ b/modules/orbitsoftBidAdapter.js @@ -31,8 +31,9 @@ let styleParamsToFieldsMap = { let OrbitsoftAdapter; OrbitsoftAdapter = function OrbitsoftAdapter() { + let baseAdapter = Adapter.createNew('orbitsoft'); - function _callBids(params) { + baseAdapter.callBids = function (params) { let bids = params.bids || []; for (let i = 0; i < bids.length; i++) { @@ -48,7 +49,7 @@ OrbitsoftAdapter = function OrbitsoftAdapter() { bidmanager.addBidResponse(bidRequest.placementCode, bid); } } - } + }; function buildJPTCall(bid, callbackId) { // Determine tag params @@ -216,17 +217,12 @@ OrbitsoftAdapter = function OrbitsoftAdapter() { }; return Object.assign(Adapter.createNew('orbitsoft'), { - callBids: _callBids, - buildJPTCall: buildJPTCall, - createNew: OrbitsoftAdapter.createNew + callBids: baseAdapter.callBids, + setBidderCode: baseAdapter.setBidderCode, + buildJPTCall: buildJPTCall }); }; -OrbitsoftAdapter.createNew = function() { - return new OrbitsoftAdapter(); -}; - - adaptermanager.registerBidAdapter(new OrbitsoftAdapter(), 'orbitsoft'); adaptermanager.aliasBidAdapter('orbitsoft', 'orbitadserving'); adaptermanager.aliasBidAdapter('orbitsoft', 'orbitscripts'); From ccf57ef33aa6be716adff0aa29973aeaa09f00b8 Mon Sep 17 00:00:00 2001 From: Dmitriy Shimko Date: Thu, 14 Sep 2017 15:59:38 +0300 Subject: [PATCH 07/11] Adding Orbitsoft module (correction to alias-able) --- modules/orbitsoftBidAdapter.js | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/modules/orbitsoftBidAdapter.js b/modules/orbitsoftBidAdapter.js index f8ff9e236be..8251325a9b9 100644 --- a/modules/orbitsoftBidAdapter.js +++ b/modules/orbitsoftBidAdapter.js @@ -1,12 +1,12 @@ import { getBidRequest } from 'src/utils'; -import adaptermanager from 'src/adaptermanager'; let CONSTANTS = require('src/constants'); -let utils = require('src/utils'); -let adloader = require('src/adloader'); +let Adapter = require('src/adapter'); let bidmanager = require('src/bidmanager'); let bidfactory = require('src/bidfactory'); -let Adapter = require('src/adapter'); +let adloader = require('src/adloader'); +let utils = require('src/utils'); +let adaptermanager = require('src/adaptermanager'); let styleParamsToFieldsMap = { 'title.family': 'f1', // headerFont @@ -28,12 +28,10 @@ let styleParamsToFieldsMap = { 'colors.border': 'c1', // borderColor 'colors.link': 'c6', // lnkColor }; +let ORBITSOFT_BIDDERCODE = 'orbitsoft'; +let OrbitsoftAdapter = function OrbitsoftAdapter() { -let OrbitsoftAdapter; -OrbitsoftAdapter = function OrbitsoftAdapter() { - let baseAdapter = Adapter.createNew('orbitsoft'); - - baseAdapter.callBids = function (params) { + function _callBids (params) { let bids = params.bids || []; for (let i = 0; i < bids.length; i++) { @@ -49,7 +47,7 @@ OrbitsoftAdapter = function OrbitsoftAdapter() { bidmanager.addBidResponse(bidRequest.placementCode, bid); } } - }; + } function buildJPTCall(bid, callbackId) { // Determine tag params @@ -216,14 +214,18 @@ OrbitsoftAdapter = function OrbitsoftAdapter() { } }; - return Object.assign(Adapter.createNew('orbitsoft'), { - callBids: baseAdapter.callBids, - setBidderCode: baseAdapter.setBidderCode, - buildJPTCall: buildJPTCall + return Object.assign(Adapter.createNew(ORBITSOFT_BIDDERCODE), { + callBids: _callBids, + buildJPTCall: buildJPTCall, + createNew: OrbitsoftAdapter.createNew }); }; -adaptermanager.registerBidAdapter(new OrbitsoftAdapter(), 'orbitsoft'); +OrbitsoftAdapter.createNew = function() { + return new OrbitsoftAdapter(); +}; + +adaptermanager.registerBidAdapter(new OrbitsoftAdapter(), ORBITSOFT_BIDDERCODE); adaptermanager.aliasBidAdapter('orbitsoft', 'orbitadserving'); adaptermanager.aliasBidAdapter('orbitsoft', 'orbitscripts'); adaptermanager.aliasBidAdapter('orbitsoft', 'orbitsoftcom'); From 28d89b06de82fc17b2b856c6babc6b85605c2c8c Mon Sep 17 00:00:00 2001 From: Dmitriy Shimko Date: Thu, 14 Sep 2017 17:06:58 +0300 Subject: [PATCH 08/11] Adding Orbitsoft module (correction to alias-able) --- modules/orbitsoftBidAdapter.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/orbitsoftBidAdapter.js b/modules/orbitsoftBidAdapter.js index 8251325a9b9..849afd99b3d 100644 --- a/modules/orbitsoftBidAdapter.js +++ b/modules/orbitsoftBidAdapter.js @@ -1,13 +1,14 @@ import { getBidRequest } from 'src/utils'; +import Adapter from 'src/adapter'; let CONSTANTS = require('src/constants'); -let Adapter = require('src/adapter'); let bidmanager = require('src/bidmanager'); let bidfactory = require('src/bidfactory'); let adloader = require('src/adloader'); let utils = require('src/utils'); let adaptermanager = require('src/adaptermanager'); +let ORBITSOFT_BIDDERCODE = 'orbitsoft'; let styleParamsToFieldsMap = { 'title.family': 'f1', // headerFont 'title.size': 'fs1', // headerFontSize @@ -28,9 +29,8 @@ let styleParamsToFieldsMap = { 'colors.border': 'c1', // borderColor 'colors.link': 'c6', // lnkColor }; -let ORBITSOFT_BIDDERCODE = 'orbitsoft'; -let OrbitsoftAdapter = function OrbitsoftAdapter() { +let OrbitsoftAdapter = function OrbitsoftAdapter() { function _callBids (params) { let bids = params.bids || []; @@ -39,8 +39,9 @@ let OrbitsoftAdapter = function OrbitsoftAdapter() { let callbackId = bidRequest.bidId; let jptCall = buildJPTCall(bidRequest, callbackId); - if (jptCall) { adloader.loadScript(jptCall); } - else { + if (jptCall) { + adloader.loadScript(jptCall); + } else { // indicate that there is no bid for this placement let bid = bidfactory.createBid(CONSTANTS.STATUS.NO_BID, bidRequest); bid.bidderCode = params.bidderCode; @@ -62,8 +63,7 @@ let OrbitsoftAdapter = function OrbitsoftAdapter() { utils.logMessage('No param requestUrl'); // @endif return null; - } - else { + } else { jptCall += '?'; } @@ -214,7 +214,7 @@ let OrbitsoftAdapter = function OrbitsoftAdapter() { } }; - return Object.assign(Adapter.createNew(ORBITSOFT_BIDDERCODE), { + return Object.assign(new Adapter(ORBITSOFT_BIDDERCODE), { callBids: _callBids, buildJPTCall: buildJPTCall, createNew: OrbitsoftAdapter.createNew From 1c873a0ea8bf4f3c95dda2089d83b40db479395a Mon Sep 17 00:00:00 2001 From: Dmitriy Shimko Date: Fri, 15 Sep 2017 11:17:31 +0300 Subject: [PATCH 09/11] Adding Orbitsoft module (correction to new constructor) --- modules/orbitsoftBidAdapter.js | 18 +++++----- test/spec/modules/orbitsoftBidAdapter_spec.js | 36 +++++++++---------- 2 files changed, 24 insertions(+), 30 deletions(-) diff --git a/modules/orbitsoftBidAdapter.js b/modules/orbitsoftBidAdapter.js index 849afd99b3d..3e633d59d44 100644 --- a/modules/orbitsoftBidAdapter.js +++ b/modules/orbitsoftBidAdapter.js @@ -1,5 +1,4 @@ import { getBidRequest } from 'src/utils'; -import Adapter from 'src/adapter'; let CONSTANTS = require('src/constants'); let bidmanager = require('src/bidmanager'); @@ -7,6 +6,7 @@ let bidfactory = require('src/bidfactory'); let adloader = require('src/adloader'); let utils = require('src/utils'); let adaptermanager = require('src/adaptermanager'); +let Adapter = require('src/adapter').default; let ORBITSOFT_BIDDERCODE = 'orbitsoft'; let styleParamsToFieldsMap = { @@ -31,7 +31,9 @@ let styleParamsToFieldsMap = { }; let OrbitsoftAdapter = function OrbitsoftAdapter() { - function _callBids (params) { + let baseAdapter = new Adapter(ORBITSOFT_BIDDERCODE); + + baseAdapter.callBids = function(params) { let bids = params.bids || []; for (let i = 0; i < bids.length; i++) { @@ -214,17 +216,13 @@ let OrbitsoftAdapter = function OrbitsoftAdapter() { } }; - return Object.assign(new Adapter(ORBITSOFT_BIDDERCODE), { - callBids: _callBids, - buildJPTCall: buildJPTCall, - createNew: OrbitsoftAdapter.createNew + return Object.assign(this, { + callBids: baseAdapter.callBids, + setBidderCode: baseAdapter.setBidderCode, + buildJPTCall: buildJPTCall }); }; -OrbitsoftAdapter.createNew = function() { - return new OrbitsoftAdapter(); -}; - adaptermanager.registerBidAdapter(new OrbitsoftAdapter(), ORBITSOFT_BIDDERCODE); adaptermanager.aliasBidAdapter('orbitsoft', 'orbitadserving'); adaptermanager.aliasBidAdapter('orbitsoft', 'orbitscripts'); diff --git a/test/spec/modules/orbitsoftBidAdapter_spec.js b/test/spec/modules/orbitsoftBidAdapter_spec.js index efe25492e54..dc37be73483 100644 --- a/test/spec/modules/orbitsoftBidAdapter_spec.js +++ b/test/spec/modules/orbitsoftBidAdapter_spec.js @@ -1,7 +1,7 @@ describe('Orbitsoft Adapter tests', function () { const expect = require('chai').expect; const assert = require('chai').assert; - const adapter = require('modules/orbitsoftBidAdapter'); + const OrbitsoftAdapter = require('modules/orbitsoftBidAdapter'); const bidmanager = require('src/bidmanager'); const adloader = require('src/adloader'); const CONSTANTS = require('src/constants.json'); @@ -19,6 +19,7 @@ describe('Orbitsoft Adapter tests', function () { it('should add empty bid responses if no bids returned', function () { let stubAddBidResponse = sinon.stub(bidmanager, 'addBidResponse'); + let adapter = new OrbitsoftAdapter(); let bidderRequest = { bidderCode: 'orbitsoft', @@ -43,9 +44,6 @@ describe('Orbitsoft Adapter tests', function () { }; pbjs._bidsRequested.push(bidderRequest); - // Adapter needs to be called, in order for the stub to register. - adapter(); - pbjs.handleOASCB(response); let bidPlacementCode1 = stubAddBidResponse.getCall(0).args[0]; @@ -58,6 +56,7 @@ describe('Orbitsoft Adapter tests', function () { it('should add empty bid responses if no bidId returned', function () { let stubAddBidResponse = sinon.stub(bidmanager, 'addBidResponse'); + let adapter = new OrbitsoftAdapter(); let bidderRequest = { bidderCode: 'orbitsoft', @@ -81,9 +80,6 @@ describe('Orbitsoft Adapter tests', function () { }; pbjs._bidsRequested.push(bidderRequest); - // Adapter needs to be called, in order for the stub to register. - adapter(); - pbjs.handleOASCB(response); expect(stubAddBidResponse.getCall(0)).to.equal(null); @@ -93,6 +89,7 @@ describe('Orbitsoft Adapter tests', function () { it('should add bid responses if bids are returned', function () { let stubAddBidResponse = sinon.stub(bidmanager, 'addBidResponse'); + let adapter = new OrbitsoftAdapter(); let bidderRequest = { bidderCode: 'orbitsoft', @@ -120,9 +117,6 @@ describe('Orbitsoft Adapter tests', function () { }; pbjs._bidsRequested.push(bidderRequest); - // Adapter needs to be called, in order for the stub to register. - adapter(); - pbjs.handleOASCB(response); let bidPlacementCode1 = stubAddBidResponse.getCall(0).args[0]; @@ -142,6 +136,7 @@ describe('Orbitsoft Adapter tests', function () { }); it('should call loadscript with the correct params', function () { + let adapter = new OrbitsoftAdapter(); let spyLoadScript = sinon.spy(adloader, 'loadScript'); let params = { bids: [ @@ -154,7 +149,7 @@ describe('Orbitsoft Adapter tests', function () { } ] }; - adapter().callBids(params); + adapter.callBids(params); sinon.assert.calledOnce(spyLoadScript); @@ -168,13 +163,15 @@ describe('Orbitsoft Adapter tests', function () { describe('test orbitsoft callback with params', function () { it('should not call loadscript when inputting with empty params', function () { + let adapter = new OrbitsoftAdapter(); let spyLoadScript = sinon.spy(adloader, 'loadScript'); - adapter().callBids({}); + adapter.callBids({}); assert(!spyLoadScript.called); spyLoadScript.restore(); }); it('should not call loadscript when inputting without requestUrl param ', function () { + let adapter = new OrbitsoftAdapter(); let spyLoadScript = sinon.spy(adloader, 'loadScript'); let params = { bids: [ @@ -185,19 +182,21 @@ describe('Orbitsoft Adapter tests', function () { } ] }; - adapter().callBids(params); + adapter.callBids(params); assert(!spyLoadScript.called); spyLoadScript.restore(); }); it('should not call loadscript when inputting with empty params by string ', function () { + let adapter = new OrbitsoftAdapter(); let spyLoadScript = sinon.spy(adloader, 'loadScript'); - adapter().callBids(''); + adapter.callBids(''); assert(!spyLoadScript.called); spyLoadScript.restore(); }); it('should call loadscript without size in params', function () { + let adapter = new OrbitsoftAdapter(); let spyLoadScript = sinon.spy(adloader, 'loadScript'); let params = { bids: [ @@ -209,7 +208,7 @@ describe('Orbitsoft Adapter tests', function () { } ] }; - adapter().callBids(params); + adapter.callBids(params); sinon.assert.calledOnce(spyLoadScript); @@ -223,6 +222,7 @@ describe('Orbitsoft Adapter tests', function () { it('should add style params to adUrl if bids are returned', function () { let stubAddBidResponse = sinon.stub(bidmanager, 'addBidResponse'); + let adapter = new OrbitsoftAdapter(); let bidderRequest = { bidderCode: 'orbitsoft', @@ -278,8 +278,6 @@ describe('Orbitsoft Adapter tests', function () { }; pbjs._bidsRequested.push(bidderRequest); - // Adapter needs to be called, in order for the stub to register. - adapter(); pbjs.handleOASCB(response); @@ -311,6 +309,7 @@ describe('Orbitsoft Adapter tests', function () { it('should add custom params to adUrl if bids are returned', function () { let stubAddBidResponse = sinon.stub(bidmanager, 'addBidResponse'); + let adapter = new OrbitsoftAdapter(); let bidderRequest = { bidderCode: 'orbitsoft', @@ -341,9 +340,6 @@ describe('Orbitsoft Adapter tests', function () { }; pbjs._bidsRequested.push(bidderRequest); - // Adapter needs to be called, in order for the stub to register. - adapter(); - pbjs.handleOASCB(response); let bidResponse1 = stubAddBidResponse.getCall(0).args[1]; From 6337b57efbf1f7021d8a16cb5a6bca436a07430f Mon Sep 17 00:00:00 2001 From: Dmitriy Shimko Date: Fri, 15 Sep 2017 15:42:48 +0300 Subject: [PATCH 10/11] Adding Orbitsoft module (delete unnecessary aliases) --- modules/orbitsoftBidAdapter.js | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modules/orbitsoftBidAdapter.js b/modules/orbitsoftBidAdapter.js index 3e633d59d44..a03eb25818f 100644 --- a/modules/orbitsoftBidAdapter.js +++ b/modules/orbitsoftBidAdapter.js @@ -224,9 +224,4 @@ let OrbitsoftAdapter = function OrbitsoftAdapter() { }; adaptermanager.registerBidAdapter(new OrbitsoftAdapter(), ORBITSOFT_BIDDERCODE); -adaptermanager.aliasBidAdapter('orbitsoft', 'orbitadserving'); -adaptermanager.aliasBidAdapter('orbitsoft', 'orbitscripts'); -adaptermanager.aliasBidAdapter('orbitsoft', 'orbitsoftcom'); -adaptermanager.aliasBidAdapter('orbitsoft', 'orbitsoftru'); - module.exports = OrbitsoftAdapter; From 60aa74b317ee6270257c2db0cb4dc8476bf41c74 Mon Sep 17 00:00:00 2001 From: Dmitriy Shimko Date: Fri, 15 Sep 2017 16:46:21 +0300 Subject: [PATCH 11/11] Adding Orbitsoft module (delete unnecessary aliases) --- modules/orbitsoftBidAdapter.js | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/orbitsoftBidAdapter.js b/modules/orbitsoftBidAdapter.js index a03eb25818f..e01f82a7097 100644 --- a/modules/orbitsoftBidAdapter.js +++ b/modules/orbitsoftBidAdapter.js @@ -224,4 +224,5 @@ let OrbitsoftAdapter = function OrbitsoftAdapter() { }; adaptermanager.registerBidAdapter(new OrbitsoftAdapter(), ORBITSOFT_BIDDERCODE); + module.exports = OrbitsoftAdapter;