diff --git a/package.json b/package.json index a0940450..2ebcb5f4 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,6 @@ "@types/jest": "^26.0.24", "@types/lodash": "^4.14.194", "@types/node": "^18.19.17", - "@types/sinon": "^9.0.10", "eslint": "^9.39.1", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-typescript": "^3.6.3", @@ -96,8 +95,7 @@ "nock": "^14.0.0-beta.7", "prettier": "^3.3.3", "prettier-plugin-packagejson": "^2.4.3", - "sinon": "^9.2.4", - "ts-jest": "^29.1.4", + "ts-jest": "^29.2.5", "typescript": "~5.3.3", "typescript-eslint": "^8.39.0" }, diff --git a/src/SmartTransactionsController.test.ts b/src/SmartTransactionsController.test.ts index 2f78a3ec..0ec5a462 100644 --- a/src/SmartTransactionsController.test.ts +++ b/src/SmartTransactionsController.test.ts @@ -24,7 +24,6 @@ import type { import type { TransactionParams } from '@metamask/transaction-controller'; import type { Hex } from '@metamask/utils'; import nock from 'nock'; -import * as sinon from 'sinon'; import packageJson from '../package.json'; import { @@ -2358,15 +2357,12 @@ describe('SmartTransactionsController', () => { }); describe('startPolling', () => { - let clock: sinon.SinonFakeTimers; - beforeEach(() => { - // eslint-disable-next-line import-x/namespace - clock = sinon.useFakeTimers(); + jest.useFakeTimers(); }); afterEach(() => { - clock.restore(); + jest.useRealTimers(); }); it('starts and stops calling smart transactions batch status api endpoint with the correct chainId at the polling interval', async () => { @@ -2413,7 +2409,7 @@ describe('SmartTransactionsController', () => { chainIds: [ChainId.mainnet], }); - await advanceTime({ clock, duration: 0 }); + await advanceTime({ duration: 0 }); const fetchHeaders = { headers: { @@ -2430,7 +2426,7 @@ describe('SmartTransactionsController', () => { fetchHeaders, ); - await advanceTime({ clock, duration: DEFAULT_INTERVAL }); + await advanceTime({ duration: DEFAULT_INTERVAL }); expect(handleFetchSpy).toHaveBeenNthCalledWith( 2, @@ -2441,7 +2437,7 @@ describe('SmartTransactionsController', () => { ); controller.startPolling({ chainIds: [ChainId.sepolia] }); - await advanceTime({ clock, duration: 0 }); + await advanceTime({ duration: 0 }); expect(handleFetchSpy).toHaveBeenNthCalledWith( 3, @@ -2451,7 +2447,7 @@ describe('SmartTransactionsController', () => { fetchHeaders, ); - await advanceTime({ clock, duration: DEFAULT_INTERVAL }); + await advanceTime({ duration: DEFAULT_INTERVAL }); expect(handleFetchSpy).toHaveBeenNthCalledWith( 5, @@ -2465,9 +2461,9 @@ describe('SmartTransactionsController', () => { controller.stopPollingByPollingToken(mainnetPollingToken); // cycle two polling intervals - await advanceTime({ clock, duration: DEFAULT_INTERVAL }); + await advanceTime({ duration: DEFAULT_INTERVAL }); - await advanceTime({ clock, duration: DEFAULT_INTERVAL }); + await advanceTime({ duration: DEFAULT_INTERVAL }); // check that the mainnet polling has stopped while the sepolia polling continues expect(handleFetchSpy).toHaveBeenNthCalledWith( @@ -2533,7 +2529,7 @@ describe('SmartTransactionsController', () => { chainIds: ['notSupportedChainId' as Hex], }); - await advanceTime({ clock, duration: 0 }); + await advanceTime({ duration: 0 }); expect(handleFetchSpy).not.toHaveBeenCalled(); }, diff --git a/tests/helpers.ts b/tests/helpers.ts index eeea3125..ce8acfb9 100644 --- a/tests/helpers.ts +++ b/tests/helpers.ts @@ -11,28 +11,25 @@ export const flushPromises = async () => { }; /** - * Advances the provided fake timer by a specified duration in incremental steps. + * Advances Jest's fake timer by a specified duration in incremental steps. * Between each step, any enqueued promises are processed. Fake timers in testing libraries * allow simulation of time without actually waiting. However, they don't always account for * promises or other asynchronous operations that may get enqueued during the timer's duration. * By advancing time in incremental steps and flushing promises between each step, * this function ensures that both timers and promises are comprehensively processed. * @param options - The options object. - * @param options.clock - The Sinon fake timer instance used to manipulate time in tests. * @param options.duration - The total amount of time (in milliseconds) to advance the timer by. * @param options.stepSize - The incremental step size (in milliseconds) by which the timer is advanced in each iteration. Default is 1/4 of the duration. */ export async function advanceTime({ - clock, duration, stepSize = Math.floor(duration / 4), }: { - clock: sinon.SinonFakeTimers; duration: number; stepSize?: number; }): Promise { do { - await clock.tickAsync(stepSize); + await jest.advanceTimersByTimeAsync(stepSize); await flushPromises(); // eslint-disable-next-line no-param-reassign duration -= stepSize; diff --git a/yarn.lock b/yarn.lock index 1b71f318..3b5e7694 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2452,7 +2452,6 @@ __metadata: "@types/jest": ^26.0.24 "@types/lodash": ^4.14.194 "@types/node": ^18.19.17 - "@types/sinon": ^9.0.10 bignumber.js: ^9.0.1 eslint: ^9.39.1 eslint-config-prettier: ^9.1.0 @@ -2471,8 +2470,7 @@ __metadata: prettier: ^3.3.3 prettier-plugin-packagejson: ^2.4.3 reselect: ^5.1.1 - sinon: ^9.2.4 - ts-jest: ^29.1.4 + ts-jest: ^29.2.5 typescript: ~5.3.3 typescript-eslint: ^8.39.0 peerDependenciesMeta: @@ -3090,15 +3088,6 @@ __metadata: languageName: node linkType: hard -"@sinonjs/commons@npm:^1.6.0, @sinonjs/commons@npm:^1.7.0, @sinonjs/commons@npm:^1.8.1": - version: 1.8.6 - resolution: "@sinonjs/commons@npm:1.8.6" - dependencies: - type-detect: 4.0.8 - checksum: 7d3f8c1e85f30cd4e83594fc19b7a657f14d49eb8d95a30095631ce15e906c869e0eff96c5b93dffea7490c00418b07f54582ba49c6560feb2a8c34c0b16832d - languageName: node - linkType: hard - "@sinonjs/commons@npm:^3.0.0": version: 3.0.1 resolution: "@sinonjs/commons@npm:3.0.1" @@ -3117,33 +3106,6 @@ __metadata: languageName: node linkType: hard -"@sinonjs/fake-timers@npm:^6.0.0, @sinonjs/fake-timers@npm:^6.0.1": - version: 6.0.1 - resolution: "@sinonjs/fake-timers@npm:6.0.1" - dependencies: - "@sinonjs/commons": ^1.7.0 - checksum: 8e331aa1412d905ecc8efd63550f58a6f77dcb510f878172004e53be63eb82650623618763001a918fc5e21257b86c45041e4e97c454ed6a2d187de084abbd11 - languageName: node - linkType: hard - -"@sinonjs/samsam@npm:^5.3.1": - version: 5.3.1 - resolution: "@sinonjs/samsam@npm:5.3.1" - dependencies: - "@sinonjs/commons": ^1.6.0 - lodash.get: ^4.4.2 - type-detect: ^4.0.8 - checksum: 1c2c49d51b1840775980e9496707d68b936f443896f92e48150c4f7713d14904e576740e52660b602f8a53b665bd5f149c5c733758030758427ddb1621090279 - languageName: node - linkType: hard - -"@sinonjs/text-encoding@npm:^0.7.1": - version: 0.7.2 - resolution: "@sinonjs/text-encoding@npm:0.7.2" - checksum: fe690002a32ba06906cf87e2e8fe84d1590294586f2a7fd180a65355b53660c155c3273d8011a5f2b77209b819aa7306678ae6e4aea0df014bd7ffd4bbbcf1ab - languageName: node - linkType: hard - "@spruceid/siwe-parser@npm:2.1.0": version: 2.1.0 resolution: "@spruceid/siwe-parser@npm:2.1.0" @@ -3444,22 +3406,6 @@ __metadata: languageName: node linkType: hard -"@types/sinon@npm:^9.0.10": - version: 9.0.11 - resolution: "@types/sinon@npm:9.0.11" - dependencies: - "@types/sinonjs__fake-timers": "*" - checksum: 2074490973012283ec9ccb9f607fa12f36c78d8801f63ec437d3e8351dae161a018836cc02e8b039118ec9fb7680331594716ed0858075a11d381edd27faa75c - languageName: node - linkType: hard - -"@types/sinonjs__fake-timers@npm:*": - version: 8.1.5 - resolution: "@types/sinonjs__fake-timers@npm:8.1.5" - checksum: 7e3c08f6c13df44f3ea7d9a5155ddf77e3f7314c156fa1c5a829a4f3763bafe2f75b1283b887f06e6b4296996a2f299b70f64ff82625f9af5885436e2524d10c - languageName: node - linkType: hard - "@types/stack-utils@npm:^2.0.0": version: 2.0.1 resolution: "@types/stack-utils@npm:2.0.1" @@ -4455,7 +4401,7 @@ __metadata: languageName: node linkType: hard -"bs-logger@npm:0.x": +"bs-logger@npm:^0.2.6": version: 0.2.6 resolution: "bs-logger@npm:0.2.6" dependencies: @@ -5104,13 +5050,6 @@ __metadata: languageName: node linkType: hard -"diff@npm:^4.0.2": - version: 4.0.2 - resolution: "diff@npm:4.0.2" - checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d - languageName: node - linkType: hard - "diff@npm:^5.0.0": version: 5.0.0 resolution: "diff@npm:5.0.0" @@ -6280,6 +6219,24 @@ __metadata: languageName: node linkType: hard +"handlebars@npm:^4.7.9": + version: 4.7.9 + resolution: "handlebars@npm:4.7.9" + dependencies: + minimist: ^1.2.5 + neo-async: ^2.6.2 + source-map: ^0.6.1 + uglify-js: ^3.1.4 + wordwrap: ^1.0.0 + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: ac39070fc1c3c76a654e4b526383eaf1601976eaa474547b263915b4806977f083600e586ca923709baeed7c82a42640bcc9cc04c37a7efd3fb444f49b8347d6 + languageName: node + linkType: hard + "has-flag@npm:^4.0.0": version: 4.0.0 resolution: "has-flag@npm:4.0.0" @@ -6743,13 +6700,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 - languageName: node - linkType: hard - "isarray@npm:^2.0.5": version: 2.0.5 resolution: "isarray@npm:2.0.5" @@ -7249,7 +7199,7 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": +"jest-util@npm:^29.7.0": version: 29.7.0 resolution: "jest-util@npm:29.7.0" dependencies: @@ -7470,13 +7420,6 @@ __metadata: languageName: node linkType: hard -"just-extend@npm:^4.0.2": - version: 4.2.1 - resolution: "just-extend@npm:4.2.1" - checksum: ff9fdede240fad313efeeeb68a660b942e5586d99c0058064c78884894a2690dc09bba44c994ad4e077e45d913fef01a9240c14a72c657b53687ac58de53b39c - languageName: node - linkType: hard - "keccak@npm:^3.0.0": version: 3.0.4 resolution: "keccak@npm:3.0.4" @@ -7554,14 +7497,7 @@ __metadata: languageName: node linkType: hard -"lodash.get@npm:^4.4.2": - version: 4.4.2 - resolution: "lodash.get@npm:4.4.2" - checksum: e403047ddb03181c9d0e92df9556570e2b67e0f0a930fcbbbd779370972368f5568e914f913e93f3b08f6d492abc71e14d4e9b7a18916c31fa04bd2306efe545 - languageName: node - linkType: hard - -"lodash.memoize@npm:4.x": +"lodash.memoize@npm:^4.1.2": version: 4.1.2 resolution: "lodash.memoize@npm:4.1.2" checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 @@ -7635,7 +7571,7 @@ __metadata: languageName: node linkType: hard -"make-error@npm:1.x": +"make-error@npm:^1.3.6": version: 1.3.6 resolution: "make-error@npm:1.3.6" checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 @@ -7852,6 +7788,13 @@ __metadata: languageName: node linkType: hard +"minimist@npm:^1.2.5": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + "minipass-collect@npm:^1.0.2": version: 1.0.2 resolution: "minipass-collect@npm:1.0.2" @@ -8026,16 +7969,10 @@ __metadata: languageName: node linkType: hard -"nise@npm:^4.0.4": - version: 4.1.0 - resolution: "nise@npm:4.1.0" - dependencies: - "@sinonjs/commons": ^1.7.0 - "@sinonjs/fake-timers": ^6.0.0 - "@sinonjs/text-encoding": ^0.7.1 - just-extend: ^4.0.2 - path-to-regexp: ^1.7.0 - checksum: b2ea1c96a41c392adf746509904af565ebd667ad4e40267f6d73be3648f04267945624ba0ce6a991b779f3ae246181f71975152b93b4dafee1f62886fa897c32 +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 languageName: node linkType: hard @@ -8509,15 +8446,6 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:^1.7.0": - version: 1.9.0 - resolution: "path-to-regexp@npm:1.9.0" - dependencies: - isarray: 0.0.1 - checksum: 5b2ac9cab2a9f82effd30a35164b20998b18d99d96608281dd2cab6e66c0e4536187970369b185ab21d3815da1ecb7dcb2d5f97a4bf0ee6e31a9612299fca147 - languageName: node - linkType: hard - "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -9051,7 +8979,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.6.3, semver@npm:^7.7.1, semver@npm:^7.7.2, semver@npm:^7.7.3": +"semver@npm:^7.6.3, semver@npm:^7.7.1, semver@npm:^7.7.2, semver@npm:^7.7.3, semver@npm:^7.8.0": version: 7.8.4 resolution: "semver@npm:7.8.4" bin: @@ -9156,20 +9084,6 @@ __metadata: languageName: node linkType: hard -"sinon@npm:^9.2.4": - version: 9.2.4 - resolution: "sinon@npm:9.2.4" - dependencies: - "@sinonjs/commons": ^1.8.1 - "@sinonjs/fake-timers": ^6.0.1 - "@sinonjs/samsam": ^5.3.1 - diff: ^4.0.2 - nise: ^4.0.4 - supports-color: ^7.1.0 - checksum: 34b881886daa4b491bb9147ccad43d662f58b45a1b6f1e8b26a405ad77041108306fac3648646335f00f702897f0ba12282588ab64de470f48f1a7678e08dc65 - languageName: node - linkType: hard - "sisteransi@npm:^1.0.4": version: 1.0.5 resolution: "sisteransi@npm:1.0.5" @@ -9720,25 +9634,27 @@ __metadata: languageName: node linkType: hard -"ts-jest@npm:^29.1.4": - version: 29.1.4 - resolution: "ts-jest@npm:29.1.4" +"ts-jest@npm:^29.2.5": + version: 29.4.11 + resolution: "ts-jest@npm:29.4.11" dependencies: - bs-logger: 0.x - fast-json-stable-stringify: 2.x - jest-util: ^29.0.0 + bs-logger: ^0.2.6 + fast-json-stable-stringify: ^2.1.0 + handlebars: ^4.7.9 json5: ^2.2.3 - lodash.memoize: 4.x - make-error: 1.x - semver: ^7.5.3 - yargs-parser: ^21.0.1 + lodash.memoize: ^4.1.2 + make-error: ^1.3.6 + semver: ^7.8.0 + type-fest: ^4.41.0 + yargs-parser: ^21.1.1 peerDependencies: "@babel/core": ">=7.0.0-beta.0 <8" - "@jest/transform": ^29.0.0 - "@jest/types": ^29.0.0 - babel-jest: ^29.0.0 - jest: ^29.0.0 - typescript: ">=4.3 <6" + "@jest/transform": ^29.0.0 || ^30.0.0 + "@jest/types": ^29.0.0 || ^30.0.0 + babel-jest: ^29.0.0 || ^30.0.0 + jest: ^29.0.0 || ^30.0.0 + jest-util: ^29.0.0 || ^30.0.0 + typescript: ">=4.3 <7" peerDependenciesMeta: "@babel/core": optional: true @@ -9750,9 +9666,11 @@ __metadata: optional: true esbuild: optional: true + jest-util: + optional: true bin: ts-jest: cli.js - checksum: e36cba389adbb3700b46422e883c8d25e76febcc01c4a39c801ef15e6edbd6da1695bdd144100153e992f98a754aea4099906955b1b9a83c3c72d77009c3d7e2 + checksum: 47ddb0db6193f8fb5aee5d493881daa14a005286ef9ec844ea56e02074900cf89d85ee51eac59a92a90b6a2656d92fe7b20a8dc496aefa658e90bfffb498752c languageName: node linkType: hard @@ -9779,7 +9697,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8, type-detect@npm:^4.0.8": +"type-detect@npm:4.0.8": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 @@ -9793,6 +9711,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^4.41.0": + version: 4.41.0 + resolution: "type-fest@npm:4.41.0" + checksum: 7055c0e3eb188425d07403f1d5dc175ca4c4f093556f26871fe22041bc93d137d54bef5851afa320638ca1379106c594f5aa153caa654ac1a7f22c71588a4e80 + languageName: node + linkType: hard + "typed-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "typed-array-buffer@npm:1.0.3" @@ -9866,6 +9791,15 @@ __metadata: languageName: node linkType: hard +"uglify-js@npm:^3.1.4": + version: 3.19.3 + resolution: "uglify-js@npm:3.19.3" + bin: + uglifyjs: bin/uglifyjs + checksum: 7ed6272fba562eb6a3149cfd13cda662f115847865c03099e3995a0e7a910eba37b82d4fccf9e88271bb2bcbe505bb374967450f433c17fa27aa36d94a8d0553 + languageName: node + linkType: hard + "ulid@npm:^2.3.0": version: 2.4.0 resolution: "ulid@npm:2.4.0" @@ -10191,6 +10125,13 @@ __metadata: languageName: node linkType: hard +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 2a44b2788165d0a3de71fd517d4880a8e20ea3a82c080ce46e294f0b68b69a2e49cff5f99c600e275c698a90d12c5ea32aff06c311f0db2eb3f1201f3e7b2a04 + languageName: node + linkType: hard + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -10290,7 +10231,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": +"yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c