diff --git a/modules/gamoshiBidAdapter.js b/modules/gamoshiBidAdapter.js
index 92d7ece4adb..9e119d9d490 100644
--- a/modules/gamoshiBidAdapter.js
+++ b/modules/gamoshiBidAdapter.js
@@ -77,9 +77,9 @@ export const spec = {
},
imp: [],
ext: {},
- user: {
- ext: {}
- }
+ user: {ext: {}},
+ source: {ext: {}},
+ regs: {ext: {}}
};
const gdprConsent = bidderRequest.gdprConsent;
@@ -88,17 +88,19 @@ export const spec = {
consent_string: gdprConsent.consentString,
consent_required: gdprConsent.gdprApplies
};
- rtbBidRequest.regs = {
- ext: {
- gdpr: gdprConsent.gdprApplies === true ? 1 : 0
- }
- };
- rtbBidRequest.user = {
- ext: {
- consent: gdprConsent.consentString
- }
- }
+
+ utils.deepSetValue(rtbBidRequest, 'regs.ext.gdpr', gdprConsent.gdprApplies === true ? 1 : 0);
+ utils.deepSetValue(rtbBidRequest, 'user.ext.consent', gdprConsent.consentString);
}
+
+ if (validBidRequests[0].schain) {
+ utils.deepSetValue(rtbBidRequest, 'source.ext.schain', validBidRequests[0].schain);
+ }
+
+ if (bidderRequest && bidderRequest.uspConsent) {
+ utils.deepSetValue(rtbBidRequest, 'regs.ext.us_privacy', bidderRequest.uspConsent);
+ }
+
const imp = {
id: transactionId,
instl: params.instl === 1 ? 1 : 0,
@@ -166,7 +168,12 @@ export const spec = {
return;
}
- return {method: 'POST', url: rtbEndpoint, data: rtbBidRequest, bidRequest};
+ return {
+ method: 'POST',
+ url: rtbEndpoint,
+ data: rtbBidRequest,
+ bidRequest
+ };
});
},
@@ -209,28 +216,52 @@ export const spec = {
return outBids;
},
- getUserSyncs: function (syncOptions, serverResponses, gdprConsent) {
+ getUserSyncs: function (syncOptions, serverResponses, gdprConsent, uspConsent) {
const syncs = [];
- const gdprApplies = gdprConsent && (typeof gdprConsent.gdprApplies === 'boolean') ? gdprConsent.gdprApplies : false;
- const suffix = gdprApplies ? 'gc=' + encodeURIComponent(gdprConsent.consentString) : 'gc=missing';
+ let gdprApplies = false;
+ let consentString = '';
+ let uspConsentString = '';
+
+ if (gdprConsent && (typeof gdprConsent.gdprApplies === 'boolean')) {
+ gdprApplies = gdprConsent.gdprApplies;
+ }
+ let gdpr = gdprApplies ? 1 : 0;
+
+ if (gdprApplies && gdprConsent.consentString) {
+ consentString = encodeURIComponent(gdprConsent.consentString)
+ }
+
+ if (uspConsent) {
+ uspConsentString = encodeURIComponent(uspConsent);
+ }
+
+ const macroValues = {
+ gdpr: gdpr,
+ consent: consentString,
+ uspConsent: uspConsentString
+ };
+
serverResponses.forEach(resp => {
if (resp.body) {
const bidResponse = resp.body;
if (bidResponse.ext && Array.isArray(bidResponse.ext['utrk'])) {
- bidResponse.ext['utrk'].forEach(pixel => {
- const url = pixel.url + (pixel.url.indexOf('?') > 0 ? '&' + suffix : '?' + suffix);
- return syncs.push({type: pixel.type, url});
- });
+ bidResponse.ext['utrk']
+ .forEach(pixel => {
+ const url = replaceMacros(pixel.url, macroValues);
+ syncs.push({type: pixel.type, url});
+ });
}
+
if (Array.isArray(bidResponse.seatbid)) {
bidResponse.seatbid.forEach(seatBid => {
if (Array.isArray(seatBid.bid)) {
seatBid.bid.forEach(bid => {
if (bid.ext && Array.isArray(bid.ext['utrk'])) {
- bid.ext['utrk'].forEach(pixel => {
- const url = pixel.url + (pixel.url.indexOf('?') > 0 ? '&' + suffix : '?' + suffix);
- return syncs.push({type: pixel.type, url});
- });
+ bid.ext['utrk']
+ .forEach(pixel => {
+ const url = replaceMacros(pixel.url, macroValues);
+ syncs.push({type: pixel.type, url});
+ });
}
});
}
@@ -238,6 +269,7 @@ export const spec = {
}
}
});
+
return syncs;
}
};
@@ -290,4 +322,11 @@ function addExternalUserId(eids, value, source, rtiPartner) {
}
}
+function replaceMacros(url, macros) {
+ return url
+ .replace('[GDPR]', macros.gdpr)
+ .replace('[CONSENT]', macros.consent)
+ .replace('[US_PRIVACY]', macros.uspConsent);
+}
+
registerBidder(spec);
diff --git a/test/spec/modules/gamoshiBidAdapter_spec.js b/test/spec/modules/gamoshiBidAdapter_spec.js
index a0e569a905f..003d6887ff8 100644
--- a/test/spec/modules/gamoshiBidAdapter_spec.js
+++ b/test/spec/modules/gamoshiBidAdapter_spec.js
@@ -5,35 +5,227 @@ import {newBidder} from '../../../src/adapters/bidderFactory';
const supplyPartnerId = '123';
const adapter = newBidder(spec);
-describe('GamoshiAdapter', function () {
- describe('Get top Frame', function () {
- it('check if you are in the top frame', function () {
+const TTL = 360;
+
+describe('GamoshiAdapter', () => {
+ let schainConfig,
+ bidRequest,
+ bannerBidRequest,
+ videoBidRequest,
+ rtbResponse,
+ videoResponse,
+ gdprConsent;
+
+ beforeEach(() => {
+ schainConfig = {
+ 'ver': '1.0',
+ 'complete': 1,
+ 'nodes': [
+ {
+ 'asi': 'indirectseller.com',
+ 'sid': '00001',
+ 'hp': 1
+ },
+
+ {
+ 'asi': 'indirectseller-2.com',
+ 'sid': '00002',
+ 'hp': 2
+ }
+ ]
+ };
+
+ bidRequest = {
+ 'adUnitCode': 'adunit-code',
+ 'auctionId': '1d1a030790a475',
+ 'mediaTypes': {
+ banner: {}
+ },
+ 'params': {
+ 'supplyPartnerId': supplyPartnerId
+ },
+ 'sizes': [[300, 250], [300, 600]],
+ 'transactionId': 'a123456789',
+ refererInfo: {referer: 'http://examplereferer.com'},
+ gdprConsent: {
+ consentString: 'some string',
+ gdprApplies: true
+ },
+ schain: schainConfig,
+ uspConsent: 'gamoshiCCPA'
+ };
+
+ bannerBidRequest = {
+ 'adUnitCode': 'adunit-code',
+ 'auctionId': '1d1a030790a475',
+ 'mediaTypes': {
+ banner: {}
+ },
+ 'params': {
+ 'supplyPartnerId': supplyPartnerId
+ },
+ 'sizes': [[300, 250], [300, 600]],
+ 'transactionId': 'a123456789',
+ 'bidId': '111',
+ refererInfo: {referer: 'http://examplereferer.com'}
+ };
+
+ videoBidRequest = {
+ 'adUnitCode': 'adunit-code',
+ 'auctionId': '1d1a030790a475',
+ 'mediaTypes': {
+ video: {}
+ },
+ 'params': {
+ 'supplyPartnerId': supplyPartnerId
+ },
+ 'sizes': [[300, 250], [300, 600]],
+ 'transactionId': 'a123456789',
+ 'bidId': '111',
+ refererInfo: {referer: 'http://examplereferer.com'}
+ };
+
+ rtbResponse = {
+ 'id': 'imp_5b05b9fde4b09084267a556f',
+ 'bidid': 'imp_5b05b9fde4b09084267a556f',
+ 'cur': 'USD',
+ 'ext': {
+ 'utrk': [
+ {'type': 'iframe', 'url': '//rtb.gamoshi.io/user/sync/1?gdpr=[GDPR]&consent=[CONSENT]&usp=[US_PRIVACY]'},
+ {'type': 'image', 'url': '//rtb.gamoshi.io/user/sync/2'}
+ ]
+ },
+ 'seatbid': [
+ {
+ 'seat': 'seat1',
+ 'group': 0,
+ 'bid': [
+ {
+ 'id': '0',
+ 'impid': '1',
+ 'price': 2.016,
+ 'adid': '579ef31bfa788b9d2000d562',
+ 'nurl': 'https://rtb.gamoshi.io/pix/monitoring/win_notice/imp_5b05b9fde4b09084267a556f/im.gif?r=imp_5b05b9fde4b09084267a556f&i=1&a=579ef31bfa788b9d2000d562&b=0',
+ 'adm': '↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵',
+ 'adomain': ['aaa.com'],
+ 'cid': '579ef268fa788b9d2000d55c',
+ 'crid': '579ef31bfa788b9d2000d562',
+ 'attr': [],
+ 'h': 600,
+ 'w': 120,
+ 'ext': {
+ 'vast_url': 'http://my.vast.com',
+ 'utrk': [
+ {'type': 'iframe', 'url': '//p.partner1.io/user/sync/1'}
+ ]
+ }
+ }
+ ]
+ },
+ {
+ 'seat': 'seat2',
+ 'group': 0,
+ 'bid': [
+ {
+ 'id': '1',
+ 'impid': '1',
+ 'price': 3,
+ 'adid': '542jlhdfd2112jnjf3x',
+ 'nurl': 'https://rtb.gamoshi.io/pix/monitoring/win_notice/imp_5b05b9fde4b09084267a556f/im.gif?r=imp_5b05b9fde4b09084267a556f&i=1&a=579ef31bfa788b9d2000d562&b=0',
+ 'adm': ' ',
+ 'adomain': ['bbb.com'],
+ 'cid': 'fgdlwjh2498ydjhg1',
+ 'crid': 'kjh34297ydh2133d',
+ 'attr': [],
+ 'h': 250,
+ 'w': 300,
+ 'ext': {
+ 'utrk': [
+ {'type': 'image', 'url': '//p.partner2.io/user/sync/1'}
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ };
+
+ videoResponse = {
+ 'id': '64f32497-b2f7-48ec-9205-35fc39894d44',
+ 'bidid': 'imp_5c24924de4b0d106447af333',
+ 'cur': 'USD',
+ 'seatbid': [
+ {
+ 'seat': '3668',
+ 'group': 0,
+ 'bid': [
+ {
+ 'id': 'gb_1',
+ 'impid': 'afbb5852-7cea-4a81-aa9a-a41aab505c23',
+ 'price': 5.0,
+ 'adid': '1274',
+ 'nurl': 'https://rtb.gamoshi.io/pix/1275/win_notice/imp_5c24924de4b0d106447af333/im.gif?r=imp_5c24924de4b0d106447af333&i=afbb5852-7cea-4a81-aa9a-a41aab505c23&a=1274&b=gb_1',
+ 'adomain': [],
+ 'adm': '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n',
+ 'cid': '3668',
+ 'crid': '1274',
+ 'cat': [],
+ 'attr': [],
+ 'h': 250,
+ 'w': 300,
+ 'ext': {
+ 'vast_url': 'https://rtb.gamoshi.io/pix/1275/vast_o/imp_5c24924de4b0d106447af333/im.xml?r=imp_5c24924de4b0d106447af333&i=afbb5852-7cea-4a81-aa9a-a41aab505c23&a=1274&b=gb_1&w=300&h=250&vatu=aHR0cHM6Ly9zdGF0aWMuZ2FtYmlkLmlvL2RlbW8vdmFzdC54bWw&vwarv',
+ 'imptrackers': [
+ 'https://rtb.gamoshi.io/pix/1275/imp/imp_5c24924de4b0d106447af333/im.gif?r=imp_5c24924de4b0d106447af333&i=afbb5852-7cea-4a81-aa9a-a41aab505c23&a=1274&b=gb_1']
+ }
+ }
+ ]
+ }
+ ],
+ 'ext': {
+ 'utrk': [{
+ 'type': 'image',
+ 'url': 'https://rtb.gamoshi.io/pix/1275/scm?cb=1545900621675&gdpr=[GDPR]&consent=[CONSENT]&us_privacy=[US_PRIVACY]'
+ }]
+ }
+ };
+
+ gdprConsent = {
+ gdprApplies: true,
+ consentString: 'consent string'
+ };
+ });
+
+ describe('Get top Frame', () => {
+ it('check if you are in the top frame', () => {
expect(helper.getTopFrame()).to.equal(0);
});
- it('verify domain parsing', function () {
+
+ it('verify domain parsing', () => {
expect(helper.getTopWindowDomain('http://www.domain.com')).to.equal('www.domain.com');
});
});
- describe('Is String start with search ', function () {
- it('check if a string started with', function () {
+
+ describe('Is String start with search', () => {
+ it('check if a string started with', () => {
expect(helper.startsWith('gamoshi.com', 'gamo')).to.equal(true);
});
});
- describe('inherited functions', function () {
- it('exists and is a function', function () {
+ describe('inherited functions', () => {
+ it('exists and is a function', () => {
expect(adapter.callBids).to.exist.and.to.be.a('function');
});
});
- describe('isBidRequestValid', function () {
- it('should validate supply-partner ID', function () {
+ describe('isBidRequestValid', () => {
+ it('should validate supply-partner ID', () => {
expect(spec.isBidRequestValid({params: {}})).to.equal(false);
expect(spec.isBidRequestValid({params: {supplyPartnerId: 123}})).to.equal(false);
expect(spec.isBidRequestValid({params: {supplyPartnerId: '123'}})).to.equal(true);
});
- it('should validate RTB endpoint', function () {
+ it('should validate RTB endpoint', () => {
expect(spec.isBidRequestValid({params: {supplyPartnerId: '123'}})).to.equal(true); // RTB endpoint has a default
expect(spec.isBidRequestValid({params: {supplyPartnerId: '123', rtbEndpoint: 123}})).to.equal(false);
expect(spec.isBidRequestValid({
@@ -44,19 +236,19 @@ describe('GamoshiAdapter', function () {
})).to.equal(true);
});
- it('should validate bid floor', function () {
+ it('should validate bid floor', () => {
expect(spec.isBidRequestValid({params: {supplyPartnerId: '123'}})).to.equal(true); // bidfloor has a default
expect(spec.isBidRequestValid({params: {supplyPartnerId: '123', bidfloor: '123'}})).to.equal(false);
expect(spec.isBidRequestValid({params: {supplyPartnerId: '123', bidfloor: 0.1}})).to.equal(true);
});
- it('should validate adpos', function () {
+ it('should validate adpos', () => {
expect(spec.isBidRequestValid({params: {supplyPartnerId: '123'}})).to.equal(true); // adpos has a default
expect(spec.isBidRequestValid({params: {supplyPartnerId: '123', adpos: '123'}})).to.equal(false);
expect(spec.isBidRequestValid({params: {supplyPartnerId: '123', adpos: 0.1}})).to.equal(true);
});
- it('should validate instl', function () {
+ it('should validate instl', () => {
expect(spec.isBidRequestValid({params: {supplyPartnerId: '123'}})).to.equal(true); // adpos has a default
expect(spec.isBidRequestValid({params: {supplyPartnerId: '123', instl: '123'}})).to.equal(false);
expect(spec.isBidRequestValid({params: {supplyPartnerId: '123', instl: -1}})).to.equal(false);
@@ -66,25 +258,8 @@ describe('GamoshiAdapter', function () {
});
});
- describe('buildRequests', function () {
- const bidRequest = {
- 'adUnitCode': 'adunit-code',
- 'auctionId': '1d1a030790a475',
- 'mediaTypes': {
- banner: {}
- },
- 'params': {
- 'supplyPartnerId': supplyPartnerId
- },
- 'sizes': [[300, 250], [300, 600]],
- 'transactionId': 'a123456789',
- refererInfo: {referer: 'http://examplereferer.com'},
- gdprConsent: {
- consentString: 'some string',
- gdprApplies: true
- }
- };
- it('returns an array', function () {
+ describe('buildRequests', () => {
+ it('returns an array', () => {
let response;
response = spec.buildRequests([]);
expect(Array.isArray(response)).to.equal(true);
@@ -99,7 +274,7 @@ describe('GamoshiAdapter', function () {
expect(response.length).to.equal(2);
});
- it('targets correct endpoint', function () {
+ it('targets correct endpoint', () => {
let response;
response = spec.buildRequests([bidRequest], bidRequest)[0];
expect(response.method).to.equal('POST');
@@ -111,10 +286,11 @@ describe('GamoshiAdapter', function () {
expect(response.url).to.match(new RegExp(`^https://rtb2\\.gamoshi\\.io/a12/r/${supplyPartnerId}/bidr\\?rformat=open_rtb&reqformat=rtb_json&bidder=prebid$`, 'g'));
});
- it('builds request correctly', function () {
+ it('builds request correctly', () => {
let bidRequest2 = utils.deepClone(bidRequest);
bidRequest2.refererInfo.referer = 'http://www.test.com/page.html';
let response = spec.buildRequests([bidRequest], bidRequest2)[0];
+
expect(response.data.site.domain).to.equal('www.test.com');
expect(response.data.site.page).to.equal('http://www.test.com/page.html');
expect(response.data.site.ref).to.equal('http://www.test.com/page.html');
@@ -124,6 +300,9 @@ describe('GamoshiAdapter', function () {
expect(response.data.imp[0].tagid).to.equal(bidRequest.adUnitCode);
expect(response.data.imp[0].bidfloor).to.equal(0);
expect(response.data.imp[0].bidfloorcur).to.equal('USD');
+ expect(response.data.regs.ext.us_privacy).to.equal('gamoshiCCPA');// USP/CCPAs
+ expect(response.data.source.ext.schain).to.deep.equal(bidRequest2.schain);
+
const bidRequestWithInstlEquals1 = utils.deepClone(bidRequest);
bidRequestWithInstlEquals1.params.instl = 1;
response = spec.buildRequests([bidRequestWithInstlEquals1], bidRequest2)[0];
@@ -138,7 +317,7 @@ describe('GamoshiAdapter', function () {
expect(response.data.imp[0].bidfloor).to.equal(bidRequestWithBidfloorEquals1.params.bidfloor);
});
- it('builds request banner object correctly', function () {
+ it('builds request banner object correctly', () => {
let response;
const bidRequestWithBanner = utils.deepClone(bidRequest);
bidRequestWithBanner.mediaTypes = {
@@ -157,7 +336,7 @@ describe('GamoshiAdapter', function () {
expect(response.data.imp[0].banner.pos).to.equal(bidRequestWithPosEquals1.params.pos);
});
- it('builds request video object correctly', function () {
+ it('builds request video object correctly', () => {
let response;
const bidRequestWithVideo = utils.deepClone(bidRequest);
bidRequestWithVideo.mediaTypes = {
@@ -184,15 +363,14 @@ describe('GamoshiAdapter', function () {
expect(response.data.imp[0].video.pos).to.equal(bidRequestWithPosEquals1.params.pos);
});
- it('builds request video object correctly with context', function () {
- let response;
+ it('builds request video object correctly with context', () => {
const bidRequestWithVideo = utils.deepClone(bidRequest);
bidRequestWithVideo.mediaTypes = {
video: {
context: 'instream'
}
};
- response = spec.buildRequests([bidRequestWithVideo], bidRequest)[0];
+ let response = spec.buildRequests([bidRequestWithVideo], bidRequest)[0];
expect(response.data.imp[0].video.ext.context).to.equal('instream');
bidRequestWithVideo.mediaTypes.video.context = 'outstream';
@@ -207,7 +385,7 @@ describe('GamoshiAdapter', function () {
expect(response.data.imp[0].video.ext.context).to.equal(null);
});
- it('builds request video object correctly with multi-dimensions size array', function () {
+ it('builds request video object correctly with multi-dimensions size array', () => {
let response;
const bidRequestWithVideo = utils.deepClone(bidRequest);
bidRequestWithVideo.mediaTypes.video = {
@@ -230,7 +408,7 @@ describe('GamoshiAdapter', function () {
expect(response.data.imp[1].video.ext.context).to.equal(null);
});
- it('builds request with gdpr consent', function () {
+ it('builds request with gdpr consent', () => {
let response = spec.buildRequests([bidRequest], bidRequest)[0];
expect(response.data.ext.gdpr_consent).to.not.equal(null).and.not.equal(undefined);
@@ -242,7 +420,7 @@ describe('GamoshiAdapter', function () {
expect(response.data.user.ext.consent).to.equal('some string');
});
- it('build request with ID5 Id', function () {
+ it('build request with ID5 Id', () => {
const bidRequestClone = utils.deepClone(bidRequest);
bidRequestClone.userId = {};
bidRequestClone.userId.id5id = 'id5-user-id';
@@ -258,7 +436,7 @@ describe('GamoshiAdapter', function () {
}]);
});
- it('build request with unified Id', function () {
+ it('build request with unified Id', () => {
const bidRequestClone = utils.deepClone(bidRequest);
bidRequestClone.userId = {};
bidRequestClone.userId.tdid = 'tdid-user-id';
@@ -276,107 +454,8 @@ describe('GamoshiAdapter', function () {
});
describe('interpretResponse', () => {
- const bannerBidRequest = {
- 'adUnitCode': 'adunit-code',
- 'auctionId': '1d1a030790a475',
- 'mediaTypes': {
- banner: {}
- },
- 'params': {
- 'supplyPartnerId': supplyPartnerId
- },
- 'sizes': [[300, 250], [300, 600]],
- 'transactionId': 'a123456789',
- 'bidId': '111',
- refererInfo: {referer: 'http://examplereferer.com'}
- };
-
- const videoBidRequest = {
- 'adUnitCode': 'adunit-code',
- 'auctionId': '1d1a030790a475',
- 'mediaTypes': {
- video: {}
- },
- 'params': {
- 'supplyPartnerId': supplyPartnerId
- },
- 'sizes': [[300, 250], [300, 600]],
- 'transactionId': 'a123456789',
- 'bidId': '111',
- refererInfo: {referer: 'http://examplereferer.com'}
- };
-
- const rtbResponse = {
- 'id': 'imp_5b05b9fde4b09084267a556f',
- 'bidid': 'imp_5b05b9fde4b09084267a556f',
- 'cur': 'USD',
- 'ext': {
- 'utrk': [
- {'type': 'iframe', 'url': '//rtb.gamoshi.io/user/sync/1'},
- {'type': 'image', 'url': '//rtb.gamoshi.io/user/sync/2'}
- ]
- },
- 'seatbid': [
- {
- 'seat': 'seat1',
- 'group': 0,
- 'bid': [
- {
- 'id': '0',
- 'impid': '1',
- 'price': 2.016,
- 'adid': '579ef31bfa788b9d2000d562',
- 'nurl': 'https://rtb.gamoshi.io/pix/monitoring/win_notice/imp_5b05b9fde4b09084267a556f/im.gif?r=imp_5b05b9fde4b09084267a556f&i=1&a=579ef31bfa788b9d2000d562&b=0',
- 'adm': '↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵↵',
- 'adomain': ['aaa.com'],
- 'cid': '579ef268fa788b9d2000d55c',
- 'crid': '579ef31bfa788b9d2000d562',
- 'attr': [],
- 'h': 600,
- 'w': 120,
- 'ext': {
- 'vast_url': 'http://my.vast.com',
- 'utrk': [
- {'type': 'iframe', 'url': '//p.partner1.io/user/sync/1'}
- ]
- }
- }
- ]
- },
- {
- 'seat': 'seat2',
- 'group': 0,
- 'bid': [
- {
- 'id': '1',
- 'impid': '1',
- 'price': 3,
- 'adid': '542jlhdfd2112jnjf3x',
- 'nurl': 'https://rtb.gamoshi.io/pix/monitoring/win_notice/imp_5b05b9fde4b09084267a556f/im.gif?r=imp_5b05b9fde4b09084267a556f&i=1&a=579ef31bfa788b9d2000d562&b=0',
- 'adm': ' ',
- 'adomain': ['bbb.com'],
- 'cid': 'fgdlwjh2498ydjhg1',
- 'crid': 'kjh34297ydh2133d',
- 'attr': [],
- 'h': 250,
- 'w': 300,
- 'ext': {
- 'utrk': [
- {'type': 'image', 'url': '//p.partner2.io/user/sync/1'}
- ]
- }
- }
- ]
- }
- ]
- };
-
- const TTL = 360;
-
- it('returns an empty array on missing response', function () {
- let response;
-
- response = spec.interpretResponse(undefined, {bidRequest: bannerBidRequest});
+ it('returns an empty array on missing response', () => {
+ let response = spec.interpretResponse(undefined, {bidRequest: bannerBidRequest});
expect(Array.isArray(response)).to.equal(true);
expect(response.length).to.equal(0);
@@ -385,7 +464,7 @@ describe('GamoshiAdapter', function () {
expect(response.length).to.equal(0);
});
- it('aggregates banner bids from all seat bids', function () {
+ it('aggregates banner bids from all seat bids', () => {
const response = spec.interpretResponse({body: rtbResponse}, {bidRequest: bannerBidRequest});
expect(Array.isArray(response)).to.equal(true);
expect(response.length).to.equal(1);
@@ -403,7 +482,7 @@ describe('GamoshiAdapter', function () {
expect(ad0.vastUrl).to.be.an('undefined');
});
- it('aggregates video bids from all seat bids', function () {
+ it('aggregates video bids from all seat bids', () => {
const response = spec.interpretResponse({body: rtbResponse}, {bidRequest: videoBidRequest});
expect(Array.isArray(response)).to.equal(true);
expect(response.length).to.equal(1);
@@ -421,129 +500,62 @@ describe('GamoshiAdapter', function () {
expect(ad0.vastUrl).to.equal(rtbResponse.seatbid[0].bid[0].ext.vast_url);
});
- it('aggregates user-sync pixels', function () {
+ it('aggregates user-sync pixels', () => {
const response = spec.getUserSyncs({}, [{body: rtbResponse}]);
expect(Array.isArray(response)).to.equal(true);
expect(response.length).to.equal(4);
expect(response[0].type).to.equal(rtbResponse.ext.utrk[0].type);
- expect(response[0].url).to.equal(rtbResponse.ext.utrk[0].url + '?gc=missing');
+ expect(response[0].url).to.equal('//rtb.gamoshi.io/user/sync/1?gdpr=0&consent=&usp=');
expect(response[1].type).to.equal(rtbResponse.ext.utrk[1].type);
- expect(response[1].url).to.equal(rtbResponse.ext.utrk[1].url + '?gc=missing');
+ expect(response[1].url).to.equal('//rtb.gamoshi.io/user/sync/2');
expect(response[2].type).to.equal(rtbResponse.seatbid[0].bid[0].ext.utrk[0].type);
- expect(response[2].url).to.equal(rtbResponse.seatbid[0].bid[0].ext.utrk[0].url + '?gc=missing');
+ expect(response[2].url).to.equal('//p.partner1.io/user/sync/1');
expect(response[3].type).to.equal(rtbResponse.seatbid[1].bid[0].ext.utrk[0].type);
- expect(response[3].url).to.equal(rtbResponse.seatbid[1].bid[0].ext.utrk[0].url + '?gc=missing');
+ expect(response[3].url).to.equal('//p.partner2.io/user/sync/1');
});
- it('supports configuring outstream renderers', function () {
- const videoResponse = {
- 'id': '64f32497-b2f7-48ec-9205-35fc39894d44',
- 'bidid': 'imp_5c24924de4b0d106447af333',
- 'cur': 'USD',
- 'seatbid': [
- {
- 'seat': '3668',
- 'group': 0,
- 'bid': [
- {
- 'id': 'gb_1',
- 'impid': 'afbb5852-7cea-4a81-aa9a-a41aab505c23',
- 'price': 5.0,
- 'adid': '1274',
- 'nurl': 'https://rtb.gamoshi.io/pix/1275/win_notice/imp_5c24924de4b0d106447af333/im.gif?r=imp_5c24924de4b0d106447af333&i=afbb5852-7cea-4a81-aa9a-a41aab505c23&a=1274&b=gb_1',
- 'adomain': [],
- 'adm': '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n',
- 'cid': '3668',
- 'crid': '1274',
- 'cat': [],
- 'attr': [],
- 'h': 250,
- 'w': 300,
- 'ext': {
- 'vast_url': 'https://rtb.gamoshi.io/pix/1275/vast_o/imp_5c24924de4b0d106447af333/im.xml?r=imp_5c24924de4b0d106447af333&i=afbb5852-7cea-4a81-aa9a-a41aab505c23&a=1274&b=gb_1&w=300&h=250&vatu=aHR0cHM6Ly9zdGF0aWMuZ2FtYmlkLmlvL2RlbW8vdmFzdC54bWw&vwarv',
- 'imptrackers': [
- 'https://rtb.gamoshi.io/pix/1275/imp/imp_5c24924de4b0d106447af333/im.gif?r=imp_5c24924de4b0d106447af333&i=afbb5852-7cea-4a81-aa9a-a41aab505c23&a=1274&b=gb_1']
- }
- }
- ]
- }
- ],
- 'ext': {
- 'utrk': [{
- 'type': 'image',
- 'url': 'https://rtb.gamoshi.io/pix/1275/scm?cb=1545900621675'
- }]
- }
- };
+ it('supports configuring outstream renderers', () => {
const videoRequest = utils.deepClone(videoBidRequest);
videoRequest.mediaTypes.video.context = 'outstream';
const result = spec.interpretResponse({body: videoResponse}, {bidRequest: videoRequest});
expect(result[0].renderer).to.not.equal(undefined);
});
- it('validates in/existing of gdpr consent', function () {
- let videoResponse = {
- 'id': '64f32497-b2f7-48ec-9205-35fc39894d44',
- 'bidid': 'imp_5c24924de4b0d106447af333',
- 'cur': 'USD',
- 'seatbid': [
- {
- 'seat': '3668',
- 'group': 0,
- 'bid': [
- {
- 'id': 'gb_1',
- 'impid': 'afbb5852-7cea-4a81-aa9a-a41aab505c23',
- 'price': 5.0,
- 'adid': '1274',
- 'nurl': 'https://rtb.gamoshi.io/pix/1275/win_notice/imp_5c24924de4b0d106447af333/im.gif?r=imp_5c24924de4b0d106447af333&i=afbb5852-7cea-4a81-aa9a-a41aab505c23&a=1274&b=gb_1',
- 'adomain': [],
- 'adm': '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n',
- 'cid': '3668',
- 'crid': '1274',
- 'cat': [],
- 'attr': [],
- 'h': 250,
- 'w': 300,
- 'ext': {
- 'vast_url': 'https://rtb.gamoshi.io/pix/1275/vast_o/imp_5c24924de4b0d106447af333/im.xml?r=imp_5c24924de4b0d106447af333&i=afbb5852-7cea-4a81-aa9a-a41aab505c23&a=1274&b=gb_1&w=300&h=250&vatu=aHR0cHM6Ly9zdGF0aWMuZ2FtYmlkLmlvL2RlbW8vdmFzdC54bWw&vwarv',
- 'imptrackers': [
- 'https://rtb.gamoshi.io/pix/1275/imp/imp_5c24924de4b0d106447af333/im.gif?r=imp_5c24924de4b0d106447af333&i=afbb5852-7cea-4a81-aa9a-a41aab505c23&a=1274&b=gb_1']
- }
- }
- ]
- }
- ],
- 'ext': {
- 'utrk': [{
- 'type': 'image',
- 'url': 'https://rtb.gamoshi.io/pix/1275/scm?cb=1545900621675'
- }]
- }
- };
- let gdprConsent = {
- gdprApplies: true,
- consentString: 'consent string'
- };
- let result = spec.getUserSyncs({}, [{body: videoResponse}], gdprConsent);
+ it('validates in/existing of gdpr consent', () => {
+ let result = spec.getUserSyncs({}, [{body: videoResponse}], gdprConsent, 'gamoshiCCPA');
expect(result).to.be.an('array');
expect(result.length).to.equal(1);
expect(result[0].type).to.equal('image');
- expect(result[0].url).to.equal('https://rtb.gamoshi.io/pix/1275/scm?cb=1545900621675&gc=consent%20string');
+ expect(result[0].url).to.equal('https://rtb.gamoshi.io/pix/1275/scm?cb=1545900621675&gdpr=1&consent=consent%20string&us_privacy=gamoshiCCPA');
gdprConsent.gdprApplies = false;
- result = spec.getUserSyncs({}, [{body: videoResponse}], gdprConsent);
+ result = spec.getUserSyncs({}, [{body: videoResponse}], gdprConsent, 'gamoshiCCPA');
expect(result).to.be.an('array');
expect(result.length).to.equal(1);
expect(result[0].type).to.equal('image');
- expect(result[0].url).to.equal('https://rtb.gamoshi.io/pix/1275/scm?cb=1545900621675&gc=missing');
+ expect(result[0].url).to.equal('https://rtb.gamoshi.io/pix/1275/scm?cb=1545900621675&gdpr=0&consent=&us_privacy=gamoshiCCPA');
videoResponse.ext.utrk[0].url = 'https://rtb.gamoshi.io/pix/1275/scm';
result = spec.getUserSyncs({}, [{body: videoResponse}], gdprConsent);
expect(result).to.be.an('array');
expect(result.length).to.equal(1);
expect(result[0].type).to.equal('image');
- expect(result[0].url).to.equal('https://rtb.gamoshi.io/pix/1275/scm?gc=missing');
+ expect(result[0].url).to.equal('https://rtb.gamoshi.io/pix/1275/scm');
+ });
+
+ it('validates existence of gdpr, gdpr consent and usp consent', () => {
+ let result = spec.getUserSyncs({}, [{body: videoResponse}], gdprConsent, 'gamoshiCCPA');
+ expect(result).to.be.an('array');
+ expect(result.length).to.equal(1);
+ expect(result[0].type).to.equal('image');
+ expect(result[0].url).to.equal('https://rtb.gamoshi.io/pix/1275/scm?cb=1545900621675&gdpr=1&consent=consent%20string&us_privacy=gamoshiCCPA');
+
+ gdprConsent.gdprApplies = false;
+ result = spec.getUserSyncs({}, [{body: videoResponse}], gdprConsent, '');
+ expect(result).to.be.an('array');
+ expect(result.length).to.equal(1);
+ expect(result[0].type).to.equal('image');
+ expect(result[0].url).to.equal('https://rtb.gamoshi.io/pix/1275/scm?cb=1545900621675&gdpr=0&consent=&us_privacy=');
});
});
});