forked from prebid/Prebid.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Smartico Bid Adapter: add adomain for Prebid 5.0 (prebid#7115)
* Adding smartico adapter * bug prebid#6486 fix, added maintainer email * bug prebid#6486 fix, modified test parameters * bug prebid#6486 fix, modified test parameters #2 * prebid#6486 applied review related updates & fixes * prebid#6486 applied review related updates & fixes #2 * prebid#6486 applied review related updates & fixes #3 * samrtico adapter bug fix * smartico adapter unit test update after bug fixing * smartico adapter bug fix #2 * smartico adapter bug fix #3 * fix linting errors Co-authored-by: Dmitri <dmitri@atomdev.net> Co-authored-by: Chris Huie <phoenixtechnerd@gmail.com>
- Loading branch information
1 parent
f150d71
commit dcd2789
Showing
2 changed files
with
243 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,117 @@ | ||
import { registerBidder } from '../src/adapters/bidderFactory.js'; | ||
import { BANNER } from '../src/mediaTypes.js'; | ||
import find from 'core-js-pure/features/array/find.js'; | ||
|
||
const SMARTICO_CONFIG = { | ||
bidRequestUrl: 'https://trmads.eu/preBidRequest', | ||
widgetUrl: 'https://trmads.eu/get', | ||
method: 'POST' | ||
} | ||
|
||
const BIDDER_CODE = 'smartico'; | ||
|
||
export const spec = { | ||
code: BIDDER_CODE, | ||
supportedMediaTypes: [BANNER], | ||
isBidRequestValid: function (bid) { | ||
return !!(bid && bid.params && bid.params.token && bid.params.placementId); | ||
}, | ||
buildRequests: function (validBidRequests, bidderRequest) { | ||
var i | ||
var j | ||
var bid | ||
var bidParam | ||
var bidParams = [] | ||
var sizes | ||
var frameWidth = Math.round(window.screen.width) | ||
var frameHeight = Math.round(window.screen.height) | ||
for (i = 0; i < validBidRequests.length; i++) { | ||
bid = validBidRequests[i] | ||
if (bid.sizes) { | ||
sizes = bid.sizes | ||
} else if (typeof (BANNER) != 'undefined' && bid.mediaTypes && bid.mediaTypes[BANNER] && bid.mediaTypes[BANNER].sizes) { | ||
sizes = bid.mediaTypes[BANNER].sizes | ||
} else if (frameWidth && frameHeight) { | ||
sizes = [[frameWidth, frameHeight]] | ||
} else { | ||
sizes = [] | ||
} | ||
for (j = 0; j < sizes.length; j++) { | ||
bidParam = { | ||
token: bid.params.token || '', | ||
bidId: bid.bidId, | ||
'banner-format-width': sizes[j][0], | ||
'banner-format-height': sizes[j][1] | ||
} | ||
if (bid.params.bannerFormat) { | ||
bidParam['banner-format'] = bid.params.bannerFormat | ||
} | ||
if (bid.params.language) { | ||
bidParam.language = bid.params.language | ||
} | ||
if (bid.params.region) { | ||
bidParam.region = bid.params.region | ||
} | ||
if (bid.params.regions && (bid.params.regions instanceof String || (bid.params.regions instanceof Array && bid.params.regions.length))) { | ||
bidParam.regions = bid.params.regions | ||
if (bidParam.regions instanceof Array) { | ||
bidParam.regions = bidParam.regions.join(',') | ||
} | ||
} | ||
bidParams.push(bidParam) | ||
} | ||
} | ||
|
||
var ServerRequestObjects = { | ||
method: SMARTICO_CONFIG.method, | ||
url: SMARTICO_CONFIG.bidRequestUrl, | ||
bids: validBidRequests, | ||
data: {bidParams: bidParams, auctionId: bidderRequest.auctionId} | ||
} | ||
return ServerRequestObjects; | ||
}, | ||
interpretResponse: function (serverResponse, bidRequest) { | ||
var i | ||
var bid | ||
var bidObject | ||
var url | ||
var html | ||
var ad | ||
var ads | ||
var token | ||
var language | ||
var scriptId | ||
var bidResponses = [] | ||
ads = serverResponse.body | ||
for (i = 0; i < ads.length; i++) { | ||
ad = ads[i] | ||
bid = find(bidRequest.bids, bid => bid.bidId === ad.bidId) | ||
if (bid) { | ||
token = bid.params.token || '' | ||
|
||
language = bid.params.language || SMARTICO_CONFIG.language || '' | ||
|
||
scriptId = encodeURIComponent('smartico-widget-' + bid.params.placementId + '-' + i) | ||
|
||
url = SMARTICO_CONFIG.widgetUrl + '?token=' + encodeURIComponent(token) + '&auction-id=' + encodeURIComponent(bid.auctionId) + '&from-auction-buffer=1&own_session=1&ad=' + encodeURIComponent(ad.id) + '&scriptid=' + scriptId + (ad.bannerFormatAlias ? '&banner-format=' + encodeURIComponent(ad.bannerFormatAlias) : '') + (language ? '&language=' + encodeURIComponent(language) : '') | ||
|
||
html = '<script id="' + scriptId + '" async defer type="text/javascript" src="' + url + '"><\/script>' | ||
|
||
bidObject = { | ||
requestId: bid.bidId, | ||
cpm: ad.cpm, | ||
width: parseInt(ad.bannerFormatWidth), | ||
height: parseInt(ad.bannerFormatHeight), | ||
creativeId: ad.id, | ||
netRevenue: !!ad.netRevenue, | ||
currency: ad.currency, | ||
ttl: ad.ttl, | ||
ad: html | ||
} | ||
bidResponses.push(bidObject); | ||
} | ||
} | ||
return bidResponses; | ||
} | ||
} | ||
registerBidder(spec) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
import {expect} from 'chai'; | ||
import {spec} from 'modules/smarticoBidAdapter.js'; | ||
import {newBidder} from 'src/adapters/bidderFactory.js'; | ||
|
||
describe('smarticoBidAdapter', function () { | ||
const adapter = newBidder(spec); | ||
let bid = { | ||
adUnitCode: 'adunit-code', | ||
auctionId: '5kaj89l8-3456-2s56-c455-4g6h78jsdfgf', | ||
bidRequestsCount: 1, | ||
bidder: 'smartico', | ||
bidderRequestId: '24081afs940568', | ||
bidderRequestsCount: 1, | ||
bidderWinsCount: 0, | ||
bidId: '22499d052045', | ||
mediaTypes: {banner: {sizes: [[300, 250]]}}, | ||
params: { | ||
token: 'FNVzUGZn9ebpIOoheh3kEJ2GQ6H6IyMH39sHXaya', | ||
placementId: 'testPlacementId' | ||
}, | ||
sizes: [ | ||
[300, 250] | ||
], | ||
transactionId: '34562345-4dg7-46g7-4sg6-45gdsdj8fd56' | ||
} | ||
let bidderRequests = { | ||
auctionId: 'b06c5141-fe8f-4cdf-9d7d-54415490a917', | ||
auctionStart: 1579746300522, | ||
bidderCode: 'myBidderCode', | ||
bidderRequestId: '15246a574e859f', | ||
bids: [bid], | ||
refererInfo: { | ||
canonicalUrl: '', | ||
numIframes: 0, | ||
reachedTop: true | ||
} | ||
} | ||
describe('isBidRequestValid', function () { | ||
it('should return true where required params found', function () { | ||
expect(spec.isBidRequestValid(bid)).to.equal(true); | ||
}); | ||
}); | ||
describe('buildRequests', function () { | ||
let bidRequests = [ bid ]; | ||
let request = spec.buildRequests(bidRequests, bidderRequests); | ||
it('sends bid request via POST', function () { | ||
expect(request.method).to.equal('POST'); | ||
}); | ||
it('must contain token', function() { | ||
expect(request.data.bidParams[0].token).to.equal('FNVzUGZn9ebpIOoheh3kEJ2GQ6H6IyMH39sHXaya'); | ||
}); | ||
it('must contain auctionId', function() { | ||
expect(request.data.auctionId).to.exist.and.to.be.a('string') | ||
}); | ||
it('must contain valid width and height', function() { | ||
expect(request.data.bidParams[0]['banner-format-width']).to.exist.and.to.be.a('number') | ||
expect(request.data.bidParams[0]['banner-format-height']).to.exist.and.to.be.a('number') | ||
}); | ||
}); | ||
|
||
describe('interpretResponse', function () { | ||
let bidRequest = { | ||
method: 'POST', | ||
url: 'https://trmads.eu/preBidRequest', | ||
bids: [bid], | ||
data: [{ | ||
token: 'FNVzUGZn9ebpIOoheh3kEJ2GQ6H6IyMH39sHXaya', | ||
bidId: '22499d052045', | ||
'banner-format-width': 300, | ||
'banner-format-height': 250, | ||
placementId: 'testPlacementId', | ||
}] | ||
}; | ||
let serverResponse = { | ||
body: [{ | ||
bidId: '22499d052045', | ||
id: 987654, | ||
cpm: 10, | ||
netRevenue: 0, | ||
currency: 'EUR', | ||
ttl: 30, | ||
bannerFormatWidth: 300, | ||
bannerFormatHeight: 250, | ||
bannerFormatAlias: 'medium_rectangle' | ||
}] | ||
}; | ||
let expectedResponse = [{ | ||
requestId: bid.bidId, | ||
cpm: 10, | ||
width: 300, | ||
height: 250, | ||
creativeId: 987654, | ||
currency: 'EUR', | ||
netRevenue: false, // gross | ||
ttl: 30, | ||
ad: '<script id="smartico-widget-testPlacementId-0" async defer type="text/javascript" src="https://trmads.eu/get?token=FNVzUGZn9ebpIOoheh3kEJ2GQ6H6IyMH39sHXaya&auction-id=5kaj89l8-3456-2s56-c455-4g6h78jsdfgf&from-auction-buffer=1&own_session=1&ad=987654&scriptid=smartico-widget-testPlacementId-0&banner-format=medium_rectangle"><\/script>'}]; | ||
let result = spec.interpretResponse(serverResponse, bidRequest); | ||
it('should contain correct creativeId', function () { | ||
expect(result[0].creativeId).to.equal(expectedResponse[0].creativeId) | ||
}); | ||
it('should contain correct cpm', function () { | ||
expect(result[0].cpm).to.equal(expectedResponse[0].cpm) | ||
}); | ||
it('should contain correct width', function () { | ||
expect(result[0].width).to.equal(expectedResponse[0].width) | ||
}); | ||
it('should contain correct height', function () { | ||
expect(result[0].height).to.equal(expectedResponse[0].height) | ||
}); | ||
it('should contain correct requestId', function () { | ||
expect(result[0].requestId).to.equal(expectedResponse[0].requestId) | ||
}); | ||
it('should contain correct ttl', function () { | ||
expect(result[0].ttl).to.equal(expectedResponse[0].ttl) | ||
}); | ||
it('should contain correct netRevenue', function () { | ||
expect(result[0].netRevenue).to.equal(expectedResponse[0].netRevenue) | ||
}); | ||
it('should contain correct netRevenue', function () { | ||
expect(result[0].currency).to.equal(expectedResponse[0].currency) | ||
}); | ||
it('should contain correct ad content', function () { | ||
expect(result[0].ad).to.equal(expectedResponse[0].ad) | ||
}); | ||
}); | ||
}); |