From 2a7e34dd3c25048a3c6dff4d41f33086826b16fa Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Wed, 6 May 2026 22:39:35 -0400 Subject: [PATCH 01/10] Core: bump sinon to v22 --- package-lock.json | 100 +++++++++++++++++++++------------------------- package.json | 2 +- 2 files changed, 47 insertions(+), 55 deletions(-) diff --git a/package-lock.json b/package-lock.json index 96c4d6b444..4e6d3cff90 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,7 +94,7 @@ "plugin-error": "^2.0.1", "puppeteer": "^24.10.0", "resolve-from": "^5.0.0", - "sinon": "^20.0.0", + "sinon": "^22.0.0", "through2": "^4.0.2", "typescript": "^5.8.2", "typescript-eslint": "^8.26.1", @@ -3450,17 +3450,20 @@ } }, "node_modules/@sinonjs/samsam": { - "version": "8.0.2", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-10.0.2.tgz", + "integrity": "sha512-8lVwD1Df1BmzoaOLhMcGGcz/Jyr5QY2KSB75/YK1QgKzoabTeLdIVyhXNZK9ojfSKSdirbXqdbsXXqP9/Ve8+A==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", - "lodash.get": "^4.4.2", "type-detect": "^4.1.0" } }, "node_modules/@sinonjs/samsam/node_modules/type-detect": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true, "license": "MIT", "engines": { @@ -16057,11 +16060,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.get": { - "version": "4.4.2", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.isequal": { "version": "4.5.0", "dev": true, @@ -19250,46 +19248,40 @@ "license": "ISC" }, "node_modules/sinon": { - "version": "20.0.0", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-22.0.0.tgz", + "integrity": "sha512-sq/6DpdXOrLyfbKlXLg/Usc7xu8YXPeLkOFZRvA3bNUSA2lhbrZ06yuXbH1fkzBPCbz9O10+7hznzUsjaYNm0Q==", "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^13.0.5", - "@sinonjs/samsam": "^8.0.1", - "diff": "^7.0.0", - "supports-color": "^7.2.0" + "@sinonjs/fake-timers": "^15.4.0", + "@sinonjs/samsam": "^10.0.2", + "diff": "^9.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/sinon" } }, - "node_modules/sinon/node_modules/diff": { - "version": "7.0.0", + "node_modules/sinon/node_modules/@sinonjs/fake-timers": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", + "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", "dev": true, "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/sinon/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@sinonjs/commons": "^3.0.1" } }, - "node_modules/sinon/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/sinon/node_modules/diff": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz", + "integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==", "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">=0.3.1" } }, "node_modules/sirv": { @@ -24420,16 +24412,19 @@ } }, "@sinonjs/samsam": { - "version": "8.0.2", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-10.0.2.tgz", + "integrity": "sha512-8lVwD1Df1BmzoaOLhMcGGcz/Jyr5QY2KSB75/YK1QgKzoabTeLdIVyhXNZK9ojfSKSdirbXqdbsXXqP9/Ve8+A==", "dev": true, "requires": { "@sinonjs/commons": "^3.0.1", - "lodash.get": "^4.4.2", "type-detect": "^4.1.0" }, "dependencies": { "type-detect": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "dev": true } } @@ -32663,10 +32658,6 @@ "version": "4.4.0", "dev": true }, - "lodash.get": { - "version": "4.4.2", - "dev": true - }, "lodash.isequal": { "version": "4.5.0", "dev": true @@ -34693,30 +34684,31 @@ "dev": true }, "sinon": { - "version": "20.0.0", + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-22.0.0.tgz", + "integrity": "sha512-sq/6DpdXOrLyfbKlXLg/Usc7xu8YXPeLkOFZRvA3bNUSA2lhbrZ06yuXbH1fkzBPCbz9O10+7hznzUsjaYNm0Q==", "dev": true, "requires": { "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^13.0.5", - "@sinonjs/samsam": "^8.0.1", - "diff": "^7.0.0", - "supports-color": "^7.2.0" + "@sinonjs/fake-timers": "^15.4.0", + "@sinonjs/samsam": "^10.0.2", + "diff": "^9.0.0" }, "dependencies": { - "diff": { - "version": "7.0.0", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "dev": true - }, - "supports-color": { - "version": "7.2.0", + "@sinonjs/fake-timers": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", + "integrity": "sha512-DsG+8/LscQIQg68J6Ef3dv10u6nVyetYn923s3/sus5eaGfTo1of5WMZSLf0UJc9KDuKPilPH0UDJCjvNbDNCA==", "dev": true, "requires": { - "has-flag": "^4.0.0" + "@sinonjs/commons": "^3.0.1" } + }, + "diff": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-9.0.0.tgz", + "integrity": "sha512-svtcdpS8CgJyqAjEQIXdb3OjhFVVYjzGAPO8WGCmRbrml64SPw/jJD4GoE98aR7r25A0XcgrK3F02yw9R/vhQw==", + "dev": true } } }, diff --git a/package.json b/package.json index f5977f26ca..9910b847b2 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "plugin-error": "^2.0.1", "puppeteer": "^24.10.0", "resolve-from": "^5.0.0", - "sinon": "^20.0.0", + "sinon": "^22.0.0", "through2": "^4.0.2", "typescript": "^5.8.2", "typescript-eslint": "^8.26.1", From 65809092fb7b6fad8e4b02155618970ec8d3cc3a Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Wed, 6 May 2026 22:59:47 -0400 Subject: [PATCH 02/10] Core: fix cmp client spec for sinon 22 payload objects --- test/spec/libraries/cmp/cmpClient_spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec/libraries/cmp/cmpClient_spec.js b/test/spec/libraries/cmp/cmpClient_spec.js index f647a1fa9b..ee9ac1916c 100644 --- a/test/spec/libraries/cmp/cmpClient_spec.js +++ b/test/spec/libraries/cmp/cmpClient_spec.js @@ -192,7 +192,7 @@ describe('cmpClient', () => { }); sinon.assert.calledWithMatch(messenger, sinon.match((arg) => { return arg.mockApiCall.command === 'cmd' && - !arg.mockApiCall.hasOwnProperty('parameter'); + !Object.prototype.hasOwnProperty.call(arg.mockApiCall, 'parameter'); })) }); @@ -202,7 +202,7 @@ describe('cmpClient', () => { command: 'cmd', callback: cb }); - sinon.assert.calledWithMatch(messenger, sinon.match(arg => !arg.mockApiCall.hasOwnProperty('callback'))); + sinon.assert.calledWithMatch(messenger, sinon.match(arg => !Object.prototype.hasOwnProperty.call(arg.mockApiCall, 'callback'))); sinon.assert.called(cb); }); From 165197c6f424854611284967b4762259efb0aade Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Wed, 6 May 2026 22:59:51 -0400 Subject: [PATCH 03/10] Core: harden adagio analytics hasOwnProperty checks --- modules/adagioAnalyticsAdapter.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/adagioAnalyticsAdapter.js b/modules/adagioAnalyticsAdapter.js index 9966158374..2615e357ff 100644 --- a/modules/adagioAnalyticsAdapter.js +++ b/modules/adagioAnalyticsAdapter.js @@ -85,7 +85,7 @@ function removeDuplicates(arr, getKey) { const seen = {}; return arr.filter(item => { const key = getKey(item); - return seen.hasOwnProperty(key) ? false : (seen[key] = true); + return Object.prototype.hasOwnProperty.call(seen, key) ? false : (seen[key] = true); }); }; @@ -231,7 +231,7 @@ function handlerAuctionInit(event) { mediaTypeKey => mediaTypeKey ).map(mediaType => getMediaTypeAlias(mediaType)).sort(); const bannerSizes = removeDuplicates( - mediaTypes.filter(mediaType => mediaType.hasOwnProperty(BANNER) && mediaType[BANNER].hasOwnProperty('sizes')) + mediaTypes.filter(mediaType => Object.prototype.hasOwnProperty.call(mediaType, BANNER) && Object.prototype.hasOwnProperty.call(mediaType[BANNER], 'sizes')) .map(mediaType => mediaType[BANNER].sizes.map(size => size.join('x'))) .flat(), bannerSize => bannerSize From f1c7b577278c15460a28c39b57cf70d5396972ea Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Wed, 6 May 2026 23:10:15 -0400 Subject: [PATCH 04/10] Core: stabilize Sinon 22 specs for adagio, r2b2, and pubxai --- test/spec/modules/adagioRtdProvider_spec.js | 3 +++ test/spec/modules/pubxaiRtdProvider_spec.js | 11 ++++------- test/spec/modules/r2b2AnalytiscAdapter_spec.js | 6 ++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/test/spec/modules/adagioRtdProvider_spec.js b/test/spec/modules/adagioRtdProvider_spec.js index 800590e882..d4f21ad6b6 100644 --- a/test/spec/modules/adagioRtdProvider_spec.js +++ b/test/spec/modules/adagioRtdProvider_spec.js @@ -41,6 +41,9 @@ describe('Adagio Rtd Provider', function () { beforeEach(function () { sandbox = sinon.createSandbox(); clock = sandbox.useFakeTimers(); + if (typeof storage.hasOwnProperty !== 'function') { + storage.hasOwnProperty = Object.prototype.hasOwnProperty; + } }); afterEach(function () { diff --git a/test/spec/modules/pubxaiRtdProvider_spec.js b/test/spec/modules/pubxaiRtdProvider_spec.js index 76d8782638..73aaa30878 100644 --- a/test/spec/modules/pubxaiRtdProvider_spec.js +++ b/test/spec/modules/pubxaiRtdProvider_spec.js @@ -396,13 +396,10 @@ describe('pubxaiRtdProvider', () => { }); it('dispatch event', () => { setFloorsApiStatus(FloorsApiStatus.SUCCESS); - assert( - window.dispatchEvent.calledOnceWith( - new CustomEvent(FLOORS_EVENT_HANDLE, { - detail: { status: FloorsApiStatus.SUCCESS }, - }) - ) - ); + assert(window.dispatchEvent.calledOnce); + const eventArg = window.dispatchEvent.firstCall.args[0]; + expect(eventArg.type).to.equal(FLOORS_EVENT_HANDLE); + expect(eventArg.detail).to.deep.equal({ status: FloorsApiStatus.SUCCESS }); }); }); describe('getUrl', () => { diff --git a/test/spec/modules/r2b2AnalytiscAdapter_spec.js b/test/spec/modules/r2b2AnalytiscAdapter_spec.js index db34531f88..1cee76fba3 100644 --- a/test/spec/modules/r2b2AnalytiscAdapter_spec.js +++ b/test/spec/modules/r2b2AnalytiscAdapter_spec.js @@ -931,8 +931,7 @@ describe('r2b2 Analytics', function () { }); it('bid viewable content', (done) => { - const dateStub = sandbox.stub(Date, 'now'); - dateStub.returns(100); + clock.setSystemTime(100); fireEvents([ [AUCTION_INIT, MOCK.AUCTION_INIT], @@ -940,7 +939,7 @@ describe('r2b2 Analytics', function () { [AD_RENDER_SUCCEEDED, MOCK.AD_RENDER_SUCCEEDED] ]); - dateStub.returns(150); + clock.setSystemTime(150); fireEvents([[BID_VIEWABLE, MOCK.BID_VIEWABLE]]); @@ -961,7 +960,6 @@ describe('r2b2 Analytics', function () { }, 500); clock.tick(500); - dateStub.restore(); }); it('no auction data error', (done) => { From 6beda2fd95596e3427c3c795b85c4459ad2e5237 Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Wed, 6 May 2026 23:14:45 -0400 Subject: [PATCH 05/10] Core: fix instream tracking sinon22 stubbing on performance --- test/spec/modules/instreamTracking_spec.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/spec/modules/instreamTracking_spec.js b/test/spec/modules/instreamTracking_spec.js index e35c4ca973..3741ad9fee 100644 --- a/test/spec/modules/instreamTracking_spec.js +++ b/test/spec/modules/instreamTracking_spec.js @@ -148,6 +148,9 @@ describe('Instream Tracking', function () { beforeEach(function () { sandbox = sinon.createSandbox(); clock = sandbox.useFakeTimers({ shouldClearNativeTimers: true }); + if (typeof window.performance.hasOwnProperty !== 'function') { + window.performance.hasOwnProperty = Object.prototype.hasOwnProperty; + } }); afterEach(function () { From 5d4323b8861b139b57d02e734832ba8d3e11d704 Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Wed, 6 May 2026 23:25:42 -0400 Subject: [PATCH 06/10] Core: make adagio storage stubs sinon22-safe via prototype --- test/spec/modules/adagioRtdProvider_spec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/spec/modules/adagioRtdProvider_spec.js b/test/spec/modules/adagioRtdProvider_spec.js index d4f21ad6b6..d37ac4c8f7 100644 --- a/test/spec/modules/adagioRtdProvider_spec.js +++ b/test/spec/modules/adagioRtdProvider_spec.js @@ -41,8 +41,8 @@ describe('Adagio Rtd Provider', function () { beforeEach(function () { sandbox = sinon.createSandbox(); clock = sandbox.useFakeTimers(); - if (typeof storage.hasOwnProperty !== 'function') { - storage.hasOwnProperty = Object.prototype.hasOwnProperty; + if (Object.getPrototypeOf(storage) == null) { + Object.setPrototypeOf(storage, Object.prototype); } }); From ca94e0e2c943756d657a1daf8f48882c50340e01 Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Wed, 6 May 2026 23:37:06 -0400 Subject: [PATCH 07/10] Core: stub adagio storage methods on safe target for sinon22 --- test/spec/modules/adagioRtdProvider_spec.js | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/test/spec/modules/adagioRtdProvider_spec.js b/test/spec/modules/adagioRtdProvider_spec.js index d37ac4c8f7..6ee30e5d1c 100644 --- a/test/spec/modules/adagioRtdProvider_spec.js +++ b/test/spec/modules/adagioRtdProvider_spec.js @@ -38,6 +38,11 @@ describe('Adagio Rtd Provider', function () { let sandbox; let clock; + function stubStorage(methodName) { + const target = typeof storage.hasOwnProperty === 'function' ? storage : Object.getPrototypeOf(storage); + return sandbox.stub(target, methodName); + } + beforeEach(function () { sandbox = sinon.createSandbox(); clock = sandbox.useFakeTimers(); @@ -107,13 +112,13 @@ describe('Adagio Rtd Provider', function () { }); it('load an external script if localStorageIsEnabled is enabled', function () { - sandbox.stub(storage, 'localStorageIsEnabled').callsArgWith(0, true) + stubStorage('localStorageIsEnabled').callsArgWith(0, true) adagioRtdSubmodule.init(config); expect(loadExternalScriptStub.called).to.be.true; }); it('do not load an external script if localStorageIsEnabled is disabled', function () { - sandbox.stub(storage, 'localStorageIsEnabled').callsArgWith(0, false) + stubStorage('localStorageIsEnabled').callsArgWith(0, false) adagioRtdSubmodule.init(config); expect(loadExternalScriptStub.called).to.be.false; }); @@ -131,7 +136,7 @@ describe('Adagio Rtd Provider', function () { it('store new session data for further usage', function () { const storageValue = JSON.stringify({ abTest: {} }); - sandbox.stub(storage, 'getDataFromLocalStorage').callsArgWith(1, storageValue); + stubStorage('getDataFromLocalStorage').callsArgWith(1, storageValue); sandbox.stub(Date, 'now').returns(1714116520710); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-1234'); @@ -159,7 +164,7 @@ describe('Adagio Rtd Provider', function () { it('store existing session data for further usage', function () { const storageValue = JSON.stringify({ session: session, abTest: {} }); - sandbox.stub(storage, 'getDataFromLocalStorage').callsArgWith(1, storageValue); + stubStorage('getDataFromLocalStorage').callsArgWith(1, storageValue); sandbox.stub(Date, 'now').returns(1714116520710); sandbox.stub(Math, 'random').returns(0.8); @@ -184,7 +189,7 @@ describe('Adagio Rtd Provider', function () { it('store new session if old session has expired data for further usage', function () { const storageValue = JSON.stringify({ session: session, abTest: {} }); sandbox.stub(Date, 'now').returns(1715679344351); - sandbox.stub(storage, 'getDataFromLocalStorage').callsArgWith(1, storageValue); + stubStorage('getDataFromLocalStorage').callsArgWith(1, storageValue); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-5678'); @@ -211,7 +216,7 @@ describe('Adagio Rtd Provider', function () { describe('store session data in localStorage for old snippet', function () { it('store new session data for further usage', function () { const storageValue = null; - sandbox.stub(storage, 'getDataFromLocalStorage').callsArgWith(1, storageValue); + stubStorage('getDataFromLocalStorage').callsArgWith(1, storageValue); sandbox.stub(Date, 'now').returns(1714116520710); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-1234'); @@ -248,7 +253,7 @@ describe('Adagio Rtd Provider', function () { testVersion: 'clt' } }); - sandbox.stub(storage, 'getDataFromLocalStorage').callsArgWith(1, storageValue); + stubStorage('getDataFromLocalStorage').callsArgWith(1, storageValue); sandbox.stub(Date, 'now').returns(1714116520710); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-1234'); @@ -295,7 +300,7 @@ describe('Adagio Rtd Provider', function () { testVersion: 'srv' } }); - sandbox.stub(storage, 'getDataFromLocalStorage').callsArgWith(1, storageValue); + stubStorage('getDataFromLocalStorage').callsArgWith(1, storageValue); sandbox.stub(Date, 'now').returns(1714116520710); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-1234'); From b15869fc09edac3594f8239df4caaa43827f2f78 Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Wed, 6 May 2026 23:48:56 -0400 Subject: [PATCH 08/10] Core: remove sinon stubs on adagio storage object --- test/spec/modules/adagioRtdProvider_spec.js | 36 ++++++++++++++------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/test/spec/modules/adagioRtdProvider_spec.js b/test/spec/modules/adagioRtdProvider_spec.js index 6ee30e5d1c..c30e7e5a0f 100644 --- a/test/spec/modules/adagioRtdProvider_spec.js +++ b/test/spec/modules/adagioRtdProvider_spec.js @@ -38,9 +38,14 @@ describe('Adagio Rtd Provider', function () { let sandbox; let clock; - function stubStorage(methodName) { - const target = typeof storage.hasOwnProperty === 'function' ? storage : Object.getPrototypeOf(storage); - return sandbox.stub(target, methodName); + const storageMethodRestores = []; + + function setStorageMethod(methodName, impl) { + const original = storage[methodName]; + storage[methodName] = impl; + storageMethodRestores.push(() => { + storage[methodName] = original; + }); } beforeEach(function () { @@ -54,6 +59,9 @@ describe('Adagio Rtd Provider', function () { afterEach(function () { clock.restore(); sandbox.restore(); + while (storageMethodRestores.length) { + storageMethodRestores.pop()(); + } }); describe('submodule `init`', function () { @@ -112,13 +120,19 @@ describe('Adagio Rtd Provider', function () { }); it('load an external script if localStorageIsEnabled is enabled', function () { - stubStorage('localStorageIsEnabled').callsArgWith(0, true) + setStorageMethod('localStorageIsEnabled', (cb) => { + const enabled = Boolean(1); + cb(enabled); + }) adagioRtdSubmodule.init(config); expect(loadExternalScriptStub.called).to.be.true; }); it('do not load an external script if localStorageIsEnabled is disabled', function () { - stubStorage('localStorageIsEnabled').callsArgWith(0, false) + setStorageMethod('localStorageIsEnabled', (cb) => { + const enabled = Boolean(0); + cb(enabled); + }) adagioRtdSubmodule.init(config); expect(loadExternalScriptStub.called).to.be.false; }); @@ -136,7 +150,7 @@ describe('Adagio Rtd Provider', function () { it('store new session data for further usage', function () { const storageValue = JSON.stringify({ abTest: {} }); - stubStorage('getDataFromLocalStorage').callsArgWith(1, storageValue); + setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); sandbox.stub(Date, 'now').returns(1714116520710); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-1234'); @@ -164,7 +178,7 @@ describe('Adagio Rtd Provider', function () { it('store existing session data for further usage', function () { const storageValue = JSON.stringify({ session: session, abTest: {} }); - stubStorage('getDataFromLocalStorage').callsArgWith(1, storageValue); + setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); sandbox.stub(Date, 'now').returns(1714116520710); sandbox.stub(Math, 'random').returns(0.8); @@ -189,7 +203,7 @@ describe('Adagio Rtd Provider', function () { it('store new session if old session has expired data for further usage', function () { const storageValue = JSON.stringify({ session: session, abTest: {} }); sandbox.stub(Date, 'now').returns(1715679344351); - stubStorage('getDataFromLocalStorage').callsArgWith(1, storageValue); + setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-5678'); @@ -216,7 +230,7 @@ describe('Adagio Rtd Provider', function () { describe('store session data in localStorage for old snippet', function () { it('store new session data for further usage', function () { const storageValue = null; - stubStorage('getDataFromLocalStorage').callsArgWith(1, storageValue); + setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); sandbox.stub(Date, 'now').returns(1714116520710); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-1234'); @@ -253,7 +267,7 @@ describe('Adagio Rtd Provider', function () { testVersion: 'clt' } }); - stubStorage('getDataFromLocalStorage').callsArgWith(1, storageValue); + setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); sandbox.stub(Date, 'now').returns(1714116520710); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-1234'); @@ -300,7 +314,7 @@ describe('Adagio Rtd Provider', function () { testVersion: 'srv' } }); - stubStorage('getDataFromLocalStorage').callsArgWith(1, storageValue); + setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); sandbox.stub(Date, 'now').returns(1714116520710); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-1234'); From d77982f45c3bbad1f61e056665df636ababa7a6f Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Thu, 7 May 2026 00:20:33 -0400 Subject: [PATCH 09/10] Adagio RTD: stop stubbing Date.now in specs (#14850) --- test/spec/modules/adagioRtdProvider_spec.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/spec/modules/adagioRtdProvider_spec.js b/test/spec/modules/adagioRtdProvider_spec.js index c30e7e5a0f..6638fa27b3 100644 --- a/test/spec/modules/adagioRtdProvider_spec.js +++ b/test/spec/modules/adagioRtdProvider_spec.js @@ -151,7 +151,7 @@ describe('Adagio Rtd Provider', function () { it('store new session data for further usage', function () { const storageValue = JSON.stringify({ abTest: {} }); setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); - sandbox.stub(Date, 'now').returns(1714116520710); + clock.setSystemTime(1714116520710); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-1234'); @@ -179,7 +179,7 @@ describe('Adagio Rtd Provider', function () { it('store existing session data for further usage', function () { const storageValue = JSON.stringify({ session: session, abTest: {} }); setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); - sandbox.stub(Date, 'now').returns(1714116520710); + clock.setSystemTime(1714116520710); sandbox.stub(Math, 'random').returns(0.8); const spy = sandbox.spy(_internal.getAdagioNs().queue, 'push') @@ -202,7 +202,7 @@ describe('Adagio Rtd Provider', function () { it('store new session if old session has expired data for further usage', function () { const storageValue = JSON.stringify({ session: session, abTest: {} }); - sandbox.stub(Date, 'now').returns(1715679344351); + clock.setSystemTime(1715679344351); setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-5678'); @@ -231,7 +231,7 @@ describe('Adagio Rtd Provider', function () { it('store new session data for further usage', function () { const storageValue = null; setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); - sandbox.stub(Date, 'now').returns(1714116520710); + clock.setSystemTime(1714116520710); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-1234'); @@ -268,7 +268,7 @@ describe('Adagio Rtd Provider', function () { } }); setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); - sandbox.stub(Date, 'now').returns(1714116520710); + clock.setSystemTime(1714116520710); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-1234'); @@ -315,7 +315,7 @@ describe('Adagio Rtd Provider', function () { } }); setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); - sandbox.stub(Date, 'now').returns(1714116520710); + clock.setSystemTime(1714116520710); sandbox.stub(Math, 'random').returns(0.8); sandbox.stub(utils, 'generateUUID').returns('uid-1234'); @@ -706,7 +706,7 @@ describe('Adagio Rtd Provider', function () { it('store a copy of computed property', function() { const spy = sandbox.spy(_internal.getAdagioNs().queue, 'push') - sandbox.stub(Date, 'now').returns(12345); + clock.setSystemTime(12345); _internal.getGuard().clear(); From cab68062841bc13a1600eb3439f57b70630420da Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Thu, 7 May 2026 00:34:37 -0400 Subject: [PATCH 10/10] Adagio RTD: remove utils.generateUUID stubs from specs (#14852) --- test/spec/modules/adagioRtdProvider_spec.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/test/spec/modules/adagioRtdProvider_spec.js b/test/spec/modules/adagioRtdProvider_spec.js index 6638fa27b3..4a66e381d2 100644 --- a/test/spec/modules/adagioRtdProvider_spec.js +++ b/test/spec/modules/adagioRtdProvider_spec.js @@ -153,7 +153,6 @@ describe('Adagio Rtd Provider', function () { setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); clock.setSystemTime(1714116520710); sandbox.stub(Math, 'random').returns(0.8); - sandbox.stub(utils, 'generateUUID').returns('uid-1234'); const spy = sandbox.spy(_internal.getAdagioNs().queue, 'push') @@ -163,7 +162,7 @@ describe('Adagio Rtd Provider', function () { session: { v: 2, new: true, - id: utils.generateUUID(), + id: sinon.match.string, rnd: Math.random(), pages: 1, } @@ -205,7 +204,6 @@ describe('Adagio Rtd Provider', function () { clock.setSystemTime(1715679344351); setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); sandbox.stub(Math, 'random').returns(0.8); - sandbox.stub(utils, 'generateUUID').returns('uid-5678'); const spy = sandbox.spy(_internal.getAdagioNs().queue, 'push') @@ -215,7 +213,7 @@ describe('Adagio Rtd Provider', function () { session: { ...session, new: true, - id: utils.generateUUID(), + id: sinon.match.string, rnd: Math.random(), } } @@ -233,7 +231,6 @@ describe('Adagio Rtd Provider', function () { setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); clock.setSystemTime(1714116520710); sandbox.stub(Math, 'random').returns(0.8); - sandbox.stub(utils, 'generateUUID').returns('uid-1234'); const spy = sandbox.spy(_internal.getAdagioNs().queue, 'push') @@ -242,7 +239,7 @@ describe('Adagio Rtd Provider', function () { const expected = { session: { new: true, - id: utils.generateUUID(), + id: sinon.match.string, rnd: Math.random(), pages: 1 } @@ -270,7 +267,6 @@ describe('Adagio Rtd Provider', function () { setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); clock.setSystemTime(1714116520710); sandbox.stub(Math, 'random').returns(0.8); - sandbox.stub(utils, 'generateUUID').returns('uid-1234'); const spy = sandbox.spy(_internal.getAdagioNs().queue, 'push') @@ -280,7 +276,7 @@ describe('Adagio Rtd Provider', function () { session: { new: false, expiry: 1714116520710, - id: utils.generateUUID(), + id: sinon.match.string, rnd: Math.random(), pages: 1, testName: 't', @@ -317,7 +313,6 @@ describe('Adagio Rtd Provider', function () { setStorageMethod('getDataFromLocalStorage', (key, cb) => cb(storageValue)); clock.setSystemTime(1714116520710); sandbox.stub(Math, 'random').returns(0.8); - sandbox.stub(utils, 'generateUUID').returns('uid-1234'); const spy = sandbox.spy(_internal.getAdagioNs().queue, 'push') @@ -327,7 +322,7 @@ describe('Adagio Rtd Provider', function () { session: { new: false, expiry: 1714116520710, - id: utils.generateUUID(), + id: sinon.match.string, rnd: Math.random(), pages: 1, testName: 't',