mk9-prebid
Version:
Header Bidding Management Library
1,491 lines (1,446 loc) • 40.3 kB
JavaScript
import {expect} from 'chai';
import {spec} from 'modules/medianetBidAdapter.js';
import { makeSlot } from '../integration/faker/googletag.js';
import { config } from 'src/config.js';
$$PREBID_GLOBAL$$.version = $$PREBID_GLOBAL$$.version || 'version';
let VALID_BID_REQUEST = [{
'bidder': 'medianet',
'params': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
},
'adUnitCode': 'div-gpt-ad-1460505748561-0',
'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1',
'mediaTypes': {
'banner': {
'sizes': [[300, 250]],
}
},
'bidId': '28f8f8130a583e',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1
}, {
'bidder': 'medianet',
'params': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
},
'adUnitCode': 'div-gpt-ad-1460505748561-123',
'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822',
'mediaTypes': {
'banner': {
'sizes': [[300, 251]],
}
},
'sizes': [[300, 251]],
'bidId': '3f97ca71b1e5c2',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1
}],
VALID_BID_REQUEST_WITH_CRID = [{
'bidder': 'medianet',
'params': {
'crid': 'crid',
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
},
'adUnitCode': 'div-gpt-ad-1460505748561-0',
'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1',
'mediaTypes': {
'banner': {
'sizes': [[300, 250]],
}
},
'bidId': '28f8f8130a583e',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1
}, {
'bidder': 'medianet',
'params': {
'crid': 'crid',
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
},
'adUnitCode': 'div-gpt-ad-1460505748561-123',
'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822',
'mediaTypes': {
'banner': {
'sizes': [[300, 251]],
}
},
'sizes': [[300, 251]],
'bidId': '3f97ca71b1e5c2',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1
}],
VALID_BID_REQUEST_WITH_USERID = [{
'bidder': 'medianet',
'params': {
'crid': 'crid',
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
},
userId: {
britepoolid: '82efd5e1-816b-4f87-97f8-044f407e2911'
},
'adUnitCode': 'div-gpt-ad-1460505748561-0',
'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1',
'mediaTypes': {
'banner': {
'sizes': [[300, 250]],
}
},
'bidId': '28f8f8130a583e',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1
}, {
'bidder': 'medianet',
'params': {
'crid': 'crid',
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
},
'adUnitCode': 'div-gpt-ad-1460505748561-123',
'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822',
'mediaTypes': {
'banner': {
'sizes': [[300, 251]],
}
},
'sizes': [[300, 251]],
'bidId': '3f97ca71b1e5c2',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1
}],
VALID_BID_REQUEST_INVALID_BIDFLOOR = [{
'bidder': 'medianet',
'params': {
'cid': 'customer_id',
'bidfloor': 'abcdef',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
},
'adUnitCode': 'div-gpt-ad-1460505748561-0',
'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1',
'sizes': [[300, 250]],
'mediaTypes': {
'banner': {
'sizes': [[300, 250]],
}
},
'bidId': '28f8f8130a583e',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1
}, {
'bidder': 'medianet',
'params': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
},
'adUnitCode': 'div-gpt-ad-1460505748561-123',
'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822',
'sizes': [[300, 251]],
'mediaTypes': {
'banner': {
'sizes': [[300, 251]],
}
},
'bidId': '3f97ca71b1e5c2',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1
}],
VALID_NATIVE_BID_REQUEST = [{
'bidder': 'medianet',
'params': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
},
'adUnitCode': 'div-gpt-ad-1460505748561-0',
'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1',
'sizes': [[300, 250]],
'mediaTypes': {
'banner': {
'sizes': [[300, 250]],
}
},
'bidId': '28f8f8130a583e',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1,
'nativeParams': {
'image': {
'required': true,
'sizes': [
150,
50
],
'wmin': 50
},
'title': {
'required': true,
'len': 80
},
'sponsoredBy': {
'required': true
},
'clickUrl': {
'required': true
},
'body': {
'required': true
},
'icon': {
'required': true,
'sizes': [
50,
50
]
}
}
}, {
'bidder': 'medianet',
'params': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
},
'adUnitCode': 'div-gpt-ad-1460505748561-123',
'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822',
'sizes': [[300, 251]],
'mediaTypes': {
'banner': {
'sizes': [[300, 251]],
}
},
'bidId': '3f97ca71b1e5c2',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1,
'nativeParams': {
'image': {
'required': true,
'sizes': [
150,
50
],
'wmin': 50
},
'title': {
'required': true,
'len': 80
},
'sponsoredBy': {
'required': true
},
'clickUrl': {
'required': true
},
'body': {
'required': true
},
'icon': {
'required': true,
'sizes': [
50,
50
]
}
}
}],
VALID_AUCTIONDATA = {
'timeout': config.getConfig('bidderTimeout'),
'refererInfo': {
referer: 'http://media.net/prebidtest',
stack: ['http://media.net/prebidtest'],
reachedTop: true
}
},
VALID_PAYLOAD_INVALID_BIDFLOOR = {
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
},
'ext': {
'customer_id': 'customer_id',
'prebid_version': $$PREBID_GLOBAL$$.version,
'gdpr_applies': false,
'usp_applies': false,
'coppa_applies': false,
'screen': {
'w': 1000,
'h': 1000
}
},
'id': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'imp': [{
'id': '28f8f8130a583e',
'ext': {
'dfp_id': 'div-gpt-ad-1460505748561-0',
'visibility': 1,
'viewability': 1,
'coordinates': {
'top_left': {
x: 50,
y: 50
},
'bottom_right': {
x: 100,
y: 100
}
},
'display_count': 1
},
'banner': [{
'w': 300,
'h': 250
}],
'all': {
'cid': 'customer_id',
'bidfloor': 'abcdef',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
}
}, {
'id': '3f97ca71b1e5c2',
'ext': {
'dfp_id': 'div-gpt-ad-1460505748561-123',
'visibility': 1,
'viewability': 1,
'coordinates': {
'top_left': {
x: 50,
y: 50
},
'bottom_right': {
x: 100,
y: 100
}
},
'display_count': 1
},
'banner': [{
'w': 300,
'h': 251
}],
'all': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
}
}],
'tmax': config.getConfig('bidderTimeout')
},
VALID_PAYLOAD_NATIVE = {
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
},
'ext': {
'customer_id': 'customer_id',
'prebid_version': $$PREBID_GLOBAL$$.version,
'gdpr_applies': false,
'usp_applies': false,
'coppa_applies': false,
'screen': {
'w': 1000,
'h': 1000
}
},
'id': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'imp': [{
'id': '28f8f8130a583e',
'ext': {
'dfp_id': 'div-gpt-ad-1460505748561-0',
'visibility': 1,
'viewability': 1,
'coordinates': {
'top_left': {
x: 50,
y: 50
},
'bottom_right': {
x: 100,
y: 100
}
},
'display_count': 1
},
'banner': [{
'w': 300,
'h': 250
}],
'native': '{\"image\":{\"required\":true,\"sizes\":[150,50],\"wmin\":50},\"title\":{\"required\":true,\"len\":80},\"sponsoredBy\":{\"required\":true},\"clickUrl\":{\"required\":true},\"body\":{\"required\":true},\"icon\":{\"required\":true,\"sizes\":[50,50]}}',
'all': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
}
}, {
'id': '3f97ca71b1e5c2',
'ext': {
'dfp_id': 'div-gpt-ad-1460505748561-123',
'visibility': 1,
'viewability': 1,
'coordinates': {
'top_left': {
x: 50,
y: 50
},
'bottom_right': {
x: 100,
y: 100
}
},
'display_count': 1
},
'banner': [{
'w': 300,
'h': 251
}],
'native': '{\"image\":{\"required\":true,\"sizes\":[150,50],\"wmin\":50},\"title\":{\"required\":true,\"len\":80},\"sponsoredBy\":{\"required\":true},\"clickUrl\":{\"required\":true},\"body\":{\"required\":true},\"icon\":{\"required\":true,\"sizes\":[50,50]}}',
'all': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
}
}],
'tmax': config.getConfig('bidderTimeout')
},
VALID_PAYLOAD = {
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
},
'ext': {
'customer_id': 'customer_id',
'prebid_version': $$PREBID_GLOBAL$$.version,
'gdpr_applies': false,
'usp_applies': false,
'coppa_applies': false,
'screen': {
'w': 1000,
'h': 1000
}
},
'id': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'imp': [{
'id': '28f8f8130a583e',
'ext': {
'dfp_id': 'div-gpt-ad-1460505748561-0',
'visibility': 1,
'viewability': 1,
'coordinates': {
'top_left': {
x: 50,
y: 50
},
'bottom_right': {
x: 100,
y: 100
}
},
'display_count': 1
},
'banner': [{
'w': 300,
'h': 250
}],
'all': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
}
}, {
'id': '3f97ca71b1e5c2',
'ext': {
'dfp_id': 'div-gpt-ad-1460505748561-123',
'visibility': 1,
'viewability': 1,
'coordinates': {
'top_left': {
x: 50,
y: 50
},
'bottom_right': {
x: 100,
y: 100
}
},
'display_count': 1
},
'banner': [{
'w': 300,
'h': 251
}],
'all': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
}
}],
'tmax': config.getConfig('bidderTimeout')
},
VALID_PAYLOAD_WITH_USERID = {
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
},
'ext': {
'customer_id': 'customer_id',
'prebid_version': $$PREBID_GLOBAL$$.version,
'gdpr_applies': false,
'user_id': {
britepoolid: '82efd5e1-816b-4f87-97f8-044f407e2911'
},
'usp_applies': false,
'coppa_applies': false,
'screen': {
'w': 1000,
'h': 1000
}
},
'id': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'imp': [{
'id': '28f8f8130a583e',
'tagid': 'crid',
'ext': {
'dfp_id': 'div-gpt-ad-1460505748561-0',
'visibility': 1,
'viewability': 1,
'coordinates': {
'top_left': {
x: 50,
y: 50
},
'bottom_right': {
x: 100,
y: 100
}
},
'display_count': 1
},
'banner': [{
'w': 300,
'h': 250
}],
'all': {
'cid': 'customer_id',
'crid': 'crid',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
}
}, {
'id': '3f97ca71b1e5c2',
'tagid': 'crid',
'ext': {
'dfp_id': 'div-gpt-ad-1460505748561-123',
'visibility': 1,
'viewability': 1,
'coordinates': {
'top_left': {
x: 50,
y: 50
},
'bottom_right': {
x: 100,
y: 100
}
},
'display_count': 1
},
'banner': [{
'w': 300,
'h': 251
}],
'all': {
'cid': 'customer_id',
'crid': 'crid',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
}
}],
'tmax': config.getConfig('bidderTimeout')
},
VALID_PAYLOAD_WITH_CRID = {
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
},
'ext': {
'customer_id': 'customer_id',
'prebid_version': $$PREBID_GLOBAL$$.version,
'gdpr_applies': false,
'usp_applies': false,
'coppa_applies': true,
'screen': {
'w': 1000,
'h': 1000
}
},
'id': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'imp': [{
'id': '28f8f8130a583e',
'tagid': 'crid',
'ext': {
'dfp_id': 'div-gpt-ad-1460505748561-0',
'visibility': 1,
'viewability': 1,
'coordinates': {
'top_left': {
x: 50,
y: 50
},
'bottom_right': {
x: 100,
y: 100
}
},
'display_count': 1
},
'banner': [{
'w': 300,
'h': 250
}],
'all': {
'cid': 'customer_id',
'crid': 'crid',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
}
}, {
'id': '3f97ca71b1e5c2',
'tagid': 'crid',
'ext': {
'dfp_id': 'div-gpt-ad-1460505748561-123',
'visibility': 1,
'viewability': 1,
'coordinates': {
'top_left': {
x: 50,
y: 50
},
'bottom_right': {
x: 100,
y: 100
}
},
'display_count': 1
},
'banner': [{
'w': 300,
'h': 251
}],
'all': {
'cid': 'customer_id',
'crid': 'crid',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
}
}],
'tmax': config.getConfig('bidderTimeout')
},
VALID_VIDEO_BID_REQUEST = [{
'bidder': 'medianet',
'params': {
'cid': 'customer_id',
'video': {
'skipppable': true
}
},
'adUnitCode': 'div-gpt-ad-1460505748561-0',
'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1',
'mediaTypes': {
'video': {
'context': 'instream',
}
},
'bidId': '28f8f8130a583e',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1
}],
VALID_PAYLOAD_PAGE_META = (() => {
let PAGE_META;
try {
PAGE_META = JSON.parse(JSON.stringify(VALID_PAYLOAD));
} catch (e) {}
PAGE_META.site = Object.assign(PAGE_META.site, {
'canonical_url': 'http://localhost:9999/canonical-test',
'twitter_url': 'http://localhost:9999/twitter-test',
'og_url': 'http://localhost:9999/fb-test'
});
return PAGE_META;
})(),
VALID_PARAMS = {
bidder: 'medianet',
params: {
cid: '8CUV090'
}
},
PARAMS_MISSING = {
bidder: 'medianet',
},
PARAMS_WITHOUT_CID = {
bidder: 'medianet',
params: {}
},
PARAMS_WITH_INTEGER_CID = {
bidder: 'medianet',
params: {
cid: 8867587
}
},
PARAMS_WITH_EMPTY_CID = {
bidder: 'medianet',
params: {
cid: ''
}
},
SYNC_OPTIONS_BOTH_ENABLED = {
iframeEnabled: true,
pixelEnabled: true,
},
SYNC_OPTIONS_PIXEL_ENABLED = {
iframeEnabled: false,
pixelEnabled: true,
},
SYNC_OPTIONS_IFRAME_ENABLED = {
iframeEnabled: true,
pixelEnabled: false,
},
SERVER_CSYNC_RESPONSE = [{
body: {
ext: {
csUrl: [{
type: 'iframe',
url: 'iframe-url'
}, {
type: 'image',
url: 'pixel-url'
}]
}
}
}],
ENABLED_SYNC_IFRAME = [{
type: 'iframe',
url: 'iframe-url'
}],
ENABLED_SYNC_PIXEL = [{
type: 'image',
url: 'pixel-url'
}],
SERVER_RESPONSE_CPM_MISSING = {
body: {
'id': 'd90ca32f-3877-424a-b2f2-6a68988df57a',
'bidList': [{
'no_bid': false,
'requestId': '27210feac00e96',
'ad': 'ad',
'width': 300,
'height': 250,
'creativeId': '375068987',
'netRevenue': true
}],
'ext': {
'csUrl': [{
'type': 'image',
'url': 'http://cs.media.net/cksync.php'
}, {
'type': 'iframe',
'url': 'http://contextual.media.net/checksync.php?&vsSync=1'
}]
}
}
},
SERVER_RESPONSE_CPM_ZERO = {
body: {
'id': 'd90ca32f-3877-424a-b2f2-6a68988df57a',
'bidList': [{
'no_bid': false,
'requestId': '27210feac00e96',
'ad': 'ad',
'width': 300,
'height': 250,
'creativeId': '375068987',
'netRevenue': true,
'cpm': 0.0
}],
'ext': {
'csUrl': [{
'type': 'image',
'url': 'http://cs.media.net/cksync.php'
}, {
'type': 'iframe',
'url': 'http://contextual.media.net/checksync.php?&vsSync=1'
}]
}
}
},
SERVER_RESPONSE_NOBID = {
body: {
'id': 'd90ca32f-3877-424a-b2f2-6a68988df57a',
'bidList': [{
'no_bid': true,
'requestId': '3a62cf7a853f84',
'width': 0,
'height': 0,
'ttl': 0,
'netRevenue': false
}],
'ext': {
'csUrl': [{
'type': 'image',
'url': 'http://cs.media.net/cksync.php'
}, {
'type': 'iframe',
'url': 'http://contextual.media.net/checksync.php?&vsSync=1'
}]
}
}
},
SERVER_RESPONSE_NOBODY = {
},
SERVER_RESPONSE_EMPTY_BIDLIST = {
body: {
'id': 'd90ca32f-3877-424a-b2f2-6a68988df57a',
'bidList': 'bid',
'ext': {
'csUrl': [{
'type': 'image',
'url': 'http://cs.media.net/cksync.php'
}, {
'type': 'iframe',
'url': 'http://contextual.media.net/checksync.php?&vsSync=1'
}]
}
}
},
SERVER_RESPONSE_VALID_BID = {
body: {
'id': 'd90ca32f-3877-424a-b2f2-6a68988df57a',
'bidList': [{
'no_bid': false,
'requestId': '27210feac00e96',
'ad': 'ad',
'width': 300,
'height': 250,
'creativeId': '375068987',
'netRevenue': true,
'cpm': 0.1
}],
'ext': {
'csUrl': [{
'type': 'image',
'url': 'http://cs.media.net/cksync.php'
}, {
'type': 'iframe',
'url': 'http://contextual.media.net/checksync.php?&vsSync=1'
}]
}
}
},
SERVER_VIDEO_OUTSTREAM_RESPONSE_VALID_BID = {
body: {
'id': 'd90ca32f-3877-424a-b2f2-6a68988df57a',
'bidList': [{
'no_bid': false,
'requestId': '27210feac00e96',
'cpm': 12.00,
'width': 640,
'height': 480,
'ttl': 180,
'creativeId': '370637746',
'netRevenue': true,
'vastXml': '',
'currency': 'USD',
'dfp_id': 'video1',
'mediaType': 'video',
'vto': 5000,
'mavtr': 10,
'avp': true,
'ap': true,
'pl': true,
'mt': true,
'jslt': 3000,
'context': 'outstream'
}],
'ext': {
'csUrl': [{
'type': 'image',
'url': 'http://cs.media.net/cksync.php'
}, {
'type': 'iframe',
'url': 'http://contextual.media.net/checksync.php?&vsSync=1'
}]
}
}
},
SERVER_VALID_BIDS = [{
'no_bid': false,
'requestId': '27210feac00e96',
'ad': 'ad',
'width': 300,
'height': 250,
'creativeId': '375068987',
'netRevenue': true,
'cpm': 0.1
}],
BID_REQUEST_SIZE_AS_1DARRAY = [{
'bidder': 'medianet',
'params': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
},
'adUnitCode': 'div-gpt-ad-1460505748561-0',
'transactionId': '277b631f-92f5-4844-8b19-ea13c095d3f1',
'sizes': [300, 250],
'mediaTypes': {
'banner': {
'sizes': [[300, 250]],
}
},
'bidId': '28f8f8130a583e',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1
}, {
'bidder': 'medianet',
'params': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
},
'adUnitCode': 'div-gpt-ad-1460505748561-123',
'transactionId': 'c52a5c62-3c2b-4b90-9ff8-ec1487754822',
'sizes': [300, 251],
'mediaTypes': {
'banner': {
'sizes': [[300, 251]],
}
},
'bidId': '3f97ca71b1e5c2',
'bidderRequestId': '1e9b1f07797c1c',
'auctionId': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'bidRequestsCount': 1
}],
VALID_BIDDER_REQUEST_WITH_GDPR = {
'gdprConsent': {
'consentString': 'consentString',
'gdprApplies': true,
},
'uspConsent': '1NYN',
'timeout': 3000,
refererInfo: {
referer: 'http://media.net/prebidtest',
stack: ['http://media.net/prebidtest'],
reachedTop: true
}
},
VALID_PAYLOAD_FOR_GDPR = {
'site': {
'domain': 'media.net',
'page': 'http://media.net/prebidtest',
'ref': 'http://media.net/prebidtest',
'isTop': true
},
'ext': {
'customer_id': 'customer_id',
'prebid_version': $$PREBID_GLOBAL$$.version,
'gdpr_consent_string': 'consentString',
'gdpr_applies': true,
'usp_applies': true,
'coppa_applies': false,
'usp_consent_string': '1NYN',
'screen': {
'w': 1000,
'h': 1000
}
},
'id': 'aafabfd0-28c0-4ac0-aa09-99689e88b81d',
'imp': [{
'id': '28f8f8130a583e',
'ext': {
'dfp_id': 'div-gpt-ad-1460505748561-0',
'visibility': 1,
'viewability': 1,
'coordinates': {
'top_left': {
x: 50,
y: 50
},
'bottom_right': {
x: 100,
y: 100
}
},
'display_count': 1
},
'banner': [{
'w': 300,
'h': 250
}],
'all': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
}
}, {
'id': '3f97ca71b1e5c2',
'ext': {
'dfp_id': 'div-gpt-ad-1460505748561-123',
'visibility': 1,
'viewability': 1,
'coordinates': {
'top_left': {
x: 50,
y: 50
},
'bottom_right': {
x: 100,
y: 100
}
},
'display_count': 1
},
'banner': [{
'w': 300,
'h': 251
}],
'all': {
'cid': 'customer_id',
'site': {
'page': 'http://media.net/prebidtest',
'domain': 'media.net',
'ref': 'http://media.net/prebidtest',
'isTop': true
}
}
}],
'tmax': 3000,
};
describe('Media.net bid adapter', function () {
let sandbox;
beforeEach(function () {
sandbox = sinon.sandbox.create();
});
afterEach(function () {
sandbox.restore();
});
describe('isBidRequestValid', function () {
it('should accept valid bid params', function () {
let isValid = spec.isBidRequestValid(VALID_PARAMS);
expect(isValid).to.equal(true);
});
it('should reject bid if cid is not present', function () {
let isValid = spec.isBidRequestValid(PARAMS_WITHOUT_CID);
expect(isValid).to.equal(false);
});
it('should reject bid if cid is not a string', function () {
let isValid = spec.isBidRequestValid(PARAMS_WITH_INTEGER_CID);
expect(isValid).to.equal(false);
});
it('should reject bid if cid is a empty string', function () {
let isValid = spec.isBidRequestValid(PARAMS_WITH_EMPTY_CID);
expect(isValid).to.equal(false);
});
it('should have missing params', function () {
let isValid = spec.isBidRequestValid(PARAMS_MISSING);
expect(isValid).to.equal(false);
});
});
describe('buildRequests', function () {
beforeEach(function () {
$$PREBID_GLOBAL$$.medianetGlobals = {};
let documentStub = sandbox.stub(document, 'getElementById');
let boundingRect = {
top: 50,
left: 50,
bottom: 100,
right: 100
};
documentStub.withArgs('div-gpt-ad-1460505748561-123').returns({
getBoundingClientRect: () => boundingRect
});
documentStub.withArgs('div-gpt-ad-1460505748561-0').returns({
getBoundingClientRect: () => boundingRect
});
let windowSizeStub = sandbox.stub(spec, 'getWindowSize');
windowSizeStub.returns({
w: 1000,
h: 1000
});
});
it('should build valid payload on bid', function () {
let requestObj = spec.buildRequests(VALID_BID_REQUEST, VALID_AUCTIONDATA);
expect(JSON.parse(requestObj.data)).to.deep.equal(VALID_PAYLOAD);
});
it('should accept size as a one dimensional array', function () {
let bidReq = spec.buildRequests(BID_REQUEST_SIZE_AS_1DARRAY, VALID_AUCTIONDATA);
expect(JSON.parse(bidReq.data)).to.deep.equal(VALID_PAYLOAD);
});
it('should ignore bidfloor if not a valid number', function () {
let bidReq = spec.buildRequests(VALID_BID_REQUEST_INVALID_BIDFLOOR, VALID_AUCTIONDATA);
expect(JSON.parse(bidReq.data)).to.deep.equal(VALID_PAYLOAD_INVALID_BIDFLOOR);
});
it('should add gdpr to response ext', function () {
let bidReq = spec.buildRequests(VALID_BID_REQUEST, VALID_BIDDER_REQUEST_WITH_GDPR);
expect(JSON.parse(bidReq.data)).to.deep.equal(VALID_PAYLOAD_FOR_GDPR);
});
it('should parse params for native request', function () {
let bidReq = spec.buildRequests(VALID_NATIVE_BID_REQUEST, VALID_AUCTIONDATA);
expect(JSON.parse(bidReq.data)).to.deep.equal(VALID_PAYLOAD_NATIVE);
});
it('should parse params for video request', function () {
let bidReq = spec.buildRequests(VALID_VIDEO_BID_REQUEST, VALID_AUCTIONDATA);
expect(JSON.stringify(bidReq.data)).to.include('instream');
});
it('should have valid crid present in bid request', function() {
sandbox.stub(config, 'getConfig').callsFake((key) => {
const config = {
'coppa': true
};
return config[key];
});
let bidreq = spec.buildRequests(VALID_BID_REQUEST_WITH_CRID, VALID_AUCTIONDATA);
expect(JSON.parse(bidreq.data)).to.deep.equal(VALID_PAYLOAD_WITH_CRID);
});
it('should have userid in bid request', function () {
let bidReq = spec.buildRequests(VALID_BID_REQUEST_WITH_USERID, VALID_AUCTIONDATA);
expect(JSON.parse(bidReq.data)).to.deep.equal(VALID_PAYLOAD_WITH_USERID);
});
describe('build requests: when page meta-data is available', () => {
beforeEach(() => {
spec.clearMnData();
});
it('should pass canonical, twitter and fb paramters if available', () => {
let documentStub = sandbox.stub(window.top.document, 'querySelector');
documentStub.withArgs('link[rel="canonical"]').returns({
href: 'http://localhost:9999/canonical-test'
});
documentStub.withArgs('meta[property="og:url"]').returns({
content: 'http://localhost:9999/fb-test'
});
documentStub.withArgs('meta[name="twitter:url"]').returns({
content: 'http://localhost:9999/twitter-test'
});
let bidReq = spec.buildRequests(VALID_BID_REQUEST, VALID_AUCTIONDATA);
expect(JSON.parse(bidReq.data)).to.deep.equal(VALID_PAYLOAD_PAGE_META);
});
});
});
describe('slot visibility', function () {
let documentStub;
beforeEach(function () {
let windowSizeStub = sandbox.stub(spec, 'getWindowSize');
windowSizeStub.returns({
w: 1000,
h: 1000
});
documentStub = sandbox.stub(document, 'getElementById');
});
it('slot visibility should be 2 and ratio 0 when ad unit is BTF', function () {
let boundingRect = {
top: 1010,
left: 1010,
bottom: 1050,
right: 1050
};
documentStub.withArgs('div-gpt-ad-1460505748561-123').returns({
getBoundingClientRect: () => boundingRect
});
documentStub.withArgs('div-gpt-ad-1460505748561-0').returns({
getBoundingClientRect: () => boundingRect
});
let bidReq = spec.buildRequests(VALID_BID_REQUEST, VALID_AUCTIONDATA);
let data = JSON.parse(bidReq.data);
expect(data.imp[0].ext.visibility).to.equal(2);
expect(data.imp[0].ext.viewability).to.equal(0);
});
it('slot visibility should be 2 and ratio < 0.5 when ad unit is partially inside viewport', function () {
let boundingRect = {
top: 990,
left: 990,
bottom: 1050,
right: 1050
};
documentStub.withArgs('div-gpt-ad-1460505748561-123').returns({
getBoundingClientRect: () => boundingRect
});
documentStub.withArgs('div-gpt-ad-1460505748561-0').returns({
getBoundingClientRect: () => boundingRect
});
let bidReq = spec.buildRequests(VALID_BID_REQUEST, VALID_AUCTIONDATA);
let data = JSON.parse(bidReq.data);
expect(data.imp[0].ext.visibility).to.equal(2);
expect(data.imp[0].ext.viewability).to.equal(100 / 75000);
});
it('slot visibility should be 1 and ratio > 0.5 when ad unit mostly in viewport', function () {
let boundingRect = {
top: 800,
left: 800,
bottom: 1050,
right: 1050
};
documentStub.withArgs('div-gpt-ad-1460505748561-123').returns({
getBoundingClientRect: () => boundingRect
});
documentStub.withArgs('div-gpt-ad-1460505748561-0').returns({
getBoundingClientRect: () => boundingRect
});
let bidReq = spec.buildRequests(VALID_BID_REQUEST, VALID_AUCTIONDATA);
let data = JSON.parse(bidReq.data);
expect(data.imp[0].ext.visibility).to.equal(1);
expect(data.imp[0].ext.viewability).to.equal(40000 / 75000);
});
it('co-ordinates should not be sent and slot visibility should be 0 when ad unit is not present', function () {
let bidReq = spec.buildRequests(VALID_BID_REQUEST, VALID_AUCTIONDATA);
let data = JSON.parse(bidReq.data);
expect(data.imp[1].ext).to.not.have.ownPropertyDescriptor('viewability');
expect(data.imp[1].ext.visibility).to.equal(0);
});
it('slot visibility should be calculable even in case of adUnitPath', function () {
const code = '/19968336/header-bid-tag-0';
const divId = 'div-gpt-ad-1460505748561-0';
window.googletag.pubads().setSlots([makeSlot({ code, divId })]);
let boundingRect = {
top: 1010,
left: 1010,
bottom: 1050,
right: 1050
};
documentStub.withArgs(divId).returns({
getBoundingClientRect: () => boundingRect
});
documentStub.withArgs('div-gpt-ad-1460505748561-123').returns({
getBoundingClientRect: () => boundingRect
});
const bidRequest = [{...VALID_BID_REQUEST[0], adUnitCode: code}]
const bidReq = spec.buildRequests(bidRequest, VALID_AUCTIONDATA);
const data = JSON.parse(bidReq.data);
expect(data.imp[0].ext.visibility).to.equal(2);
expect(data.imp[0].ext.viewability).to.equal(0);
});
});
describe('getUserSyncs', function () {
it('should exclude iframe syncs if iframe is disabled', function () {
let userSyncs = spec.getUserSyncs(SYNC_OPTIONS_PIXEL_ENABLED, SERVER_CSYNC_RESPONSE);
expect(userSyncs).to.deep.equal(ENABLED_SYNC_PIXEL);
});
it('should exclude pixel syncs if pixel is disabled', function () {
let userSyncs = spec.getUserSyncs(SYNC_OPTIONS_IFRAME_ENABLED, SERVER_CSYNC_RESPONSE);
expect(userSyncs).to.deep.equal(ENABLED_SYNC_IFRAME);
});
it('should choose iframe sync urls if both sync options are enabled', function () {
let userSyncs = spec.getUserSyncs(SYNC_OPTIONS_BOTH_ENABLED, SERVER_CSYNC_RESPONSE);
expect(userSyncs).to.deep.equal(ENABLED_SYNC_IFRAME);
});
it('should have empty user sync array', function() {
let userSyncs = spec.getUserSyncs(SYNC_OPTIONS_IFRAME_ENABLED, {});
expect(userSyncs).to.deep.equal([]);
});
});
describe('interpretResponse', function () {
it('should not push bid response if cpm missing', function () {
let validBids = [];
let bids = spec.interpretResponse(SERVER_RESPONSE_CPM_MISSING, []);
expect(bids).to.deep.equal(validBids);
});
it('should not push bid response if cpm 0', function () {
let validBids = [];
let bids = spec.interpretResponse(SERVER_RESPONSE_CPM_ZERO, []);
expect(bids).to.deep.equal(validBids);
});
it('should not push response if no-bid', function () {
let validBids = [];
let bids = spec.interpretResponse(SERVER_RESPONSE_NOBID, []);
expect(bids).to.deep.equal(validBids);
});
it('should have empty bid response', function() {
let bids = spec.interpretResponse(SERVER_RESPONSE_NOBODY, []);
expect(bids).to.deep.equal([]);
});
it('should have valid bids', function () {
let bids = spec.interpretResponse(SERVER_RESPONSE_VALID_BID, []);
expect(bids).to.deep.equal(SERVER_VALID_BIDS);
});
it('should have empty bid list', function() {
let validBids = [];
let bids = spec.interpretResponse(SERVER_RESPONSE_EMPTY_BIDLIST, []);
expect(bids).to.deep.equal(validBids);
});
});
describe('onTimeout', function () {
it('should have valid timeout data', function() {
let response = spec.onTimeout({});
expect(response).to.deep.equal(undefined);
});
});
describe('onBidWon', function () {
it('should have valid bid data', function() {
let response = spec.onBidWon(undefined);
expect(response).to.deep.equal(undefined);
});
});
it('context should be outstream', function () {
let bids = spec.interpretResponse(SERVER_VIDEO_OUTSTREAM_RESPONSE_VALID_BID, []);
expect(bids[0].context).to.equal('outstream');
});
describe('buildRequests floor tests', function () {
let floor;
let getFloor = function(req) {
return floor[req.mediaType];
};
beforeEach(function () {
floor = {
'banner': {
'currency': 'USD',
'floor': 1
}
};
$$PREBID_GLOBAL$$.medianetGlobals = {};
let documentStub = sandbox.stub(document, 'getElementById');
let boundingRect = {
top: 50,
left: 50,
bottom: 100,
right: 100
};
documentStub.withArgs('div-gpt-ad-1460505748561-123').returns({
getBoundingClientRect: () => boundingRect
});
documentStub.withArgs('div-gpt-ad-1460505748561-0').returns({
getBoundingClientRect: () => boundingRect
});
let windowSizeStub = sandbox.stub(spec, 'getWindowSize');
windowSizeStub.returns({
w: 1000,
h: 1000
});
VALID_BID_REQUEST[0].getFloor = getFloor;
});
it('should build valid payload with floor', function () {
let requestObj = spec.buildRequests(VALID_BID_REQUEST, VALID_AUCTIONDATA);
requestObj = JSON.parse(requestObj.data);
expect(requestObj.imp[0].hasOwnProperty('bidfloors')).to.equal(true);
});
});
});