Skip to content

Commit

Permalink
Gnet Bid Adapter: add new bid adapter (prebid#6536)
Browse files Browse the repository at this point in the history
* Add files via upload

* Add files via upload

* Change params on gnetBidder

* ADJ - Use parseSizesInput to get sizes
ADJ - Check serverResponse object
ADJ - Remove getUserSyncs function

* ADJ - Change prebid endpoint

* ADJ - Change endpoint on test
  • Loading branch information
rohsu authored and umakajan committed May 6, 2021
1 parent 29d85a7 commit ab3b8f1
Show file tree
Hide file tree
Showing 3 changed files with 279 additions and 0 deletions.
101 changes: 101 additions & 0 deletions modules/gnetBidAdapter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
import { registerBidder } from '../src/adapters/bidderFactory.js';
import * as utils from '../src/utils.js';
import { BANNER } from '../src/mediaTypes.js';

const BIDDER_CODE = 'gnet';
const ENDPOINT = 'https://adserver.gnetproject.com/prebid.php';

export const spec = {
code: BIDDER_CODE,
supportedMediaTypes: [BANNER],

/**
* Determines whether or not the given bid request is valid.
*
* @param {BidRequest} bid The bid params to validate.
* @return boolean True if this is a valid bid, and false otherwise.
*/
isBidRequestValid: function (bid) {
return !!(bid.params.websiteId && bid.params.externalId);
},

/**
* Make a server request from the list of BidRequests.
*
* @param {validBidRequests[]} - an array of bids
* @return ServerRequest Info describing the request to the server.
*/
buildRequests: function (validBidRequests, bidderRequest) {
const bidRequests = [];
const referer = bidderRequest.refererInfo.referer;

utils._each(validBidRequests, (request) => {
const data = {};

data.referer = referer;
data.adUnitCode = request.adUnitCode;
data.bidId = request.bidId;
data.transactionId = request.transactionId;

data.sizes = utils.parseSizesInput(request.sizes);

data.params = request.params;

const payloadString = JSON.stringify(data);

bidRequests.push({
method: 'POST',
url: ENDPOINT,
mode: 'no-cors',
options: {
withCredentials: false,
},
data: payloadString
});
});

return bidRequests;
},

/**
* Unpack the response from the server into a list of bids.
*
* @param {*} serverResponse A successful response from the server.
* @return {Bid[]} An array of bids which were nested inside the server.
*/
interpretResponse: function (serverResponse, requests) {
if (typeof serverResponse !== 'object') {
return [];
}

const res = serverResponse && serverResponse.body;

if (utils.isEmpty(res)) {
return [];
}

if (res.bids) {
const bids = [];
utils._each(res.bids, (bidData) => {
const bid = {
requestId: bidData.bidId,
cpm: bidData.cpm,
currency: bidData.currency,
width: bidData.width,
height: bidData.height,
ad: bidData.ad,
ttl: 300,
creativeId: bidData.creativeId,
netRevenue: true,
};
bids.push(bid);
});

return bids;
}

return [];
},
};

registerBidder(spec);
33 changes: 33 additions & 0 deletions modules/gnetBidAdapter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Overview

```
Module Name: Gnet Bidder Adapter
Module Type: Bidder Adapter
Maintainer: roberto.wu@grumft.com
```

# Description

Module that connects to Example's demand sources

# Test Parameters
```
var adUnits = [
{
code: '/150790500/4_ZONA_IAB_300x250_5',
mediaTypes: {
banner: {
sizes: [[300, 250]],
}
},
bids: [
{
bidder: 'gnet',
params: {
websiteId: '4',
externalId: '4d52cccf30309282256012cf30309282'
}
}
]
}
];
145 changes: 145 additions & 0 deletions test/spec/modules/gnetBidAdapter_spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
import {
expect
} from 'chai';
import {
spec
} from 'modules/gnetBidAdapter.js';
import {
newBidder
} from 'src/adapters/bidderFactory.js';

const ENDPOINT = 'https://adserver.gnetproject.com/prebid.php';

describe('gnetAdapter', 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: 'gnet',
params: {
websiteId: '4',
externalId: '4d52cccf30309282256012cf30309282'
}
};

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 = {};
expect(spec.isBidRequestValid(bid)).to.equal(false);
});
});

describe('buildRequests', function () {
const bidRequests = [{
bidder: 'gnet',
params: {
websiteId: '4',
externalId: '4d52cccf30309282256012cf30309282'
},
adUnitCode: '/150790500/4_ZONA_IAB_300x250_5',
sizes: [
[300, 250],
],
bidId: '2a19afd5173318',
bidderRequestId: '1f4001782ac16c',
auctionId: 'aba03555-4802-4c45-9f15-05ffa8594cff',
transactionId: '894bdff6-61ec-4bec-a5a9-f36a5bfccef5'
}];

const bidderRequest = {
refererInfo: {
referer: 'https://gnetproject.com/'
}
};

it('sends bid request to ENDPOINT via POST', function () {
const requests = spec.buildRequests(bidRequests, bidderRequest);
expect(requests[0].url).to.equal(ENDPOINT);
expect(requests[0].method).to.equal('POST');
expect(requests[0].data).to.equal(JSON.stringify({
'referer': 'https://gnetproject.com/',
'adUnitCode': '/150790500/4_ZONA_IAB_300x250_5',
'bidId': '2a19afd5173318',
'transactionId': '894bdff6-61ec-4bec-a5a9-f36a5bfccef5',
'sizes': ['300x250'],
'params': {
'websiteId': '4',
'externalId': '4d52cccf30309282256012cf30309282'
}
}));
});
});

describe('interpretResponse', function () {
const bidderRequests = [{
bidder: 'gnet',
params: {
clientId: '123456'
},
adUnitCode: '/150790500/4_ZONA_IAB_300x250_5',
sizes: [
[300, 250],
],
bidId: '2a19afd5173318',
bidderRequestId: '1f4001782ac16c',
auctionId: 'aba03555-4802-4c45-9f15-05ffa8594cff',
transactionId: '894bdff6-61ec-4bec-a5a9-f36a5bfccef5'
}];

it('should get correct banner bid response', function () {
const response = {
bids: [
{
bidId: '2a19afd5173318',
cpm: 0.1,
currency: 'BRL',
width: 300,
height: 250,
ad: '<html><h3>I am an ad</h3></html>',
creativeId: '173560700',
}
]
};

const expectedResponse = [
{
requestId: '2a19afd5173318',
cpm: 0.1,
currency: 'BRL',
width: 300,
height: 250,
ad: '<html><h3>I am an ad</h3></html>',
ttl: 300,
creativeId: '173560700',
netRevenue: true
}
];

const result = spec.interpretResponse({
body: response
}, bidderRequests);
expect(result).to.have.lengthOf(1);
expect(result).to.deep.have.same.members(expectedResponse);
});

it('handles nobid responses', function () {
const response = '';

const result = spec.interpretResponse({
body: response
}, bidderRequests);
expect(result.length).to.equal(0);
});
});
});

0 comments on commit ab3b8f1

Please sign in to comment.