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

New adapter: Colombia #5158

Merged
merged 21 commits into from
Apr 27, 2020
Merged
Show file tree
Hide file tree
Changes from 18 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions modules/colombiaBidAdapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
import * as utils from '../src/utils.js';
import {config} from '../src/config.js';
import {registerBidder} from '../src/adapters/bidderFactory.js';
const BIDDER_CODE = 'colombia';
const ENDPOINT_URL = 'https://ade.clmbtech.com/cde/prebid.htm';
const HOST_NAME = document.location.protocol + '//' + window.location.host;

export const spec = {
code: BIDDER_CODE,
aliases: ['clmb'],
isBidRequestValid: function(bid) {
return !!(bid.params.placementId);
},
buildRequests: function(validBidRequests, bidderRequest) {
return validBidRequests.map(bidRequest => {
const params = bidRequest.params;
const sizes = utils.parseSizesInput(bidRequest.sizes)[0];
const width = sizes.split('x')[0];
const height = sizes.split('x')[1];
const placementId = params.placementId;
const cb = Math.floor(Math.random() * 99999999999);
const bidId = bidRequest.bidId;
const referrer = (bidderRequest && bidderRequest.refererInfo) ? bidderRequest.refererInfo.referer : '';
const payload = {
v: 'hb1',
p: placementId,
w: width,
h: height,
cb: cb,
r: referrer,
uid: bidId,
t: 'i',
d: HOST_NAME,
};
return {
method: 'POST',
url: ENDPOINT_URL,
data: payload,
}
});
},
interpretResponse: function(serverResponse, bidRequest) {
const bidResponses = [];
const response = serverResponse.body;
const crid = response.creativeId || 0;
const width = response.width || 0;
const height = response.height || 0;
let cpm = response.cpm || 0;
if (width == 300 && height == 250) {
cpm = cpm * 0.2;
}
if (width == 320 && height == 50) {
cpm = cpm * 0.55;
}
if (cpm < 1) {
return;
}
if (width !== 0 && height !== 0 && cpm !== 0 && crid !== 0) {
const dealId = response.dealid || '';
const currency = response.currency || 'USD';
const netRevenue = (response.netRevenue === undefined) ? true : response.netRevenue;
const bidResponse = {
requestId: bidRequest.data.uid,
cpm: cpm,
width: response.width,
height: response.height,
creativeId: crid,
dealId: dealId,
currency: currency,
netRevenue: netRevenue,
ttl: config.getConfig('_bidderTimeout'),
referrer: bidRequest.data.r,
ad: response.ad
};
bidResponses.push(bidResponse);
}
return bidResponses;
}
}
registerBidder(spec);
2 changes: 1 addition & 1 deletion modules/colombiaBidAdapter.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Maintainer: colombiaonline@timesinteret.in

Connect to COLOMBIA for bids.

THE COLOMBIA adapter requires setup and approval from the COLOMBIA team. Please reach out to your account team or colombiaonline@timesinteret.in for more information.
COLOMBIA adapter requires setup and approval from the COLOMBIA team. Please reach out to your account team or colombiaonline@timesinteret.in for more information.

# Test Parameters
```
Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Empty file modified package.json
100755 → 100644
Empty file.
152 changes: 152 additions & 0 deletions test/spec/modules/colombiaBidAdapter_spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
import { expect } from 'chai';
import { spec } from 'modules/colombiaBidAdapter';
import { newBidder } from 'src/adapters/bidderFactory';

const HOST_NAME = document.location.protocol + '//' + window.location.host;
const ENDPOINT = 'https://ade.clmbtech.com/cde/prebid.htm';

describe('colombiaBidAdapter', function() {
const adapter = newBidder(spec);

describe('isBidRequestValid', function () {
let bid = {
'bidder': 'colombia',
'params': {
placementId: '307466'
},
'adUnitCode': 'adunit-code',
'sizes': [
[300, 250]
],
'bidId': '23beaa6af6cdde',
'bidderRequestId': '19c0c1efdf37e7',
'auctionId': '61466567-d482-4a16-96f0-fe5f25ffbdf1',
};

it('should return true when required params found', function () {
expect(spec.isBidRequestValid(bid)).to.equal(true);
});

it('should return false when placementId not passed correctly', function () {
bid.params.placementId = '';
expect(spec.isBidRequestValid(bid)).to.equal(false);
});

it('should return false when require params are not passed', function () {
let bid = Object.assign({}, bid);
bid.params = {};
expect(spec.isBidRequestValid(bid)).to.equal(false);
});
});

describe('buildRequests', function () {
let bidRequests = [
{
'bidder': 'colombia',
'params': {
placementId: '307466'
},
'adUnitCode': 'adunit-code1',
'sizes': [
[300, 250]
],
'bidId': '23beaa6af6cdde',
'bidderRequestId': '19c0c1efdf37e7',
'auctionId': '61466567-d482-4a16-96f0-fe5f25ffbdf1',
},
{
'bidder': 'colombia',
'params': {
placementId: '307466'
},
'adUnitCode': 'adunit-code2',
'sizes': [
[300, 250]
],
'bidId': '382091349b149f"',
'bidderRequestId': '"1f9c98192de251"',
'auctionId': '61466567-d482-4a16-96f0-fe5f25ffbdf1',
}
];

const request = spec.buildRequests(bidRequests);

it('sends bid request to our endpoint via POST', function () {
expect(request[0].method).to.equal('POST');
expect(request[1].method).to.equal('POST');
});

it('attaches source and version to endpoint URL as query params', function () {
expect(request[0].url).to.equal(ENDPOINT);
expect(request[1].url).to.equal(ENDPOINT);
});
});

describe('interpretResponse', function () {
let bidRequest = [
{
'method': 'POST',
'url': ENDPOINT,
'data': {
'v': 'hb1',
'p': '307466',
'w': '300',
'h': '250',
'cb': 12892917383,
'r': 'http%3A%2F%2Flocalhost%3A9876%2F%3Fid%3D74552836',
'uid': '23beaa6af6cdde',
't': 'i',
'd': HOST_NAME
}
}
];

let serverResponse = {
body: {
'ad': '<div>This is test case for colombia adapter</div> ',
'cpm': 3.14,
'creativeId': '6b958110-612c-4b03-b6a9-7436c9f746dc-1sk24',
'currency': 'USD',
'statusMessage': 'Bid available',
'uid': '23beaa6af6cdde',
'width': 300,
'height': 250,
'netRevenue': true,
'ttl': 600
}
};

it('should get the correct bid response', function () {
let expectedResponse = [{
'requestId': '23beaa6af6cdde',
'cpm': 3.14,
'width': 300,
'height': 250,
'creativeId': '6b958110-612c-4b03-b6a9-7436c9f746dc-1sk24',
'dealId': '',
'currency': 'USD',
'netRevenue': true,
'ttl': 3000,
'referrer': '',
'ad': '<div>This is test case for colombia adapter</div>'
}];
let result = spec.interpretResponse(serverResponse, bidRequest[0]);
expect(Object.keys(result)).to.deep.equal(Object.keys(expectedResponse));
Copy link
Contributor

Choose a reason for hiding this comment

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

When Running npx gulp test, I get this error:

✖ should get the correct bid response
        HeadlessChrome 81.0.4044 (Mac OS X 10.15.4)
      TypeError: Cannot convert undefined or null to object
          at keys (<anonymous>)
          at Function.keys (node_modules/es5-shim/es5-shim.js:1145:24)
          at Context.<anonymous> (webpack:///test/spec/modules/colombiaBidAdapter_spec.js:134:21 <- test/test_index.js:113581:67)

});

it('handles empty bid response', function () {
let response = {
body: {
'uid': '2c0b634db95a01',
'height': 0,
'crid': '',
'statusMessage': 'Bid returned empty or error response',
'width': 0,
'cpm': 0
}
};
let result = spec.interpretResponse(response, bidRequest[0]);
expect(result.length).to.equal(0);
Copy link
Contributor

Choose a reason for hiding this comment

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

When running npx gulp test, I get this other error:

✖ handles empty bid response
        HeadlessChrome 81.0.4044 (Mac OS X 10.15.4)
      TypeError: Cannot read property 'length' of undefined
          at Context.<anonymous> (webpack:///test/spec/modules/colombiaBidAdapter_spec.js:149:21 <- test/test_index.js:113595:67)

});
});
});