From 53f91bc092fa7b95c0323360f29bf89b5f56402a Mon Sep 17 00:00:00 2001 From: Rich Snapp Date: Fri, 26 Oct 2018 11:54:45 -0600 Subject: [PATCH 1/3] stub pixel call in justpremium tests --- test/spec/modules/justpremiumBidAdapter_spec.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/test/spec/modules/justpremiumBidAdapter_spec.js b/test/spec/modules/justpremiumBidAdapter_spec.js index 3c1048143d2..d8aa79df904 100644 --- a/test/spec/modules/justpremiumBidAdapter_spec.js +++ b/test/spec/modules/justpremiumBidAdapter_spec.js @@ -2,6 +2,18 @@ import { expect } from 'chai' import { spec } from 'modules/justpremiumBidAdapter' describe('justpremium adapter', function () { + let sandbox; + let appendChildStub; + + beforeEach(function() { + sandbox = sinon.sandbox.create(); + appendChildStub = sandbox.stub(document.body, 'appendChild'); + }); + + afterEach(function() { + sandbox.restore(); + }); + let adUnits = [ { adUnitCode: 'div-gpt-ad-1471513102552-1', @@ -153,7 +165,9 @@ describe('justpremium adapter', function () { 'zone': 21521 }], 'timeout': 1 - }]) + }]); + + expect(appendChildStub.calledOnce).to.equal(true); done() }) From 57ae143d516388d2777b2f6d15586f1794af42f1 Mon Sep 17 00:00:00 2001 From: Rich Snapp Date: Fri, 26 Oct 2018 16:49:58 -0600 Subject: [PATCH 2/3] properly stub geolocation services to prevent prompts --- .../modules/justpremiumBidAdapter_spec.js | 2 +- test/spec/modules/uolBidAdapter_spec.js | 72 +++++++++---------- 2 files changed, 33 insertions(+), 41 deletions(-) diff --git a/test/spec/modules/justpremiumBidAdapter_spec.js b/test/spec/modules/justpremiumBidAdapter_spec.js index d8aa79df904..b77b5979cd3 100644 --- a/test/spec/modules/justpremiumBidAdapter_spec.js +++ b/test/spec/modules/justpremiumBidAdapter_spec.js @@ -144,7 +144,7 @@ describe('justpremium adapter', function () { }) describe('onTimeout', function () { - it('onTimeout', (done) => { + it('onTimeout', function(done) { spec.onTimeout([{ 'bidId': '25cd3ec3fd6ed7', 'bidder': 'justpremium', diff --git a/test/spec/modules/uolBidAdapter_spec.js b/test/spec/modules/uolBidAdapter_spec.js index 1733afc91f9..32b7968e9ec 100644 --- a/test/spec/modules/uolBidAdapter_spec.js +++ b/test/spec/modules/uolBidAdapter_spec.js @@ -1,11 +1,22 @@ import { expect } from 'chai'; import { spec } from 'modules/uolBidAdapter'; -import { newBidder } from 'src/adapters/bidderFactory'; const ENDPOINT = 'https://prebid.adilligo.com/v1/prebid.json'; describe('UOL Bid Adapter', function () { - const adapter = newBidder(spec); + let sandbox; + let queryStub; + let getCurrentPositionStub; + + beforeEach(function() { + sandbox = sinon.sandbox.create(); + getCurrentPositionStub = sandbox.stub(navigator.geolocation, 'getCurrentPosition'); + queryStub = sandbox.stub(navigator.permissions, 'query'); + }); + + afterEach(function() { + sandbox.restore(); + }); describe('isBidRequestValid', function () { let bid = { @@ -88,31 +99,6 @@ describe('UOL Bid Adapter', function () { }); describe('buildRequests', function () { - let queryPermission; - let cleanup = function() { - navigator.permissions.query = queryPermission; - }; - let grantTriangulation = function() { - queryPermission = navigator.permissions.query; - navigator.permissions.query = function(data) { - return new Promise((resolve, reject) => { - resolve({state: 'granted'}); - }); - } - }; - let denyTriangulation = function() { - queryPermission = navigator.permissions.query; - navigator.permissions.query = function(data) { - return new Promise((resolve, reject) => { - resolve({state: 'prompt'}); - }); - } - }; - let removeQuerySupport = function() { - queryPermission = navigator.permissions.query; - navigator.permissions.query = undefined; - } - let bidRequests = [ { 'bidder': 'uol', @@ -173,31 +159,37 @@ describe('UOL Bid Adapter', function () { describe('buildRequest geolocation param', function () { // shall only be tested if browser engine supports geolocation and permissions API. let geolocation = { lat: 4, long: 3, timestamp: 123121451 }; - it('should contain user coordinates if (i) DNT is off; (ii) browser supports implementation; (iii) localStorage contains geolocation history', function () { + it('should not contain user coordinates if browser doesnt support permission query', function () { localStorage.setItem('uolLocationTracker', JSON.stringify(geolocation)); - grantTriangulation(); + navigator.permissions.query = undefined; const requestObject = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(requestObject.data); - expect(payload.geolocation).to.exist.and.not.be.empty; - cleanup(); + expect(payload.geolocation).to.not.exist; }) - it('should not contain user coordinates if localStorage is empty', function () { - localStorage.removeItem('uolLocationTracker'); - denyTriangulation(); + it('should contain user coordinates if (i) DNT is off; (ii) browser supports implementation; (iii) localStorage contains geolocation history', function (done) { + localStorage.setItem('uolLocationTracker', JSON.stringify(geolocation)); + queryStub.callsFake(function() { + return new Promise((resolve, reject) => { + resolve({state: 'granted'}); + }); + }); + getCurrentPositionStub.callsFake(() => done()); const requestObject = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(requestObject.data); - expect(payload.geolocation).to.not.exist; - cleanup(); + expect(payload.geolocation).to.exist.and.not.be.empty; }) - it('should not contain user coordinates if browser doesnt support permission query', function () { - localStorage.setItem('uolLocationTracker', JSON.stringify(geolocation)); - removeQuerySupport(); + it('should not contain user coordinates if localStorage is empty', function () { + localStorage.removeItem('uolLocationTracker'); + queryStub.callsFake(function() { + return new Promise((resolve, reject) => { + resolve({state: 'prompt'}); + }); + }); const requestObject = spec.buildRequests(bidRequests, bidderRequest); const payload = JSON.parse(requestObject.data); expect(payload.geolocation).to.not.exist; - cleanup(); }) }) } From 60270e046abf68ae56a4343d42f8555e176872f1 Mon Sep 17 00:00:00 2001 From: Rich Snapp Date: Fri, 26 Oct 2018 17:09:18 -0600 Subject: [PATCH 3/3] stub img creation as well to prevent call in justpremium --- modules/justpremiumBidAdapter.js | 16 +++++++++++----- test/spec/modules/justpremiumBidAdapter_spec.js | 8 ++++---- test/spec/modules/uolBidAdapter_spec.js | 7 +++++-- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/modules/justpremiumBidAdapter.js b/modules/justpremiumBidAdapter.js index 48b6805c0e1..c31f485020e 100644 --- a/modules/justpremiumBidAdapter.js +++ b/modules/justpremiumBidAdapter.js @@ -122,6 +122,16 @@ export const spec = { } +export let pixel = { + fire(url) { + let img = document.createElement('img') + img.src = url + img.id = 'jp-pixel-track' + img.style.cssText = 'display:none !important;' + document.body.appendChild(img) + } +}; + function track (data, payload, type) { let pubUrl = '' @@ -147,11 +157,7 @@ ru=${encodeURIComponent(pubUrl)}&tt=&siw=&sh=${payload.sh}&sw=${payload.sw}&wh=$ sd=&_c=&et=&aid=&said=&ei=&fc=&sp=&at=bidder&cid=&ist=&mg=&dl=&dlt=&ev=&vt=&zid=${payload.id}&dr=${duration}&di=&pr=& cw=&ch=&nt=&st=&jp=${encodeURIComponent(JSON.stringify(jp))}&ty=${type}` - let img = document.createElement('img') - img.src = pixelUrl - img.id = 'jp-pixel-track' - img.style.cssText = 'display:none !important;' - document.body.appendChild(img) + pixel.fire(pixelUrl); } function findBid (params, bids) { diff --git a/test/spec/modules/justpremiumBidAdapter_spec.js b/test/spec/modules/justpremiumBidAdapter_spec.js index b77b5979cd3..8167c29e5c2 100644 --- a/test/spec/modules/justpremiumBidAdapter_spec.js +++ b/test/spec/modules/justpremiumBidAdapter_spec.js @@ -1,13 +1,13 @@ import { expect } from 'chai' -import { spec } from 'modules/justpremiumBidAdapter' +import { spec, pixel } from 'modules/justpremiumBidAdapter' describe('justpremium adapter', function () { let sandbox; - let appendChildStub; + let pixelStub; beforeEach(function() { sandbox = sinon.sandbox.create(); - appendChildStub = sandbox.stub(document.body, 'appendChild'); + pixelStub = sandbox.stub(pixel, 'fire'); }); afterEach(function() { @@ -167,7 +167,7 @@ describe('justpremium adapter', function () { 'timeout': 1 }]); - expect(appendChildStub.calledOnce).to.equal(true); + expect(pixelStub.calledOnce).to.equal(true); done() }) diff --git a/test/spec/modules/uolBidAdapter_spec.js b/test/spec/modules/uolBidAdapter_spec.js index 32b7968e9ec..e9341772e7d 100644 --- a/test/spec/modules/uolBidAdapter_spec.js +++ b/test/spec/modules/uolBidAdapter_spec.js @@ -10,8 +10,6 @@ describe('UOL Bid Adapter', function () { beforeEach(function() { sandbox = sinon.sandbox.create(); - getCurrentPositionStub = sandbox.stub(navigator.geolocation, 'getCurrentPosition'); - queryStub = sandbox.stub(navigator.permissions, 'query'); }); afterEach(function() { @@ -159,6 +157,11 @@ describe('UOL Bid Adapter', function () { describe('buildRequest geolocation param', function () { // shall only be tested if browser engine supports geolocation and permissions API. let geolocation = { lat: 4, long: 3, timestamp: 123121451 }; + beforeEach(function() { + getCurrentPositionStub = sandbox.stub(navigator.geolocation, 'getCurrentPosition'); + queryStub = sandbox.stub(navigator.permissions, 'query'); + }); + it('should not contain user coordinates if browser doesnt support permission query', function () { localStorage.setItem('uolLocationTracker', JSON.stringify(geolocation)); navigator.permissions.query = undefined;