UNPKG

mk9-prebid

Version:

Header Bidding Management Library

243 lines (218 loc) 7.96 kB
import {expect} from 'chai'; import {spec, ENDPOINT_PROTOCOL, ENDPOINT_DOMAIN, ENDPOINT_PATH} from 'modules/adpartnerBidAdapter.js'; import {newBidder} from 'src/adapters/bidderFactory.js'; const BIDDER_CODE = 'adpartner'; describe('AdpartnerAdapter', function () { const adapter = newBidder(spec); describe('inherited functions', function () { it('exists and is a function', function () { expect(adapter.callBids).to.be.exist.and.to.be.a('function'); }); }); describe('isBidRequestValid', function () { it('should return true when required params found', function () { let validRequest = { 'params': { 'unitId': 123 } }; expect(spec.isBidRequestValid(validRequest)).to.equal(true); }); it('should return true when required params is srting', function () { let validRequest = { 'params': { 'unitId': '456' } }; expect(spec.isBidRequestValid(validRequest)).to.equal(true); }); it('should return false when required params are not passed', function () { let validRequest = { 'params': { 'unknownId': 123 } }; expect(spec.isBidRequestValid(validRequest)).to.equal(false); }); it('should return false when required params is 0', function () { let validRequest = { 'params': { 'unitId': 0 } }; expect(spec.isBidRequestValid(validRequest)).to.equal(false); }); }); describe('buildRequests', function () { let validEndpoint = ENDPOINT_PROTOCOL + '://' + ENDPOINT_DOMAIN + ENDPOINT_PATH + '?tag=123,456&sizes=300x250|300x600,728x90&referer=https%3A%2F%2Ftest.domain'; let validRequest = [ { 'bidder': BIDDER_CODE, 'params': { 'unitId': 123 }, 'adUnitCode': 'adunit-code-1', 'sizes': [[300, 250], [300, 600]], 'bidId': '30b31c1838de1e' }, { 'bidder': BIDDER_CODE, 'params': { 'unitId': '456' }, 'adUnitCode': 'adunit-code-2', 'sizes': [[728, 90]], 'bidId': '22aidtbx5eabd9' } ]; let bidderRequest = { refererInfo: { referer: 'https://test.domain' } }; it('bidRequest HTTP method', function () { const request = spec.buildRequests(validRequest, bidderRequest); expect(request.method).to.equal('POST'); }); it('bidRequest url', function () { const request = spec.buildRequests(validRequest, bidderRequest); expect(request.url).to.equal(validEndpoint); }); it('bidRequest data', function () { const request = spec.buildRequests(validRequest, bidderRequest); const payload = JSON.parse(request.data); expect(payload[0].unitId).to.equal(123); expect(payload[0].sizes).to.deep.equal([[300, 250], [300, 600]]); expect(payload[0].bidId).to.equal('30b31c1838de1e'); expect(payload[1].unitId).to.equal(456); expect(payload[1].sizes).to.deep.equal([[728, 90]]); expect(payload[1].bidId).to.equal('22aidtbx5eabd9'); }); }); describe('joinSizesToString', function () { it('success convert sizes list to string', function () { const sizesStr = spec.joinSizesToString([[300, 250], [300, 600]]); expect(sizesStr).to.equal('300x250|300x600'); }); }); describe('interpretResponse', function () { const bidRequest = { 'method': 'POST', 'url': ENDPOINT_PROTOCOL + '://' + ENDPOINT_DOMAIN + ENDPOINT_PATH + '?tag=123,456&code=adunit-code-1,adunit-code-2&bid=30b31c1838de1e,22aidtbx5eabd9&sizes=300x250|300x600,728x90&referer=https%3A%2F%2Ftest.domain', 'data': '[{"unitId": 13144370,"adUnitCode": "div-gpt-ad-1460505748561-0","sizes": [[300, 250], [300, 600]],"bidId": "2bdcb0b203c17d","referer": "https://test.domain/index.html"},{"unitId": 13144370,"adUnitCode":"div-gpt-ad-1460505748561-1","sizes": [[768, 90]],"bidId": "3dc6b8084f91a8","referer": "https://test.domain/index.html"}]' }; const bidResponse = { body: { 'div-gpt-ad-1460505748561-0': { 'ad': '<div>ad</div>', 'width': 300, 'height': 250, 'creativeId': '8:123456', 'adomain': [ 'test.domain' ], 'syncs': [ {'type': 'image', 'url': 'https://test.domain/tracker_1.gif'}, {'type': 'image', 'url': 'https://test.domain/tracker_2.gif'}, {'type': 'image', 'url': 'https://test.domain/tracker_3.gif'} ], 'winNotification': [ { 'method': 'POST', 'path': '/hb/bid_won?test=1', 'data': { 'ad': [ {'dsp': 8, 'id': 800008, 'cost': 1.0e-5, 'nurl': 'https://test.domain/'} ], 'unit_id': 1234, 'site_id': 123 } } ], 'cpm': 0.01, 'currency': 'USD', 'netRevenue': true } }, headers: {} }; it('result is correct', function () { const result = spec.interpretResponse(bidResponse, bidRequest); expect(result[0].requestId).to.equal('2bdcb0b203c17d'); expect(result[0].cpm).to.equal(0.01); expect(result[0].width).to.equal(300); expect(result[0].height).to.equal(250); expect(result[0].creativeId).to.equal('8:123456'); expect(result[0].currency).to.equal('USD'); expect(result[0].ttl).to.equal(60); expect(result[0].meta.advertiserDomains).to.deep.equal(['test.domain']); expect(result[0].winNotification[0]).to.deep.equal({'method': 'POST', 'path': '/hb/bid_won?test=1', 'data': {'ad': [{'dsp': 8, 'id': 800008, 'cost': 1.0e-5, 'nurl': 'https://test.domain/'}], 'unit_id': 1234, 'site_id': 123}}); }); }); describe('adResponse', function () { const bid = { 'unitId': 13144370, 'adUnitCode': 'div-gpt-ad-1460505748561-0', 'sizes': [[300, 250], [300, 600]], 'bidId': '2bdcb0b203c17d', 'referer': 'https://test.domain/index.html' }; const ad = { 'ad': '<div>ad</div>', 'width': 300, 'height': 250, 'creativeId': '8:123456', 'syncs': [], 'winNotification': [], 'cpm': 0.01, 'currency': 'USD', 'netRevenue': true, 'adomain': [ 'test.domain' ], }; it('fill ad for response', function () { const result = spec.adResponse(bid, ad); expect(result.requestId).to.equal('2bdcb0b203c17d'); expect(result.cpm).to.equal(0.01); expect(result.width).to.equal(300); expect(result.height).to.equal(250); expect(result.creativeId).to.equal('8:123456'); expect(result.currency).to.equal('USD'); expect(result.ttl).to.equal(60); expect(result.meta.advertiserDomains).to.deep.equal(['test.domain']); }); }); describe('onBidWon', function () { const bid = { winNotification: [ { 'method': 'POST', 'path': '/hb/bid_won?test=1', 'data': { 'ad': [ {'dsp': 8, 'id': 800008, 'cost': 0.01, 'nurl': 'http://test.domain/'} ], 'unit_id': 1234, 'site_id': 123 } } ] }; let ajaxStub; beforeEach(() => { ajaxStub = sinon.stub(spec, 'postRequest') }) afterEach(() => { ajaxStub.restore() }) it('calls adpartner\'s callback endpoint', () => { const result = spec.onBidWon(bid); expect(result).to.equal(true); expect(ajaxStub.calledOnce).to.equal(true); expect(ajaxStub.firstCall.args[0]).to.equal(ENDPOINT_PROTOCOL + '://' + ENDPOINT_DOMAIN + '/hb/bid_won?test=1'); expect(ajaxStub.firstCall.args[1]).to.deep.equal(JSON.stringify(bid.winNotification[0].data)); }); }); });