UNPKG

mk9-prebid

Version:

Header Bidding Management Library

165 lines (146 loc) 6.14 kB
import { expect } from 'chai' import { ENDPOINT, spec } from 'modules/qwarryBidAdapter.js' import { newBidder } from 'src/adapters/bidderFactory.js' const REQUEST = { 'bidId': '456', 'bidder': 'qwarry', 'sizes': [[100, 200], [300, 400]], 'params': { zoneToken: 'e64782a4-8e68-4c38-965b-80ccf115d46f', pos: 7 }, 'schain': { ver: '1.0', complete: 1, nodes: [{ asi: 'qwarry.com', sid: '00001', hp: 1 }] } } const BIDDER_BANNER_RESPONSE = { 'prebidResponse': [{ 'ad': '<div>test</div>', 'requestId': 'e64782a4-8e68-4c38-965b-80ccf115d46d', 'cpm': 900.5, 'currency': 'USD', 'width': 640, 'height': 480, 'ttl': 300, 'creativeId': 1, 'netRevenue': true, 'winUrl': 'http://test.com', 'format': 'banner', 'adomain': ['test.com'] }] } const BIDDER_VIDEO_RESPONSE = { 'prebidResponse': [{ 'ad': '<xml>vast</xml>', 'requestId': 'e64782a4-8e68-4c38-965b-80ccf115d46z', 'cpm': 800.4, 'currency': 'USD', 'width': 1024, 'height': 768, 'ttl': 200, 'creativeId': 2, 'netRevenue': true, 'winUrl': 'http://test.com', 'format': 'video', 'adomain': ['test.com'] }] } const BIDDER_NO_BID_RESPONSE = '' describe('qwarryBidAdapter', 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 () { it('should return true when required params found', function () { expect(spec.isBidRequestValid(REQUEST)).to.equal(true) }) it('should return false when required params are not passed', function () { let bid = Object.assign({}, REQUEST) delete bid.params.zoneToken expect(spec.isBidRequestValid(bid)).to.equal(false) delete bid.params expect(spec.isBidRequestValid(bid)).to.equal(false) }) }) describe('buildRequests', function () { let bidRequests = [REQUEST] const bidderRequest = spec.buildRequests(bidRequests, { bidderRequestId: '123', gdprConsent: { gdprApplies: true, consentString: 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A==' }, refererInfo: { referer: 'http://test.com/path.html' } }) it('sends bid request to ENDPOINT via POST', function () { expect(bidderRequest.method).to.equal('POST') expect(bidderRequest.data.requestId).to.equal('123') expect(bidderRequest.data.referer).to.equal('http://test.com/path.html') expect(bidderRequest.data.schain).to.deep.contains({ver: '1.0', complete: 1, nodes: [{asi: 'qwarry.com', sid: '00001', hp: 1}]}) expect(bidderRequest.data.bids).to.deep.contains({ bidId: '456', zoneToken: 'e64782a4-8e68-4c38-965b-80ccf115d46f', pos: 7, sizes: [{ width: 100, height: 200 }, { width: 300, height: 400 }] }) expect(bidderRequest.data.gdprConsent).to.deep.contains({ consentRequired: true, consentString: 'BOJ8RZsOJ8RZsABAB8AAAAAZ+A==' }) expect(bidderRequest.options.customHeaders).to.deep.equal({ 'Rtb-Direct': true }) expect(bidderRequest.options.contentType).to.equal('application/json') expect(bidderRequest.url).to.equal(ENDPOINT) }) }) describe('interpretResponse', function () { it('handles banner request : should get correct bid response', function () { const result = spec.interpretResponse({ body: BIDDER_BANNER_RESPONSE }, {}) expect(result[0]).to.have.property('ad').equal('<div>test</div>') expect(result[0]).to.have.property('requestId').equal('e64782a4-8e68-4c38-965b-80ccf115d46d') expect(result[0]).to.have.property('cpm').equal(900.5) expect(result[0]).to.have.property('currency').equal('USD') expect(result[0]).to.have.property('width').equal(640) expect(result[0]).to.have.property('height').equal(480) expect(result[0]).to.have.property('ttl').equal(300) expect(result[0]).to.have.property('creativeId').equal(1) expect(result[0]).to.have.property('netRevenue').equal(true) expect(result[0]).to.have.property('winUrl').equal('http://test.com') expect(result[0]).to.have.property('format').equal('banner') expect(result[0].meta).to.exist.property('advertiserDomains') expect(result[0].meta).to.have.property('advertiserDomains').lengthOf(1) }) it('handles video request : should get correct bid response', function () { const result = spec.interpretResponse({ body: BIDDER_VIDEO_RESPONSE }, {}) expect(result[0]).to.have.property('ad').equal('<xml>vast</xml>') expect(result[0]).to.have.property('requestId').equal('e64782a4-8e68-4c38-965b-80ccf115d46z') expect(result[0]).to.have.property('cpm').equal(800.4) expect(result[0]).to.have.property('currency').equal('USD') expect(result[0]).to.have.property('width').equal(1024) expect(result[0]).to.have.property('height').equal(768) expect(result[0]).to.have.property('ttl').equal(200) expect(result[0]).to.have.property('creativeId').equal(2) expect(result[0]).to.have.property('netRevenue').equal(true) expect(result[0]).to.have.property('winUrl').equal('http://test.com') expect(result[0]).to.have.property('format').equal('video') expect(result[0]).to.have.property('vastXml').equal('<xml>vast</xml>') expect(result[0].meta).to.exist.property('advertiserDomains') expect(result[0].meta).to.have.property('advertiserDomains').lengthOf(1) }) it('handles no bid response : should get empty array', function () { let result = spec.interpretResponse({ body: undefined }, {}) expect(result).to.deep.equal([]) result = spec.interpretResponse({ body: BIDDER_NO_BID_RESPONSE }, {}) expect(result).to.deep.equal([]) }) }) describe('onBidWon', function () { it('handles banner win: should get true', function () { const win = BIDDER_BANNER_RESPONSE.prebidResponse[0] const bidWonResult = spec.onBidWon(win) expect(bidWonResult).to.equal(true) }) }) })