UNPKG

mk9-prebid

Version:

Header Bidding Management Library

336 lines (313 loc) 11.7 kB
import { expect } from 'chai'; import { spec } from 'modules/radsBidAdapter.js'; import { newBidder } from 'src/adapters/bidderFactory.js'; const RADS_ENDPOINT_URL = 'https://rads.recognified.net/md.request.php'; describe('radsAdapter', function () { const adapter = newBidder(spec); describe('isBidRequestValid', function () { let bid = { 'bidder': 'rads', 'params': { 'placement': '6682', 'pfilter': { 'floorprice': 1000000 }, 'bcat': 'IAB2,IAB4', 'dvt': 'desktop', 'ip': '1.1.1.1' }, 'sizes': [ [300, 250] ], 'bidId': '30b31c1838de1e', 'bidderRequestId': '22edbae2733bf6', 'auctionId': '1d1a030790a475' }; 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 = { 'someIncorrectParam': 0 }; expect(spec.isBidRequestValid(bid)).to.equal(false); }); }); describe('buildRequests', function () { let bidRequests = [{ 'bidder': 'rads', 'params': { 'placement': '6682', 'pfilter': { 'floorprice': 1000000, 'geo': { 'country': 'DE' } }, 'bcat': 'IAB2,IAB4', 'dvt': 'desktop', 'ip': '1.1.1.1' }, 'sizes': [ [300, 250] ], 'mediaTypes': { 'video': { 'playerSize': [640, 480], 'context': 'instream' }, 'banner': { 'sizes': [ [100, 100], [400, 400], [500, 500] ] } }, 'bidId': '30b31c1838de1e', 'bidderRequestId': '22edbae2733bf6', 'auctionId': '1d1a030790a475', 'userId': { 'netId': '123', 'uid2': '456' } }, { 'bidder': 'rads', 'params': { 'placement': '6682', 'pfilter': { 'floorprice': 1000000, 'geo': { 'country': 'DE', 'region': 'DE-BE' }, }, 'bcat': 'IAB2,IAB4', 'dvt': 'desktop' }, 'mediaTypes': { 'video': { 'playerSize': [[640, 480], [500, 500], [600, 600]], 'context': 'instream' } }, 'bidId': '30b31c1838de1e', 'bidderRequestId': '22edbae2733bf6', 'auctionId': '1d1a030790a475' }]; // Without gdprConsent let bidderRequest = { refererInfo: { referer: 'some_referrer.net' } } // With gdprConsent var bidderRequestGdprConsent = { refererInfo: { referer: 'some_referrer.net' }, gdprConsent: { consentString: 'BOJ/P2HOJ/P2HABABMAAAAAZ+A==', vendorData: {someData: 'value'}, gdprApplies: true } }; // without gdprConsent const request = spec.buildRequests(bidRequests, bidderRequest); it('sends bid request to our endpoint via GET', function () { expect(request[0].method).to.equal('GET'); let data = request[0].data.replace(/rnd=\d+\&/g, '').replace(/ref=.*\&bid/g, 'bid'); expect(data).to.equal('_f=prebid_js&_ps=6682&idt=100&p=some_referrer.net&bid_id=30b31c1838de1e&rt=bid-response&srw=100&srh=100&alt_ad_sizes%5B0%5D=400x400&alt_ad_sizes%5B1%5D=500x500&pfilter%5Bfloorprice%5D=1000000&pfilter%5Bgeo%5D%5Bcountry%5D=DE&bcat=IAB2%2CIAB4&dvt=desktop&i=1.1.1.1&did_netid=123&did_uid2=456'); }); it('sends bid video request to our rads endpoint via GET', function () { expect(request[1].method).to.equal('GET'); let data = request[1].data.replace(/rnd=\d+\&/g, '').replace(/ref=.*\&bid/g, 'bid'); expect(data).to.equal('_f=prebid_js&_ps=6682&idt=100&p=some_referrer.net&bid_id=30b31c1838de1e&rt=vast2&srw=640&srh=480&alt_ad_sizes%5B0%5D=500x500&alt_ad_sizes%5B1%5D=600x600&pfilter%5Bfloorprice%5D=1000000&pfilter%5Bgeo%5D%5Bcountry%5D=DE&pfilter%5Bgeo%5D%5Bregion%5D=DE-BE&bcat=IAB2%2CIAB4&dvt=desktop'); }); // with gdprConsent const request2 = spec.buildRequests(bidRequests, bidderRequestGdprConsent); it('sends bid request to our endpoint via GET', function () { expect(request2[0].method).to.equal('GET'); let data = request2[0].data.replace(/rnd=\d+\&/g, '').replace(/ref=.*\&bid/g, 'bid'); expect(data).to.equal('_f=prebid_js&_ps=6682&idt=100&p=some_referrer.net&bid_id=30b31c1838de1e&rt=bid-response&srw=100&srh=100&alt_ad_sizes%5B0%5D=400x400&alt_ad_sizes%5B1%5D=500x500&pfilter%5Bfloorprice%5D=1000000&pfilter%5Bgeo%5D%5Bcountry%5D=DE&pfilter%5Bgdpr_consent%5D=BOJ%2FP2HOJ%2FP2HABABMAAAAAZ%2BA%3D%3D&pfilter%5Bgdpr%5D=true&bcat=IAB2%2CIAB4&dvt=desktop&i=1.1.1.1&did_netid=123&did_uid2=456'); }); it('sends bid video request to our rads endpoint via GET', function () { expect(request2[1].method).to.equal('GET'); let data = request2[1].data.replace(/rnd=\d+\&/g, '').replace(/ref=.*\&bid/g, 'bid'); expect(data).to.equal('_f=prebid_js&_ps=6682&idt=100&p=some_referrer.net&bid_id=30b31c1838de1e&rt=vast2&srw=640&srh=480&alt_ad_sizes%5B0%5D=500x500&alt_ad_sizes%5B1%5D=600x600&pfilter%5Bfloorprice%5D=1000000&pfilter%5Bgeo%5D%5Bcountry%5D=DE&pfilter%5Bgeo%5D%5Bregion%5D=DE-BE&pfilter%5Bgdpr_consent%5D=BOJ%2FP2HOJ%2FP2HABABMAAAAAZ%2BA%3D%3D&pfilter%5Bgdpr%5D=true&bcat=IAB2%2CIAB4&dvt=desktop'); }); }); describe('interpretResponse', function () { let serverBannerResponse = { 'body': { 'cpm': 5000000, 'crid': 100500, 'width': '300', 'height': '250', 'adTag': '<!-- test creative -->', 'requestId': '220ed41385952a', 'currency': 'EUR', 'ttl': 60, 'netRevenue': true, 'zone': '6682', 'adomain': ['bdomain'] } }; let serverVideoResponse = { 'body': { 'cpm': 5000000, 'crid': 100500, 'width': '300', 'height': '250', 'vastXml': '{"reason":7001,"status":"accepted"}', 'requestId': '220ed41385952a', 'currency': 'EUR', 'ttl': 60, 'netRevenue': true, 'zone': '6682' } }; let expectedResponse = [{ requestId: '23beaa6af6cdde', cpm: 0.5, width: 0, height: 0, creativeId: 100500, dealId: '', currency: 'EUR', netRevenue: true, ttl: 300, ad: '<!-- test creative -->', meta: {advertiserDomains: ['bdomain']} }, { requestId: '23beaa6af6cdde', cpm: 0.5, width: 0, height: 0, creativeId: 100500, dealId: '', currency: 'EUR', netRevenue: true, ttl: 300, vastXml: '{"reason":7001,"status":"accepted"}', mediaType: 'video', meta: {advertiserDomains: []} }]; it('should get the correct bid response by display ad', function () { let bidRequest = [{ 'method': 'GET', 'url': RADS_ENDPOINT_URL, 'refererInfo': { 'referer': '' }, 'data': { 'bid_id': '30b31c1838de1e' } }]; let result = spec.interpretResponse(serverBannerResponse, bidRequest[0]); expect(Object.keys(result[0])).to.have.members(Object.keys(expectedResponse[0])); expect(result[0].meta.advertiserDomains.length).to.equal(1); expect(result[0].meta.advertiserDomains[0]).to.equal(expectedResponse[0].meta.advertiserDomains[0]); }); it('should get the correct rads video bid response by display ad', function () { let bidRequest = [{ 'method': 'GET', 'url': RADS_ENDPOINT_URL, 'mediaTypes': { 'video': { 'playerSize': [640, 480], 'context': 'instream' } }, 'data': { 'bid_id': '30b31c1838de1e' } }]; let result = spec.interpretResponse(serverVideoResponse, bidRequest[0]); expect(Object.keys(result[0])).to.have.members(Object.keys(expectedResponse[1])); expect(result[0].meta.advertiserDomains.length).to.equal(0); }); it('handles empty bid response', function () { let response = { body: {} }; let result = spec.interpretResponse(response); expect(result.length).to.equal(0); }); }); describe(`getUserSyncs test usage`, function () { let serverResponses; beforeEach(function () { serverResponses = [{ body: { requestId: '23beaa6af6cdde', cpm: 0.5, width: 0, height: 0, creativeId: 100500, dealId: '', currency: 'EUR', netRevenue: true, ttl: 300, type: 'sspHTML', ad: '<!-- test creative -->', userSync: { iframeUrl: ['anyIframeUrl?a=1'], imageUrl: ['anyImageUrl', 'anyImageUrl2'] } } }]; }); it(`return value should be an array`, function () { expect(spec.getUserSyncs({ iframeEnabled: true })).to.be.an('array'); }); it(`array should have only one object and it should have a property type = 'iframe'`, function () { expect(spec.getUserSyncs({ iframeEnabled: true }, serverResponses).length).to.be.equal(1); let [userSync] = spec.getUserSyncs({ iframeEnabled: true }, serverResponses); expect(userSync).to.have.property('type'); expect(userSync.type).to.be.equal('iframe'); }); it(`we have valid sync url for iframe`, function () { let [userSync] = spec.getUserSyncs({ iframeEnabled: true }, serverResponses, {consentString: 'anyString'}); expect(userSync.url).to.be.equal('anyIframeUrl?a=1&gdpr_consent=anyString') expect(userSync.type).to.be.equal('iframe'); }); it(`we have valid sync url for image`, function () { let [userSync] = spec.getUserSyncs({ pixelEnabled: true }, serverResponses, {gdprApplies: true, consentString: 'anyString'}); expect(userSync.url).to.be.equal('anyImageUrl?gdpr=1&gdpr_consent=anyString') expect(userSync.type).to.be.equal('image'); }); it(`we have valid sync url for image and iframe`, function () { let userSync = spec.getUserSyncs({ iframeEnabled: true, pixelEnabled: true }, serverResponses, {gdprApplies: true, consentString: 'anyString'}); expect(userSync.length).to.be.equal(3); expect(userSync[0].url).to.be.equal('anyIframeUrl?a=1&gdpr=1&gdpr_consent=anyString') expect(userSync[0].type).to.be.equal('iframe'); expect(userSync[1].url).to.be.equal('anyImageUrl?gdpr=1&gdpr_consent=anyString') expect(userSync[1].type).to.be.equal('image'); expect(userSync[2].url).to.be.equal('anyImageUrl2?gdpr=1&gdpr_consent=anyString') expect(userSync[2].type).to.be.equal('image'); }); }); describe(`getUserSyncs test usage passback response`, function () { let serverResponses; beforeEach(function () { serverResponses = [{ body: { reason: 8002, status: 'rejected', msg: 'passback', bid_id: '115de76437d5ae6', 'zone': '4773', } }]; }); it(`check for zero array when iframeEnabled`, function () { expect(spec.getUserSyncs({ iframeEnabled: true })).to.be.an('array'); expect(spec.getUserSyncs({ iframeEnabled: true }, serverResponses).length).to.be.equal(0); }); it(`check for zero array when iframeEnabled`, function () { expect(spec.getUserSyncs({ pixelEnabled: true })).to.be.an('array'); expect(spec.getUserSyncs({ pixelEnabled: true }, serverResponses).length).to.be.equal(0); }); }); });