diff --git a/modules/freewheel-sspBidAdapter.js b/modules/freewheel-sspBidAdapter.js
index 87c1979ac5d1..321d5ee95e8b 100644
--- a/modules/freewheel-sspBidAdapter.js
+++ b/modules/freewheel-sspBidAdapter.js
@@ -68,6 +68,18 @@ function getPricing(xmlNode) {
return princingData;
}
+function hashcode(inputString) {
+ var hash = 0;
+ var char;
+ if (inputString.length == 0) return hash;
+ for (var i = 0; i < inputString.length; i++) {
+ char = inputString.charCodeAt(i);
+ hash = ((hash << 5) - hash) + char;
+ hash = hash & hash; // Convert to 32bit integer
+ }
+ return hash;
+}
+
function getCreativeId(xmlNode) {
var creaId = '';
var adNodes = xmlNode.querySelectorAll('Ad');
@@ -116,7 +128,7 @@ function getAPIName(componentId) {
function formatAdHTML(bid, size) {
var integrationType = bid.params.format;
- var divHtml = '
';
+ var divHtml = '';
var script = '';
var libUrl = '';
@@ -161,13 +173,11 @@ var getInBannerScript = function(bid, size) {
};
var getOutstreamScript = function(bid) {
- var placementCode = bid.adUnitCode;
-
var config = bid.params;
// default placement if no placement is set
if (!config.hasOwnProperty('domId') && !config.hasOwnProperty('auto') && !config.hasOwnProperty('p') && !config.hasOwnProperty('article')) {
- config.domId = placementCode;
+ config.domId = 'freewheelssp_prebid_target';
}
var script = 'var config = {' +
@@ -216,11 +226,17 @@ export const spec = {
utils.logMessage('Prebid.JS - freewheel bid adapter: only one ad unit is required.');
}
+ var zone = currentBidRequest.params.zoneId;
+ var timeInMillis = new Date().getTime();
+ var keyCode = hashcode(zone + '' + timeInMillis);
+
var requestParams = {
reqType: 'AdsSetup',
protocolVersion: '2.0',
- zoneId: currentBidRequest.params.zoneId,
- componentId: getComponentId(currentBidRequest.params.format)
+ zoneId: zone,
+ componentId: getComponentId(currentBidRequest.params.format),
+ timestamp: timeInMillis,
+ pKey: keyCode
};
// Add GDPR flag and consent string
@@ -330,6 +346,7 @@ export const spec = {
url: USER_SYNC_URL
}];
}
- }
+ },
+
}
registerBidder(spec);
diff --git a/modules/freewheel-sspBidAdapter.md b/modules/freewheel-sspBidAdapter.md
index ba7915c87e1c..70ab24152798 100644
--- a/modules/freewheel-sspBidAdapter.md
+++ b/modules/freewheel-sspBidAdapter.md
@@ -18,7 +18,7 @@ Module that connects to Freewheel ssp's demand sources
{
bidder: "freewheel-ssp",
params: {
- zoneId : '277225'
+ zoneId : '41852'
}
}
]
diff --git a/test/spec/modules/freewheel-sspBidAdapter_spec.js b/test/spec/modules/freewheel-sspBidAdapter_spec.js
index adc6e1bcde4b..a1123cee1510 100644
--- a/test/spec/modules/freewheel-sspBidAdapter_spec.js
+++ b/test/spec/modules/freewheel-sspBidAdapter_spec.js
@@ -1,197 +1,197 @@
-import { expect } from 'chai';
-import { spec } from 'modules/freewheel-sspBidAdapter';
-import { newBidder } from 'src/adapters/bidderFactory';
-
-const ENDPOINT = '//ads.stickyadstv.com/www/delivery/swfIndex.php';
-
-describe('freewheel-ssp BidAdapter Test', function () {
- const adapter = newBidder(spec);
-
- describe('inherited functions', function () {
- it('exists and is a function', function () {
- expect(adapter.callBids).to.exist.and.to.be.a('function');
- });
- });
-
- describe('isBidRequestValid', function () {
- let bid = {
- 'bidder': 'freewheel-ssp',
- 'params': {
- 'zoneId': '277225'
- },
- 'adUnitCode': 'adunit-code',
- 'sizes': [[300, 250], [300, 600]],
- 'bidId': '30b31c1838de1e',
- 'bidderRequestId': '22edbae2733bf6',
- 'auctionId': '1d1a030790a475',
- };
-
- it('should return true when required params found', function () {
- expect(spec.isBidRequestValid(bid)).to.equal(true);
- });
-
- it('should return false when required params are not passed', function () {
- let bid = Object.assign({}, bid);
- delete bid.params;
- bid.params = {
- wrong: 'missing zone id'
- };
- expect(spec.isBidRequestValid(bid)).to.equal(false);
- });
- });
-
- describe('buildRequests', function () {
- let bidRequests = [
- {
- 'bidder': 'freewheel-ssp',
- 'params': {
- 'zoneId': '277225'
- },
- 'adUnitCode': 'adunit-code',
- 'sizes': [[300, 250], [300, 600]],
- 'bidId': '30b31c1838de1e',
- 'bidderRequestId': '22edbae2733bf6',
- 'auctionId': '1d1a030790a475',
- 'gdprConsent': {
- 'consentString': 'BOJ/P2HOJ/P2HABABMAAAAAZ+A==',
- 'gdprApplies': true
- }
- }
- ];
-
- it('should add parameters to the tag', function () {
- const request = spec.buildRequests(bidRequests, bidRequests[0]);
- const payload = request.data;
- expect(payload.reqType).to.equal('AdsSetup');
- expect(payload.protocolVersion).to.equal('2.0');
- expect(payload.zoneId).to.equal('277225');
- expect(payload.componentId).to.equal('mustang');
- expect(payload.playerSize).to.equal('300x600');
- expect(payload._fw_gdpr).to.equal(true);
- expect(payload._fw_gdpr_consent).to.equal('BOJ/P2HOJ/P2HABABMAAAAAZ+A==');
- });
-
- it('sends bid request to ENDPOINT via GET', function () {
- const request = spec.buildRequests(bidRequests, bidRequests[0]);
- expect(request.url).to.contain(ENDPOINT);
- expect(request.method).to.equal('GET');
- });
- })
-
- describe('interpretResponse', function () {
- let bidRequests = [
- {
- 'bidder': 'freewheel-ssp',
- 'params': {
- 'zoneId': '277225'
- },
- 'adUnitCode': 'adunit-code',
- 'sizes': [[300, 250], [300, 600]],
- 'bidId': '30b31c1838de1e',
- 'bidderRequestId': '22edbae2733bf6',
- 'auctionId': '1d1a030790a475',
- }
- ];
-
- let formattedBidRequests = [
- {
- 'bidder': 'freewheel-ssp',
- 'params': {
- 'zoneId': '277225',
- 'format': 'floorad'
- },
- 'adUnitCode': 'adunit-code',
- 'sizes': [[600, 250], [300, 600]],
- 'bidId': '30b3other1c1838de1e',
- 'bidderRequestId': '22edbae273other3bf6',
- 'auctionId': '1d1a03079test0a475',
- },
- {
- 'bidder': 'stickyadstv',
- 'params': {
- 'zoneId': '277225',
- 'format': 'test'
- },
- 'adUnitCode': 'adunit-code',
- 'sizes': [[300, 600]],
- 'bidId': '2',
- 'bidderRequestId': '3',
- 'auctionId': '4',
- }
- ];
-
- let response = '' +
- '' +
- ' ' +
- ' Adswizz' +
- ' ' +
- ' ' +
- ' ' +
- ' 00:00:09' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' ' +
- ' 0.2000' +
- ' ' +
- ' ' +
- ' ' +
- '';
-
- let ad = '';
- let formattedAd = '';
-
- it('should get correct bid response', function () {
- var request = spec.buildRequests(formattedBidRequests, formattedBidRequests[0]);
-
- let expectedResponse = [
- {
- requestId: '30b31c1838de1e',
- cpm: '0.2000',
- width: 300,
- height: 600,
- creativeId: '28517153',
- currency: 'EUR',
- netRevenue: true,
- ttl: 360,
- ad: ad
- }
- ];
-
- let result = spec.interpretResponse(response, request);
- expect(Object.keys(result[0])).to.deep.equal(Object.keys(expectedResponse[0]));
- });
-
- it('should get correct bid response with formated ad', function () {
- var request = spec.buildRequests(formattedBidRequests, formattedBidRequests[0]);
-
- let expectedResponse = [
- {
- requestId: '30b31c1838de1e',
- cpm: '0.2000',
- width: 300,
- height: 600,
- creativeId: '28517153',
- currency: 'EUR',
- netRevenue: true,
- ttl: 360,
- ad: formattedAd
- }
- ];
-
- let result = spec.interpretResponse(response, request);
- expect(Object.keys(result[0])).to.deep.equal(Object.keys(expectedResponse[0]));
- });
-
- it('handles nobid responses', function () {
- var reqest = spec.buildRequests(formattedBidRequests, formattedBidRequests[0]);
- let response = '';
-
- let result = spec.interpretResponse(response, reqest);
- expect(result.length).to.equal(0);
- });
- });
-});
+import { expect } from 'chai';
+import { spec } from 'modules/freewheel-sspBidAdapter';
+import { newBidder } from 'src/adapters/bidderFactory';
+
+const ENDPOINT = '//ads.stickyadstv.com/www/delivery/swfIndex.php';
+
+describe('freewheel-ssp BidAdapter Test', function () {
+ const adapter = newBidder(spec);
+
+ describe('inherited functions', function () {
+ it('exists and is a function', function () {
+ expect(adapter.callBids).to.exist.and.to.be.a('function');
+ });
+ });
+
+ describe('isBidRequestValid', function () {
+ let bid = {
+ 'bidder': 'freewheel-ssp',
+ 'params': {
+ 'zoneId': '277225'
+ },
+ 'adUnitCode': 'adunit-code',
+ 'sizes': [[300, 250], [300, 600]],
+ 'bidId': '30b31c1838de1e',
+ 'bidderRequestId': '22edbae2733bf6',
+ 'auctionId': '1d1a030790a475',
+ };
+
+ it('should return true when required params found', function () {
+ expect(spec.isBidRequestValid(bid)).to.equal(true);
+ });
+
+ it('should return false when required params are not passed', function () {
+ let bid = Object.assign({}, bid);
+ delete bid.params;
+ bid.params = {
+ wrong: 'missing zone id'
+ };
+ expect(spec.isBidRequestValid(bid)).to.equal(false);
+ });
+ });
+
+ describe('buildRequests', function () {
+ let bidRequests = [
+ {
+ 'bidder': 'freewheel-ssp',
+ 'params': {
+ 'zoneId': '277225'
+ },
+ 'adUnitCode': 'adunit-code',
+ 'sizes': [[300, 250], [300, 600]],
+ 'bidId': '30b31c1838de1e',
+ 'bidderRequestId': '22edbae2733bf6',
+ 'auctionId': '1d1a030790a475',
+ 'gdprConsent': {
+ 'consentString': 'BOJ/P2HOJ/P2HABABMAAAAAZ+A==',
+ 'gdprApplies': true
+ }
+ }
+ ];
+
+ it('should add parameters to the tag', function () {
+ const request = spec.buildRequests(bidRequests, bidRequests[0]);
+ const payload = request.data;
+ expect(payload.reqType).to.equal('AdsSetup');
+ expect(payload.protocolVersion).to.equal('2.0');
+ expect(payload.zoneId).to.equal('277225');
+ expect(payload.componentId).to.equal('mustang');
+ expect(payload.playerSize).to.equal('300x600');
+ expect(payload._fw_gdpr).to.equal(true);
+ expect(payload._fw_gdpr_consent).to.equal('BOJ/P2HOJ/P2HABABMAAAAAZ+A==');
+ });
+
+ it('sends bid request to ENDPOINT via GET', function () {
+ const request = spec.buildRequests(bidRequests, bidRequests[0]);
+ expect(request.url).to.contain(ENDPOINT);
+ expect(request.method).to.equal('GET');
+ });
+ })
+
+ describe('interpretResponse', function () {
+ let bidRequests = [
+ {
+ 'bidder': 'freewheel-ssp',
+ 'params': {
+ 'zoneId': '277225'
+ },
+ 'adUnitCode': 'adunit-code',
+ 'sizes': [[300, 250], [300, 600]],
+ 'bidId': '30b31c1838de1e',
+ 'bidderRequestId': '22edbae2733bf6',
+ 'auctionId': '1d1a030790a475',
+ }
+ ];
+
+ let formattedBidRequests = [
+ {
+ 'bidder': 'freewheel-ssp',
+ 'params': {
+ 'zoneId': '277225',
+ 'format': 'floorad'
+ },
+ 'adUnitCode': 'adunit-code',
+ 'sizes': [[600, 250], [300, 600]],
+ 'bidId': '30b3other1c1838de1e',
+ 'bidderRequestId': '22edbae273other3bf6',
+ 'auctionId': '1d1a03079test0a475',
+ },
+ {
+ 'bidder': 'stickyadstv',
+ 'params': {
+ 'zoneId': '277225',
+ 'format': 'test'
+ },
+ 'adUnitCode': 'adunit-code',
+ 'sizes': [[300, 600]],
+ 'bidId': '2',
+ 'bidderRequestId': '3',
+ 'auctionId': '4',
+ }
+ ];
+
+ let response = '' +
+ '' +
+ ' ' +
+ ' Adswizz' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' 00:00:09' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' ' +
+ ' 0.2000' +
+ ' ' +
+ ' ' +
+ ' ' +
+ '';
+
+ let ad = '';
+ let formattedAd = '';
+
+ it('should get correct bid response', function () {
+ var request = spec.buildRequests(formattedBidRequests, formattedBidRequests[0]);
+
+ let expectedResponse = [
+ {
+ requestId: '30b31c1838de1e',
+ cpm: '0.2000',
+ width: 300,
+ height: 600,
+ creativeId: '28517153',
+ currency: 'EUR',
+ netRevenue: true,
+ ttl: 360,
+ ad: ad
+ }
+ ];
+
+ let result = spec.interpretResponse(response, request);
+ expect(Object.keys(result[0])).to.deep.equal(Object.keys(expectedResponse[0]));
+ });
+
+ it('should get correct bid response with formated ad', function () {
+ var request = spec.buildRequests(formattedBidRequests, formattedBidRequests[0]);
+
+ let expectedResponse = [
+ {
+ requestId: '30b31c1838de1e',
+ cpm: '0.2000',
+ width: 300,
+ height: 600,
+ creativeId: '28517153',
+ currency: 'EUR',
+ netRevenue: true,
+ ttl: 360,
+ ad: formattedAd
+ }
+ ];
+
+ let result = spec.interpretResponse(response, request);
+ expect(Object.keys(result[0])).to.deep.equal(Object.keys(expectedResponse[0]));
+ });
+
+ it('handles nobid responses', function () {
+ var reqest = spec.buildRequests(formattedBidRequests, formattedBidRequests[0]);
+ let response = '';
+
+ let result = spec.interpretResponse(response, reqest);
+ expect(result.length).to.equal(0);
+ });
+ });
+});