From f14415e990b9f2233780587400c9867e91695426 Mon Sep 17 00:00:00 2001 From: Luca Greco Date: Fri, 12 Jan 2024 21:18:00 +0100 Subject: [PATCH] chore: Update CI config to include nodejs v20 --- .circleci/config.yml | 8 +++-- package-lock.json | 39 +++++++++++------------ package.json | 2 +- scripts/lib/mocha.js | 9 +++--- tests/unit/test-util/test.submit-addon.js | 9 +++++- 5 files changed, 37 insertions(+), 30 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2402583c8d..e40e9cfd94 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -24,11 +24,13 @@ references: # set of nodejs versions that should be tested. # The nodejs version set as `nodejs_current` is the one used to # release the package on npm. + # + # See https://nodejs.org/en/about/previous-releases for updates to nodejs versions. nodejs_versions: # nvm-windows wants a full Node version, not just `.`. - - &nodejs_current "16.14.2" - - &nodejs_next "18.15" - - &nodejs_experimental "19.3" + - &nodejs_current "18.19.0" + - &nodejs_next "20.11.0" + - &nodejs_experimental "21.5" nodejs_enum: &nodejs_enum type: enum diff --git a/package-lock.json b/package-lock.json index d00552ba36..2edc162a9f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -74,7 +74,7 @@ "prettyjson": "1.2.5", "shelljs": "0.8.5", "sinon": "17.0.1", - "testdouble": "3.16.8", + "testdouble": "3.20.1", "yauzl": "2.10.0" }, "engines": { @@ -10004,17 +10004,16 @@ ] }, "node_modules/quibble": { - "version": "0.6.14", - "resolved": "https://registry.npmjs.org/quibble/-/quibble-0.6.14.tgz", - "integrity": "sha512-r5noQhWx61qMOjaMQ48ePOKc9MKXzXFKUNj4S7/wIB9rzht3yyyf/Ms3BhXEVEPJtUvTNNnQxnT/6sHzcbkRoA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/quibble/-/quibble-0.9.1.tgz", + "integrity": "sha512-2EkLLm3CsBhbHfYEgBWHSJZZRpVHUZLeuJVEQoU/lsCqxcOvVkgVlF4nWv2ACWKkb0lgxgMh3m8vq9rhx9LTIg==", "dev": true, "dependencies": { "lodash": "^4.17.21", - "resolve": "^1.20.0" + "resolve": "^1.22.8" }, "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "node": ">= 0.14.0" } }, "node_modules/quick-format-unescaped": { @@ -11276,18 +11275,18 @@ } }, "node_modules/testdouble": { - "version": "3.16.8", - "resolved": "https://registry.npmjs.org/testdouble/-/testdouble-3.16.8.tgz", - "integrity": "sha512-jOKYRJ9mfgDxwuUOj84sl9DWiP1+KpHcgnhjlSHC8h1ZxJT3KD1FAAFVqnqmmyrzc/+0DRbI/U5xo1/K3PLi8w==", + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/testdouble/-/testdouble-3.20.1.tgz", + "integrity": "sha512-D9Or6ayxr16dPPEkmXyGb8ow7VcQjUzuYFUxPTkx2FdSkn5Z6EC6cxQHwEGhedmE30FAJOYiAW+r7XXg6FmYOQ==", "dev": true, "dependencies": { "lodash": "^4.17.21", - "quibble": "^0.6.14", + "quibble": "^0.9.1", "stringify-object-es5": "^2.5.0", "theredoc": "^1.0.0" }, "engines": { - "node": ">= 4.0.0" + "node": ">= 16" } }, "node_modules/text-extensions": { @@ -19424,13 +19423,13 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" }, "quibble": { - "version": "0.6.14", - "resolved": "https://registry.npmjs.org/quibble/-/quibble-0.6.14.tgz", - "integrity": "sha512-r5noQhWx61qMOjaMQ48ePOKc9MKXzXFKUNj4S7/wIB9rzht3yyyf/Ms3BhXEVEPJtUvTNNnQxnT/6sHzcbkRoA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/quibble/-/quibble-0.9.1.tgz", + "integrity": "sha512-2EkLLm3CsBhbHfYEgBWHSJZZRpVHUZLeuJVEQoU/lsCqxcOvVkgVlF4nWv2ACWKkb0lgxgMh3m8vq9rhx9LTIg==", "dev": true, "requires": { "lodash": "^4.17.21", - "resolve": "^1.20.0" + "resolve": "^1.22.8" } }, "quick-format-unescaped": { @@ -20377,13 +20376,13 @@ } }, "testdouble": { - "version": "3.16.8", - "resolved": "https://registry.npmjs.org/testdouble/-/testdouble-3.16.8.tgz", - "integrity": "sha512-jOKYRJ9mfgDxwuUOj84sl9DWiP1+KpHcgnhjlSHC8h1ZxJT3KD1FAAFVqnqmmyrzc/+0DRbI/U5xo1/K3PLi8w==", + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/testdouble/-/testdouble-3.20.1.tgz", + "integrity": "sha512-D9Or6ayxr16dPPEkmXyGb8ow7VcQjUzuYFUxPTkx2FdSkn5Z6EC6cxQHwEGhedmE30FAJOYiAW+r7XXg6FmYOQ==", "dev": true, "requires": { "lodash": "^4.17.21", - "quibble": "^0.6.14", + "quibble": "^0.9.1", "stringify-object-es5": "^2.5.0", "theredoc": "^1.0.0" } diff --git a/package.json b/package.json index 93bf79aa42..9e6e6c6017 100644 --- a/package.json +++ b/package.json @@ -120,7 +120,7 @@ "prettyjson": "1.2.5", "shelljs": "0.8.5", "sinon": "17.0.1", - "testdouble": "3.16.8", + "testdouble": "3.20.1", "yauzl": "2.10.0" }, "author": "Kumar McMillan", diff --git a/scripts/lib/mocha.js b/scripts/lib/mocha.js index da1e67c30b..3adadd1931 100644 --- a/scripts/lib/mocha.js +++ b/scripts/lib/mocha.js @@ -20,17 +20,16 @@ const runMocha = (args, execMochaOptions = {}, coverageEnabled) => { shell.echo(`\nSetting mocha timeout from env var: ${MOCHA_TIMEOUT}\n`); } - // Pass custom babel-loader node loader to transpile on the fly - // the tests modules. - binArgs.push('-n="loader=./tests/babel-loader.js"'); + // Pass testdouble node loader to support ESM module mocking and + // transpiling on the fly the tests modules. + binArgs.push('-n="loader=testdouble"'); const res = spawnSync(binPath, binArgs, { ...execMochaOptions, env: { ...process.env, // Make sure NODE_ENV is set to test (which also enable babel - // install plugin for all modules transpiled on the fly by the - // tests/babel-loader.js). + // install plugin for all modules transpiled on the fly). NODE_ENV: 'test', }, stdio: 'inherit', diff --git a/tests/unit/test-util/test.submit-addon.js b/tests/unit/test-util/test.submit-addon.js index 70850722ea..a2b5cff035 100644 --- a/tests/unit/test-util/test.submit-addon.js +++ b/tests/unit/test-util/test.submit-addon.js @@ -28,8 +28,15 @@ class JSONResponse extends Response { } const mockNodeFetch = (nodeFetchStub, url, method, responses) => { + // Trust us... You don't want to know why... but if you really do like nightmares + // take a look to the details and links kindly provided in this comment + // that helped investigating this: + // https://github.com/mozilla/web-ext/issues/2917#issuecomment-1766000545 + const urlMatch = url instanceof URL ? url.href : url; const stubMatcher = nodeFetchStub.withArgs( - url instanceof URL ? url : new URL(url), + sinon.match((urlArg) => + urlMatch === (urlArg instanceof URL ? urlArg.href : urlArg) + ), sinon.match.has('method', method), ); for (let i = 0; i < responses.length; i++) {