From 352af6200db41fd26ed78559c6c41bb421c8b649 Mon Sep 17 00:00:00 2001 From: Josh GM Walker <56300765+Josh-Walker-GM@users.noreply.github.com> Date: Mon, 22 Jan 2024 22:03:28 +0000 Subject: [PATCH] chore(auth-providers): switch to vitest (mostly) (#9869) This PR updates the auth providers with the exception of two: 1. `@redwoodjs/auth-firebase-web` It contains jest specific code for specifically resolving uuid to CJS. I'm sure it's possible to switch it over but I have not yet tried. 3. `@redwoodjs/auth-dbauth-web` I encountered errors that WebAuthn was not supported within the test environment. Even with the `jsdom` environment set. --- .../auth-providers/auth0/api/jest.config.js | 4 - .../auth-providers/auth0/api/package.json | 8 +- .../auth0/api/src/__tests__/auth0.test.ts | 9 +- .../auth0/api/vitest.config.mts | 7 + .../auth-providers/auth0/setup/jest.config.js | 4 - .../auth-providers/auth0/setup/package.json | 8 +- .../auth0/setup/src/__tests__/setup.test.ts | 4 +- .../auth0/setup/vitest.config.mts | 7 + .../auth-providers/auth0/web/jest.config.js | 5 - .../auth-providers/auth0/web/package.json | 8 +- .../auth0/web/src/__tests__/auth0.test.tsx | 3 +- .../auth0/web/vitest.config.mts | 8 + .../azureActiveDirectory/api/jest.config.js | 4 - .../azureActiveDirectory/api/package.json | 8 +- .../__tests__/azureActiveDirectory.test.ts | 9 +- .../api/vitest.config.mts | 7 + .../azureActiveDirectory/setup/jest.config.js | 4 - .../azureActiveDirectory/setup/package.json | 8 +- .../setup/src/__tests__/setup.test.ts | 8 +- .../setup/vitest.config.mts | 7 + .../azureActiveDirectory/web/jest.config.js | 5 - .../azureActiveDirectory/web/package.json | 8 +- .../__tests__/azureActiveDirectory.test.tsx | 3 +- .../web/vitest.config.mts | 8 + .../auth-providers/clerk/api/jest.config.js | 4 - .../auth-providers/clerk/api/package.json | 8 +- .../clerk/api/src/__tests__/clerk.test.ts | 1 + .../clerk/api/vitest.config.mts | 7 + .../auth-providers/clerk/setup/jest.config.js | 4 - .../auth-providers/clerk/setup/package.json | 5 +- .../auth-providers/clerk/web/jest.config.js | 5 - .../auth-providers/clerk/web/package.json | 8 +- .../clerk/web/src/__tests__/clerk.test.tsx | 3 +- .../clerk/web/vitest.config.mts | 8 + .../custom/setup/jest.config.js | 4 - .../auth-providers/custom/setup/package.json | 8 +- .../custom/setup/src/__tests__/setup.test.ts | 8 +- .../custom/setup/vitest.config.mts | 7 + .../auth-providers/dbAuth/api/jest.config.js | 4 - .../auth-providers/dbAuth/api/package.json | 8 +- .../api/src/__tests__/DbAuthHandler.test.js | 235 ++++++++++++------ .../dbAuth/api/src/__tests__/shared.test.ts | 1 + .../dbAuth/api/vitest.config.mts | 7 + .../dbAuth/setup/jest.config.js | 4 - .../auth-providers/dbAuth/setup/package.json | 5 +- .../firebase/api/jest.config.js | 4 - .../auth-providers/firebase/api/package.json | 8 +- .../api/src/__tests__/firebase.test.ts | 5 +- .../firebase/api/vitest.config.mts | 7 + .../firebase/setup/jest.config.js | 4 - .../firebase/setup/package.json | 8 +- .../setup/src/__tests__/setup.test.ts | 8 +- .../firebase/setup/vitest.config.mts | 7 + .../auth-providers/netlify/api/jest.config.js | 4 - .../auth-providers/netlify/api/package.json | 8 +- .../netlify/api/src/__tests__/netlify.test.ts | 29 ++- .../netlify/api/vitest.config.mts | 7 + .../netlify/setup/jest.config.js | 4 - .../auth-providers/netlify/setup/package.json | 8 +- .../netlify/setup/src/__tests__/setup.test.ts | 8 +- .../netlify/setup/vitest.config.mts | 7 + .../auth-providers/netlify/web/jest.config.js | 5 - .../auth-providers/netlify/web/package.json | 8 +- .../web/src/__tests__/netlify.test.tsx | 3 +- .../netlify/web/vitest.config.mts | 8 + .../supabase/api/jest.config.js | 4 - .../auth-providers/supabase/api/package.json | 8 +- .../api/src/__tests__/supabase.test.ts | 17 +- .../supabase/api/vitest.config.mts | 7 + .../supabase/setup/jest.config.js | 4 - .../supabase/setup/package.json | 5 +- .../supabase/web/jest.config.js | 5 - .../auth-providers/supabase/web/package.json | 8 +- .../web/src/__tests__/supabase.test.tsx | 3 +- .../supabase/web/vitest.config.mts | 8 + .../supertokens/api/jest.config.js | 4 - .../supertokens/api/package.json | 8 +- .../api/src/__tests__/supertokens.test.ts | 9 +- .../supertokens/api/vitest.config.mts | 7 + .../supertokens/setup/__mocks__/fs.js | 220 ---------------- .../supertokens/setup/jest.config.js | 4 - .../supertokens/setup/package.json | 9 +- .../setup/src/__tests__/setup.test.ts | 8 +- .../setup/src/__tests__/setupHandler.test.ts | 30 ++- .../supertokens/setup/vitest.config.mts | 7 + .../supertokens/web/jest.config.js | 5 - .../supertokens/web/package.json | 8 +- .../web/src/__tests__/supertokens.test.tsx | 3 +- .../supertokens/web/vitest.config.mts | 8 + yarn.lock | 44 ++-- 90 files changed, 515 insertions(+), 576 deletions(-) delete mode 100644 packages/auth-providers/auth0/api/jest.config.js create mode 100644 packages/auth-providers/auth0/api/vitest.config.mts delete mode 100644 packages/auth-providers/auth0/setup/jest.config.js create mode 100644 packages/auth-providers/auth0/setup/vitest.config.mts delete mode 100644 packages/auth-providers/auth0/web/jest.config.js create mode 100644 packages/auth-providers/auth0/web/vitest.config.mts delete mode 100644 packages/auth-providers/azureActiveDirectory/api/jest.config.js create mode 100644 packages/auth-providers/azureActiveDirectory/api/vitest.config.mts delete mode 100644 packages/auth-providers/azureActiveDirectory/setup/jest.config.js create mode 100644 packages/auth-providers/azureActiveDirectory/setup/vitest.config.mts delete mode 100644 packages/auth-providers/azureActiveDirectory/web/jest.config.js create mode 100644 packages/auth-providers/azureActiveDirectory/web/vitest.config.mts delete mode 100644 packages/auth-providers/clerk/api/jest.config.js create mode 100644 packages/auth-providers/clerk/api/vitest.config.mts delete mode 100644 packages/auth-providers/clerk/setup/jest.config.js delete mode 100644 packages/auth-providers/clerk/web/jest.config.js create mode 100644 packages/auth-providers/clerk/web/vitest.config.mts delete mode 100644 packages/auth-providers/custom/setup/jest.config.js create mode 100644 packages/auth-providers/custom/setup/vitest.config.mts delete mode 100644 packages/auth-providers/dbAuth/api/jest.config.js create mode 100644 packages/auth-providers/dbAuth/api/vitest.config.mts delete mode 100644 packages/auth-providers/dbAuth/setup/jest.config.js delete mode 100644 packages/auth-providers/firebase/api/jest.config.js create mode 100644 packages/auth-providers/firebase/api/vitest.config.mts delete mode 100644 packages/auth-providers/firebase/setup/jest.config.js create mode 100644 packages/auth-providers/firebase/setup/vitest.config.mts delete mode 100644 packages/auth-providers/netlify/api/jest.config.js create mode 100644 packages/auth-providers/netlify/api/vitest.config.mts delete mode 100644 packages/auth-providers/netlify/setup/jest.config.js create mode 100644 packages/auth-providers/netlify/setup/vitest.config.mts delete mode 100644 packages/auth-providers/netlify/web/jest.config.js create mode 100644 packages/auth-providers/netlify/web/vitest.config.mts delete mode 100644 packages/auth-providers/supabase/api/jest.config.js create mode 100644 packages/auth-providers/supabase/api/vitest.config.mts delete mode 100644 packages/auth-providers/supabase/setup/jest.config.js delete mode 100644 packages/auth-providers/supabase/web/jest.config.js create mode 100644 packages/auth-providers/supabase/web/vitest.config.mts delete mode 100644 packages/auth-providers/supertokens/api/jest.config.js create mode 100644 packages/auth-providers/supertokens/api/vitest.config.mts delete mode 100644 packages/auth-providers/supertokens/setup/__mocks__/fs.js delete mode 100644 packages/auth-providers/supertokens/setup/jest.config.js create mode 100644 packages/auth-providers/supertokens/setup/vitest.config.mts delete mode 100644 packages/auth-providers/supertokens/web/jest.config.js create mode 100644 packages/auth-providers/supertokens/web/vitest.config.mts diff --git a/packages/auth-providers/auth0/api/jest.config.js b/packages/auth-providers/auth0/api/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/auth0/api/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/auth0/api/package.json b/packages/auth-providers/auth0/api/package.json index 01aad3357389..640d627f0c66 100644 --- a/packages/auth-providers/auth0/api/package.json +++ b/packages/auth-providers/auth0/api/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -33,8 +33,8 @@ "@babel/core": "^7.22.20", "@redwoodjs/api": "6.0.7", "@types/jsonwebtoken": "9.0.5", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/auth0/api/src/__tests__/auth0.test.ts b/packages/auth-providers/auth0/api/src/__tests__/auth0.test.ts index 5bc90f1f303f..8ca10945be3f 100644 --- a/packages/auth-providers/auth0/api/src/__tests__/auth0.test.ts +++ b/packages/auth-providers/auth0/api/src/__tests__/auth0.test.ts @@ -1,10 +1,13 @@ import jwt from 'jsonwebtoken' +import { vi, test, expect } from 'vitest' import { verifyAuth0Token } from '../decoder' -jest.mock('jsonwebtoken', () => ({ - verify: jest.fn(), - decode: jest.fn(), +vi.mock('jsonwebtoken', () => ({ + default: { + verify: vi.fn(), + decode: vi.fn(), + }, })) test('verify, and not decode, should be called in production', () => { diff --git a/packages/auth-providers/auth0/api/vitest.config.mts b/packages/auth-providers/auth0/api/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/auth0/api/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/auth0/setup/jest.config.js b/packages/auth-providers/auth0/setup/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/auth0/setup/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/auth0/setup/package.json b/packages/auth-providers/auth0/setup/package.json index 9902868d89ca..609f1b631cad 100644 --- a/packages/auth-providers/auth0/setup/package.json +++ b/packages/auth-providers/auth0/setup/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -31,8 +31,8 @@ "@babel/cli": "7.23.4", "@babel/core": "^7.22.20", "@types/yargs": "17.0.32", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/auth0/setup/src/__tests__/setup.test.ts b/packages/auth-providers/auth0/setup/src/__tests__/setup.test.ts index 9d1abf7d4e00..ea77ef05fa0a 100644 --- a/packages/auth-providers/auth0/setup/src/__tests__/setup.test.ts +++ b/packages/auth-providers/auth0/setup/src/__tests__/setup.test.ts @@ -1,7 +1,9 @@ +import { vi, test, expect } from 'vitest' + import { command, description, builder, handler } from '../setup' // mock Telemetry for CLI commands so they don't try to spawn a process -jest.mock('@redwoodjs/telemetry', () => { +vi.mock('@redwoodjs/telemetry', () => { return { errorTelemetry: () => jest.fn(), timedTelemetry: () => jest.fn(), diff --git a/packages/auth-providers/auth0/setup/vitest.config.mts b/packages/auth-providers/auth0/setup/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/auth0/setup/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/auth0/web/jest.config.js b/packages/auth-providers/auth0/web/jest.config.js deleted file mode 100644 index e691bb8f6dbd..000000000000 --- a/packages/auth-providers/auth0/web/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testEnvironment: 'jest-environment-jsdom', - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/auth0/web/package.json b/packages/auth-providers/auth0/web/package.json index 834e79ded6e2..931a159e2820 100644 --- a/packages/auth-providers/auth0/web/package.json +++ b/packages/auth-providers/auth0/web/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -32,9 +32,9 @@ "@babel/cli": "7.23.4", "@babel/core": "^7.22.20", "@types/react": "18.2.37", - "jest": "29.7.0", "react": "0.0.0-experimental-e5205658f-20230913", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "peerDependencies": { "@auth0/auth0-spa-js": "2.1.2" diff --git a/packages/auth-providers/auth0/web/src/__tests__/auth0.test.tsx b/packages/auth-providers/auth0/web/src/__tests__/auth0.test.tsx index d939ea483e70..62f821cafbab 100644 --- a/packages/auth-providers/auth0/web/src/__tests__/auth0.test.tsx +++ b/packages/auth-providers/auth0/web/src/__tests__/auth0.test.tsx @@ -5,6 +5,7 @@ import type { User, } from '@auth0/auth0-spa-js' import { renderHook, act } from '@testing-library/react' +import { vi, beforeAll, beforeEach, describe, expect, it } from 'vitest' import type { CurrentUser } from '@redwoodjs/auth' @@ -52,7 +53,7 @@ const auth0MockClient: Partial = { }, } -const fetchMock = jest.fn() +const fetchMock = vi.fn() fetchMock.mockImplementation(async (_url, options) => { const body = options?.body ? JSON.parse(options.body) : {} diff --git a/packages/auth-providers/auth0/web/vitest.config.mts b/packages/auth-providers/auth0/web/vitest.config.mts new file mode 100644 index 000000000000..52ec6b09db8f --- /dev/null +++ b/packages/auth-providers/auth0/web/vitest.config.mts @@ -0,0 +1,8 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + environment: 'jsdom', + }, +}) diff --git a/packages/auth-providers/azureActiveDirectory/api/jest.config.js b/packages/auth-providers/azureActiveDirectory/api/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/azureActiveDirectory/api/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/azureActiveDirectory/api/package.json b/packages/auth-providers/azureActiveDirectory/api/package.json index ec16c01ba49f..2164e6e249dc 100644 --- a/packages/auth-providers/azureActiveDirectory/api/package.json +++ b/packages/auth-providers/azureActiveDirectory/api/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -34,8 +34,8 @@ "@redwoodjs/api": "6.0.7", "@types/aws-lambda": "8.10.126", "@types/jsonwebtoken": "9.0.5", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/azureActiveDirectory/api/src/__tests__/azureActiveDirectory.test.ts b/packages/auth-providers/azureActiveDirectory/api/src/__tests__/azureActiveDirectory.test.ts index 1afa1ecd1b4b..f58e3c9ee3e9 100644 --- a/packages/auth-providers/azureActiveDirectory/api/src/__tests__/azureActiveDirectory.test.ts +++ b/packages/auth-providers/azureActiveDirectory/api/src/__tests__/azureActiveDirectory.test.ts @@ -1,11 +1,14 @@ import type { APIGatewayProxyEvent, Context as LambdaContext } from 'aws-lambda' import jwt from 'jsonwebtoken' +import { vi, test, beforeAll, afterAll, expect, describe } from 'vitest' import { authDecoder } from '../decoder' -jest.mock('jsonwebtoken', () => ({ - verify: jest.fn(), - decode: jest.fn(), +vi.mock('jsonwebtoken', () => ({ + default: { + verify: vi.fn(), + decode: vi.fn(), + }, })) const req = { diff --git a/packages/auth-providers/azureActiveDirectory/api/vitest.config.mts b/packages/auth-providers/azureActiveDirectory/api/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/azureActiveDirectory/api/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/azureActiveDirectory/setup/jest.config.js b/packages/auth-providers/azureActiveDirectory/setup/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/azureActiveDirectory/setup/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/azureActiveDirectory/setup/package.json b/packages/auth-providers/azureActiveDirectory/setup/package.json index b642e6ab6ea1..19d3f655439b 100644 --- a/packages/auth-providers/azureActiveDirectory/setup/package.json +++ b/packages/auth-providers/azureActiveDirectory/setup/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -31,8 +31,8 @@ "@babel/cli": "7.23.4", "@babel/core": "^7.22.20", "@types/yargs": "17.0.32", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/azureActiveDirectory/setup/src/__tests__/setup.test.ts b/packages/auth-providers/azureActiveDirectory/setup/src/__tests__/setup.test.ts index 15b0eecace52..3f3e336466aa 100644 --- a/packages/auth-providers/azureActiveDirectory/setup/src/__tests__/setup.test.ts +++ b/packages/auth-providers/azureActiveDirectory/setup/src/__tests__/setup.test.ts @@ -1,10 +1,12 @@ +import { vi, test, expect } from 'vitest' + import { command, description, builder, handler } from '../setup' // mock Telemetry for CLI commands so they don't try to spawn a process -jest.mock('@redwoodjs/telemetry', () => { +vi.mock('@redwoodjs/telemetry', () => { return { - errorTelemetry: () => jest.fn(), - timedTelemetry: () => jest.fn(), + errorTelemetry: () => vi.fn(), + timedTelemetry: () => vi.fn(), } }) diff --git a/packages/auth-providers/azureActiveDirectory/setup/vitest.config.mts b/packages/auth-providers/azureActiveDirectory/setup/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/azureActiveDirectory/setup/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/azureActiveDirectory/web/jest.config.js b/packages/auth-providers/azureActiveDirectory/web/jest.config.js deleted file mode 100644 index e691bb8f6dbd..000000000000 --- a/packages/auth-providers/azureActiveDirectory/web/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testEnvironment: 'jest-environment-jsdom', - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/azureActiveDirectory/web/package.json b/packages/auth-providers/azureActiveDirectory/web/package.json index 6fe008d43522..c3c33a9612dc 100644 --- a/packages/auth-providers/azureActiveDirectory/web/package.json +++ b/packages/auth-providers/azureActiveDirectory/web/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -33,9 +33,9 @@ "@babel/core": "^7.22.20", "@types/netlify-identity-widget": "1.9.6", "@types/react": "18.2.37", - "jest": "29.7.0", "react": "0.0.0-experimental-e5205658f-20230913", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "peerDependencies": { "@azure/msal-browser": "2.38.3" diff --git a/packages/auth-providers/azureActiveDirectory/web/src/__tests__/azureActiveDirectory.test.tsx b/packages/auth-providers/azureActiveDirectory/web/src/__tests__/azureActiveDirectory.test.tsx index f34c4103bcd1..ef8032bfa58d 100644 --- a/packages/auth-providers/azureActiveDirectory/web/src/__tests__/azureActiveDirectory.test.tsx +++ b/packages/auth-providers/azureActiveDirectory/web/src/__tests__/azureActiveDirectory.test.tsx @@ -4,6 +4,7 @@ import type { RedirectRequest, } from '@azure/msal-browser' import { renderHook, act } from '@testing-library/react' +import { vi, it, expect, describe, beforeAll, beforeEach } from 'vitest' import type { CurrentUser } from '@redwoodjs/auth' @@ -79,7 +80,7 @@ const azureActiveDirectoryMockClient: Partial = { }, } -const fetchMock = jest.fn() +const fetchMock = vi.fn() fetchMock.mockImplementation(async (_url, options) => { const body = options?.body ? JSON.parse(options.body) : {} diff --git a/packages/auth-providers/azureActiveDirectory/web/vitest.config.mts b/packages/auth-providers/azureActiveDirectory/web/vitest.config.mts new file mode 100644 index 000000000000..52ec6b09db8f --- /dev/null +++ b/packages/auth-providers/azureActiveDirectory/web/vitest.config.mts @@ -0,0 +1,8 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + environment: 'jsdom', + }, +}) diff --git a/packages/auth-providers/clerk/api/jest.config.js b/packages/auth-providers/clerk/api/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/clerk/api/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/clerk/api/package.json b/packages/auth-providers/clerk/api/package.json index 1cd8f651f5e4..8d92f5421b2b 100644 --- a/packages/auth-providers/clerk/api/package.json +++ b/packages/auth-providers/clerk/api/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -32,8 +32,8 @@ "@babel/core": "^7.22.20", "@redwoodjs/api": "6.0.7", "@types/aws-lambda": "8.10.126", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/clerk/api/src/__tests__/clerk.test.ts b/packages/auth-providers/clerk/api/src/__tests__/clerk.test.ts index d80fe627d223..1ccea2ef70a4 100644 --- a/packages/auth-providers/clerk/api/src/__tests__/clerk.test.ts +++ b/packages/auth-providers/clerk/api/src/__tests__/clerk.test.ts @@ -1,4 +1,5 @@ import type { APIGatewayProxyEvent, Context as LambdaContext } from 'aws-lambda' +import { beforeAll, afterAll, describe, test, expect } from 'vitest' import { authDecoder, clerkAuthDecoder } from '../decoder' diff --git a/packages/auth-providers/clerk/api/vitest.config.mts b/packages/auth-providers/clerk/api/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/clerk/api/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/clerk/setup/jest.config.js b/packages/auth-providers/clerk/setup/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/clerk/setup/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/clerk/setup/package.json b/packages/auth-providers/clerk/setup/package.json index b6747fe513eb..8336bede7098 100644 --- a/packages/auth-providers/clerk/setup/package.json +++ b/packages/auth-providers/clerk/setup/package.json @@ -18,9 +18,7 @@ "build:pack": "yarn pack -o redwoodjs-auth-clerk-setup.tgz", "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", - "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src --passWithNoTests", - "test:watch": "yarn test --watch" + "prepublishOnly": "NODE_ENV=production yarn build" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -31,7 +29,6 @@ "@babel/cli": "7.23.4", "@babel/core": "^7.22.20", "@types/yargs": "17.0.32", - "jest": "29.7.0", "typescript": "5.3.3" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" diff --git a/packages/auth-providers/clerk/web/jest.config.js b/packages/auth-providers/clerk/web/jest.config.js deleted file mode 100644 index e691bb8f6dbd..000000000000 --- a/packages/auth-providers/clerk/web/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testEnvironment: 'jest-environment-jsdom', - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/clerk/web/package.json b/packages/auth-providers/clerk/web/package.json index bdf2ae2e5c88..19f29506bcd6 100644 --- a/packages/auth-providers/clerk/web/package.json +++ b/packages/auth-providers/clerk/web/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -33,9 +33,9 @@ "@clerk/clerk-react": "4.28.3", "@clerk/types": "3.60.0", "@types/react": "18.2.37", - "jest": "29.7.0", "react": "0.0.0-experimental-e5205658f-20230913", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "peerDependencies": { "@clerk/clerk-react": "4.28.3" diff --git a/packages/auth-providers/clerk/web/src/__tests__/clerk.test.tsx b/packages/auth-providers/clerk/web/src/__tests__/clerk.test.tsx index 93d6faccbabf..2ddaa1974573 100644 --- a/packages/auth-providers/clerk/web/src/__tests__/clerk.test.tsx +++ b/packages/auth-providers/clerk/web/src/__tests__/clerk.test.tsx @@ -5,6 +5,7 @@ import type { ActiveSessionResource, } from '@clerk/types' import { renderHook, act } from '@testing-library/react' +import { vi, expect, describe, it, beforeAll, beforeEach } from 'vitest' import type { CurrentUser } from '@redwoodjs/auth' @@ -63,7 +64,7 @@ const clerkMockClient: Partial = { }, } -const fetchMock = jest.fn() +const fetchMock = vi.fn() fetchMock.mockImplementation(async (_url, options) => { const body = options?.body ? JSON.parse(options.body) : {} diff --git a/packages/auth-providers/clerk/web/vitest.config.mts b/packages/auth-providers/clerk/web/vitest.config.mts new file mode 100644 index 000000000000..52ec6b09db8f --- /dev/null +++ b/packages/auth-providers/clerk/web/vitest.config.mts @@ -0,0 +1,8 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + environment: 'jsdom', + }, +}) diff --git a/packages/auth-providers/custom/setup/jest.config.js b/packages/auth-providers/custom/setup/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/custom/setup/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/custom/setup/package.json b/packages/auth-providers/custom/setup/package.json index ebc3c711846a..300958d96bc6 100644 --- a/packages/auth-providers/custom/setup/package.json +++ b/packages/auth-providers/custom/setup/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -31,8 +31,8 @@ "@babel/cli": "7.23.4", "@babel/core": "^7.22.20", "@types/yargs": "17.0.32", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/custom/setup/src/__tests__/setup.test.ts b/packages/auth-providers/custom/setup/src/__tests__/setup.test.ts index 1383a37488b8..27eac4ac2bde 100644 --- a/packages/auth-providers/custom/setup/src/__tests__/setup.test.ts +++ b/packages/auth-providers/custom/setup/src/__tests__/setup.test.ts @@ -1,10 +1,12 @@ +import { vi, test, expect } from 'vitest' + import { command, description, builder, handler } from '../setup' // mock Telemetry for CLI commands so they don't try to spawn a process -jest.mock('@redwoodjs/telemetry', () => { +vi.mock('@redwoodjs/telemetry', () => { return { - errorTelemetry: () => jest.fn(), - timedTelemetry: () => jest.fn(), + errorTelemetry: () => vi.fn(), + timedTelemetry: () => vi.fn(), } }) diff --git a/packages/auth-providers/custom/setup/vitest.config.mts b/packages/auth-providers/custom/setup/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/custom/setup/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/dbAuth/api/jest.config.js b/packages/auth-providers/dbAuth/api/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/dbAuth/api/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/dbAuth/api/package.json b/packages/auth-providers/dbAuth/api/package.json index 61ed80ea4628..694be84376b3 100644 --- a/packages/auth-providers/dbAuth/api/package.json +++ b/packages/auth-providers/dbAuth/api/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -37,8 +37,8 @@ "@simplewebauthn/server": "7.4.0", "@types/md5": "2.3.5", "@types/uuid": "9.0.7", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/dbAuth/api/src/__tests__/DbAuthHandler.test.js b/packages/auth-providers/dbAuth/api/src/__tests__/DbAuthHandler.test.js index 3f7aa24971fe..3fa67ac70b80 100644 --- a/packages/auth-providers/dbAuth/api/src/__tests__/DbAuthHandler.test.js +++ b/packages/auth-providers/dbAuth/api/src/__tests__/DbAuthHandler.test.js @@ -1,6 +1,17 @@ import crypto from 'node:crypto' import path from 'node:path' +import { + vi, + describe, + it, + expect, + beforeAll, + afterAll, + beforeEach, + afterEach, +} from 'vitest' + import { DbAuthHandler } from '../DbAuthHandler' import * as dbAuthError from '../errors' import { hashToken } from '../shared' @@ -136,7 +147,7 @@ let event, context, options describe('dbAuth', () => { beforeEach(() => { // hide deprecation warnings during test - jest.spyOn(console, 'warn').mockImplementation(() => {}) + vi.spyOn(console, 'warn').mockImplementation(() => {}) // encryption key so results are consistent regardless of settings in .env process.env.SESSION_SECRET = SESSION_SECRET delete process.env.DBAUTH_COOKIE_DOMAIN @@ -221,7 +232,7 @@ describe('dbAuth', () => { }) afterEach(async () => { - jest.spyOn(console, 'warn').mockRestore() + vi.spyOn(console, 'warn').mockRestore() await db.user.deleteMany({ where: { email: 'rob@redwoodjs.com' }, }) @@ -647,7 +658,7 @@ describe('dbAuth', () => { event.headers.cookie = 'session=ko6iXKV11DSjb6kFJ4iwcf1FEqa5wPpbL1sdtKiV51Y=|cQaYkOPG/r3ILxWiFiz90w==' const dbAuth = new DbAuthHandler(event, context, options) - dbAuth.logout = jest.fn(() => { + dbAuth.logout = vi.fn(() => { throw Error('Logout error') }) const response = await dbAuth.invoke() @@ -667,7 +678,7 @@ describe('dbAuth', () => { credentials: true, }, }) - dbAuth.logout = jest.fn(() => { + dbAuth.logout = vi.fn(() => { throw Error('Logout error') }) const response = await dbAuth.invoke() @@ -685,7 +696,7 @@ describe('dbAuth', () => { event.headers.cookie = 'session=ko6iXKV11DSjb6kFJ4iwcf1FEqa5wPpbL1sdtKiV51Y=|cQaYkOPG/r3ILxWiFiz90w==' const dbAuth = new DbAuthHandler(event, context, options) - dbAuth.logout = jest.fn(() => ['body', { foo: 'bar' }]) + dbAuth.logout = vi.fn(() => ['body', { foo: 'bar' }]) const response = await dbAuth.invoke() expect(dbAuth.logout).toHaveBeenCalled() @@ -742,17 +753,21 @@ describe('dbAuth', () => { event.body = JSON.stringify({}) let dbAuth = new DbAuthHandler(event, context, options) - dbAuth.forgotPassword().catch((e) => { + try { + await dbAuth.forgotPassword() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.UsernameRequiredError) - }) + } // empty string event.body = JSON.stringify({ username: ' ' }) dbAuth = new DbAuthHandler(event, context, options) - dbAuth.forgotPassword().catch((e) => { + try { + await dbAuth.forgotPassword() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.UsernameRequiredError) - }) + } expect.assertions(2) }) @@ -764,9 +779,12 @@ describe('dbAuth', () => { }) let dbAuth = new DbAuthHandler(event, context, options) - dbAuth.forgotPassword().catch((e) => { + try { + await dbAuth.forgotPassword() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.UsernameNotFoundError) - }) + } + expect.assertions(1) }) @@ -867,9 +885,11 @@ describe('dbAuth', () => { // invalid db client const dbAuth = new DbAuthHandler(event, context, options) dbAuth.dbAccessor = undefined - dbAuth.forgotPassword().catch((e) => { + try { + await dbAuth.forgotPassword() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.GenericError) - }) + } expect.assertions(1) }) }) @@ -923,9 +943,12 @@ describe('dbAuth', () => { }) const dbAuth = new DbAuthHandler(event, context, options) - dbAuth.login().catch((e) => { + try { + await dbAuth.login() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.UserNotFoundError) - }) + } + expect.assertions(1) }) @@ -937,9 +960,12 @@ describe('dbAuth', () => { }) const dbAuth = new DbAuthHandler(event, context, options) - dbAuth.login().catch((e) => { + try { + await dbAuth.login() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.IncorrectPasswordError) - }) + } + expect.assertions(1) }) @@ -954,9 +980,12 @@ describe('dbAuth', () => { } const dbAuth = new DbAuthHandler(event, context, options) - dbAuth.login().catch((e) => { + try { + await dbAuth.login() + } catch (e) { expect(e).toBeInstanceOf(Error) - }) + } + expect.assertions(1) }) @@ -984,9 +1013,13 @@ describe('dbAuth', () => { return null } const dbAuth = new DbAuthHandler(event, context, options) - dbAuth.login().catch((e) => { + + try { + await dbAuth.login() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.NoUserIdError) - }) + } + expect.assertions(1) }) @@ -1060,8 +1093,8 @@ describe('dbAuth', () => { }) it('login db check is called with insensitive string when user has provided one in LoginFlowOptions', async () => { - jest.clearAllMocks() - const spy = jest.spyOn(db.user, 'findFirst') + vi.clearAllMocks() + const spy = vi.spyOn(db.user, 'findFirst') options.signup.usernameMatch = 'insensitive' options.login.usernameMatch = 'insensitive' @@ -1088,8 +1121,8 @@ describe('dbAuth', () => { }) it('login db check is not called with insensitive string when user has not provided one in LoginFlowOptions', async () => { - jest.clearAllMocks() - const spy = jest.spyOn(db.user, 'findFirst') + vi.clearAllMocks() + const spy = vi.spyOn(db.user, 'findFirst') delete options.signup.usernameMatch delete options.login.usernameMatch @@ -1188,9 +1221,11 @@ describe('dbAuth', () => { event.body = JSON.stringify({ resetToken: '1234' }) let dbAuth = new DbAuthHandler(event, context, options) - dbAuth.resetPassword().catch((e) => { + try { + await dbAuth.resetPassword() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.PasswordRequiredError) - }) + } // empty string event.body = JSON.stringify({ resetToken: '1234', password: ' ' }) @@ -2262,39 +2297,52 @@ describe('dbAuth', () => { expect.assertions(3) }) - it('throws an error if password is missing', () => { + it('throws an error if password is missing', async () => { const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._verifyUser('username').catch((e) => { + try { + await dbAuth._verifyUser('username') + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.UsernameAndPasswordRequiredError) - }) - dbAuth._verifyUser('username', null).catch((e) => { + } + try { + await dbAuth._verifyUser('username', null) + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.UsernameAndPasswordRequiredError) - }) - dbAuth._verifyUser('username', '').catch((e) => { + } + try { + await dbAuth._verifyUser('username', '') + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.UsernameAndPasswordRequiredError) - }) - dbAuth._verifyUser('username', ' ').catch((e) => { + } + try { + await dbAuth._verifyUser('username', ' ') + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.UsernameAndPasswordRequiredError) - }) + } + expect.assertions(4) }) - it('can throw a custom error message', () => { + it('can throw a custom error message', async () => { // default error message const defaultMessage = options.login.errors.usernameOrPasswordMissing delete options.login.errors.usernameOrPasswordMissing const dbAuth1 = new DbAuthHandler(event, context, options) - dbAuth1._verifyUser(null, 'password').catch((e) => { + try { + await dbAuth1._verifyUser(null, 'password') + } catch (e) { expect(e.message).toEqual(defaultMessage) - }) + } // custom error message options.login.errors.usernameOrPasswordMissing = 'Missing!' const customMessage = new DbAuthHandler(event, context, options) - customMessage._verifyUser(null, 'password').catch((e) => { + try { + await customMessage._verifyUser(null, 'password') + } catch (e) { expect(e.message).toEqual('Missing!') - }) + } expect.assertions(2) }) @@ -2303,10 +2351,12 @@ describe('dbAuth', () => { delete options.login.errors.usernameNotFound const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._verifyUser('username', 'password').catch((e) => { + try { + await dbAuth._verifyUser('username', 'password') + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.UserNotFoundError) expect(e.message).toEqual('Username username not found') - }) + } expect.assertions(2) }) @@ -2315,10 +2365,12 @@ describe('dbAuth', () => { options.login.errors.usernameNotFound = 'Cannot find ${username}' const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._verifyUser('Alice', 'password').catch((e) => { + try { + await dbAuth._verifyUser('Alice', 'password') + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.UserNotFoundError) expect(e.message).toEqual('Cannot find Alice') - }) + } expect.assertions(2) }) @@ -2328,10 +2380,12 @@ describe('dbAuth', () => { const dbUser = await createDbUser() const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._verifyUser(dbUser.email, 'incorrect').catch((e) => { + try { + await dbAuth._verifyUser(dbUser.email, 'incorrect') + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.IncorrectPasswordError) expect(e.message).toEqual(`Incorrect password for ${dbUser.email}`) - }) + } expect.assertions(2) }) @@ -2341,10 +2395,12 @@ describe('dbAuth', () => { const dbUser = await createDbUser() const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._verifyUser(dbUser.email, 'incorrect').catch((e) => { + try { + await dbAuth._verifyUser(dbUser.email, 'incorrect') + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.IncorrectPasswordError) expect(e.message).toEqual(`Wrong password for ${dbUser.email}`) - }) + } expect.assertions(2) }) @@ -2354,9 +2410,11 @@ describe('dbAuth', () => { // invalid db client const dbAuth = new DbAuthHandler(event, context, options) dbAuth.dbAccessor = undefined - dbAuth._verifyUser(dbUser.email, 'password').catch((e) => { + try { + await dbAuth._verifyUser(dbUser.email, 'password') + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.GenericError) - }) + } expect.assertions(1) }) @@ -2404,9 +2462,11 @@ describe('dbAuth', () => { describe('_getCurrentUser()', () => { it('throw an error if user is not logged in', async () => { const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._getCurrentUser().catch((e) => { + try { + await dbAuth._getCurrentUser() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.NotLoggedInError) - }) + } expect.assertions(1) }) @@ -2419,9 +2479,11 @@ describe('dbAuth', () => { } const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._getCurrentUser().catch((e) => { + try { + await dbAuth._getCurrentUser() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.UserNotFoundError) - }) + } expect.assertions(1) }) @@ -2437,9 +2499,11 @@ describe('dbAuth', () => { // invalid db client const dbAuth = new DbAuthHandler(event, context, options) dbAuth.dbAccessor = undefined - dbAuth._getCurrentUser().catch((e) => { + try { + await dbAuth._getCurrentUser() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.GenericError) - }) + } expect.assertions(1) }) @@ -2470,12 +2534,15 @@ describe('dbAuth', () => { }) const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._createUser().catch((e) => { + try { + await dbAuth._createUser() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.DuplicateUsernameError) expect(e.message).toEqual( defaultMessage.replace(/\$\{username\}/, dbUser.email) ) - }) + } + expect.assertions(2) }) @@ -2488,15 +2555,18 @@ describe('dbAuth', () => { }) const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._createUser().catch((e) => { + try { + await dbAuth._createUser() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.DuplicateUsernameError) expect(e.message).toEqual(`${dbUser.email} taken`) - }) + } + expect.assertions(2) }) it('createUser db check is called with insensitive string when user has provided one in SignupFlowOptions', async () => { - const spy = jest.spyOn(db.user, 'findFirst') + const spy = vi.spyOn(db.user, 'findFirst') options.signup.usernameMatch = 'insensitive' const dbUser = await createDbUser() @@ -2516,11 +2586,11 @@ describe('dbAuth', () => { }) it('createUser db check is not called with insensitive string when user has not provided one in SignupFlowOptions', async () => { - jest.resetAllMocks() - jest.clearAllMocks() + vi.resetAllMocks() + vi.clearAllMocks() const defaultMessage = options.signup.errors.usernameTaken - const spy = jest.spyOn(db.user, 'findFirst') + const spy = vi.spyOn(db.user, 'findFirst') delete options.signup.usernameMatch const dbUser = await createDbUser() @@ -2529,12 +2599,15 @@ describe('dbAuth', () => { password: 'password', }) const dbAuth = new DbAuthHandler(event, context, options) - await dbAuth._createUser().catch((e) => { + + try { + await dbAuth._createUser() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.DuplicateUsernameError) expect(e.message).toEqual( defaultMessage.replace(/\$\{username\}/, dbUser.email) ) - }) + } expect(spy).toHaveBeenCalled() return expect(spy).not.toHaveBeenCalledWith({ @@ -2552,12 +2625,15 @@ describe('dbAuth', () => { }) const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._createUser().catch((e) => { + try { + await dbAuth._createUser() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.FieldRequiredError) expect(e.message).toEqual( defaultMessage.replace(/\$\{field\}/, 'username') ) - }) + } + expect.assertions(2) }) @@ -2568,10 +2644,13 @@ describe('dbAuth', () => { }) const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._createUser().catch((e) => { + try { + await dbAuth._createUser() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.FieldRequiredError) expect(e.message).toEqual('username blank') - }) + } + expect.assertions(2) }) @@ -2583,12 +2662,15 @@ describe('dbAuth', () => { }) const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._createUser().catch((e) => { + try { + await dbAuth._createUser() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.FieldRequiredError) expect(e.message).toEqual( defaultMessage.replace(/\$\{field\}/, 'password') ) - }) + } + expect.assertions(2) }) @@ -2599,10 +2681,13 @@ describe('dbAuth', () => { }) const dbAuth = new DbAuthHandler(event, context, options) - dbAuth._createUser().catch((e) => { + try { + await dbAuth._createUser() + } catch (e) { expect(e).toBeInstanceOf(dbAuthError.FieldRequiredError) expect(e.message).toEqual('password blank') - }) + } + expect.assertions(2) }) diff --git a/packages/auth-providers/dbAuth/api/src/__tests__/shared.test.ts b/packages/auth-providers/dbAuth/api/src/__tests__/shared.test.ts index 67b1becccc60..5e4a9f16b048 100644 --- a/packages/auth-providers/dbAuth/api/src/__tests__/shared.test.ts +++ b/packages/auth-providers/dbAuth/api/src/__tests__/shared.test.ts @@ -2,6 +2,7 @@ import crypto from 'node:crypto' import path from 'node:path' import type { APIGatewayProxyEvent } from 'aws-lambda' +import { describe, it, expect, beforeAll, afterAll, beforeEach } from 'vitest' import * as error from '../errors' import { diff --git a/packages/auth-providers/dbAuth/api/vitest.config.mts b/packages/auth-providers/dbAuth/api/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/dbAuth/api/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/dbAuth/setup/jest.config.js b/packages/auth-providers/dbAuth/setup/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/dbAuth/setup/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/dbAuth/setup/package.json b/packages/auth-providers/dbAuth/setup/package.json index a12106f6d30c..a80a2e321fae 100644 --- a/packages/auth-providers/dbAuth/setup/package.json +++ b/packages/auth-providers/dbAuth/setup/package.json @@ -18,9 +18,7 @@ "build:pack": "yarn pack -o redwoodjs-auth-dbauth-setup.tgz", "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", - "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src --passWithNoTests", - "test:watch": "yarn test --watch" + "prepublishOnly": "NODE_ENV=production yarn build" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -35,7 +33,6 @@ "@babel/core": "^7.22.20", "@simplewebauthn/typescript-types": "7.4.0", "@types/yargs": "17.0.32", - "jest": "29.7.0", "typescript": "5.3.3" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" diff --git a/packages/auth-providers/firebase/api/jest.config.js b/packages/auth-providers/firebase/api/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/firebase/api/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/firebase/api/package.json b/packages/auth-providers/firebase/api/package.json index e90b4cb93bb4..45841bf6e9a1 100644 --- a/packages/auth-providers/firebase/api/package.json +++ b/packages/auth-providers/firebase/api/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -32,8 +32,8 @@ "@babel/core": "^7.22.20", "@redwoodjs/api": "6.0.7", "@types/aws-lambda": "8.10.126", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/firebase/api/src/__tests__/firebase.test.ts b/packages/auth-providers/firebase/api/src/__tests__/firebase.test.ts index f65556edf46e..a7267c2b0e29 100644 --- a/packages/auth-providers/firebase/api/src/__tests__/firebase.test.ts +++ b/packages/auth-providers/firebase/api/src/__tests__/firebase.test.ts @@ -1,11 +1,12 @@ import type { APIGatewayProxyEvent, Context as LambdaContext } from 'aws-lambda' import admin from 'firebase-admin' +import { vi, test, expect } from 'vitest' import { authDecoder } from '../decoder' -const verifyIdToken = jest.fn() +const verifyIdToken = vi.fn() -jest.spyOn(admin, 'auth').mockImplementation((() => { +vi.spyOn(admin, 'auth').mockImplementation((() => { return { verifyIdToken, } diff --git a/packages/auth-providers/firebase/api/vitest.config.mts b/packages/auth-providers/firebase/api/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/firebase/api/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/firebase/setup/jest.config.js b/packages/auth-providers/firebase/setup/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/firebase/setup/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/firebase/setup/package.json b/packages/auth-providers/firebase/setup/package.json index 7b341fe7a0ff..c0d8c2713fe0 100644 --- a/packages/auth-providers/firebase/setup/package.json +++ b/packages/auth-providers/firebase/setup/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -31,8 +31,8 @@ "@babel/cli": "7.23.4", "@babel/core": "^7.22.20", "@types/yargs": "17.0.32", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/firebase/setup/src/__tests__/setup.test.ts b/packages/auth-providers/firebase/setup/src/__tests__/setup.test.ts index b83698bd800a..6a5cb4dc2a22 100644 --- a/packages/auth-providers/firebase/setup/src/__tests__/setup.test.ts +++ b/packages/auth-providers/firebase/setup/src/__tests__/setup.test.ts @@ -1,10 +1,12 @@ +import { vi, test, expect } from 'vitest' + import { command, description, builder, handler } from '../setup' // mock Telemetry for CLI commands so they don't try to spawn a process -jest.mock('@redwoodjs/telemetry', () => { +vi.mock('@redwoodjs/telemetry', () => { return { - errorTelemetry: () => jest.fn(), - timedTelemetry: () => jest.fn(), + errorTelemetry: () => vi.fn(), + timedTelemetry: () => vi.fn(), } }) diff --git a/packages/auth-providers/firebase/setup/vitest.config.mts b/packages/auth-providers/firebase/setup/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/firebase/setup/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/netlify/api/jest.config.js b/packages/auth-providers/netlify/api/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/netlify/api/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/netlify/api/package.json b/packages/auth-providers/netlify/api/package.json index 80246e749102..6b860fd80dce 100644 --- a/packages/auth-providers/netlify/api/package.json +++ b/packages/auth-providers/netlify/api/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -33,8 +33,8 @@ "@redwoodjs/api": "6.0.7", "@types/aws-lambda": "8.10.126", "@types/jsonwebtoken": "9.0.5", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/netlify/api/src/__tests__/netlify.test.ts b/packages/auth-providers/netlify/api/src/__tests__/netlify.test.ts index d47cacb985dd..cb4cebf3ee8e 100644 --- a/packages/auth-providers/netlify/api/src/__tests__/netlify.test.ts +++ b/packages/auth-providers/netlify/api/src/__tests__/netlify.test.ts @@ -1,22 +1,27 @@ import type { APIGatewayProxyEvent, Context as LambdaContext } from 'aws-lambda' import jwt from 'jsonwebtoken' +import { vi, beforeAll, afterAll, test, expect } from 'vitest' import { authDecoder } from '../decoder' -jest.mock('jsonwebtoken', () => { - const jsonwebtoken = jest.requireActual('jsonwebtoken') +vi.mock('jsonwebtoken', async (importOriginal) => { + // eslint-disable-next-line @typescript-eslint/consistent-type-imports + const originalJWT = await importOriginal() return { - ...jsonwebtoken, - verify: jest.fn(), - decode: jest.fn((token: string) => { - const exp = - token === 'expired-token' - ? Math.floor(Date.now() / 1000) - 3600 - : Math.floor(Date.now() / 1000) + 3600 - - return { exp, sub: 'abc123' } - }), + ...originalJWT, + default: { + verify: vi.fn(), + decode: vi.fn((token: string) => { + const exp = + token === 'expired-token' + ? Math.floor(Date.now() / 1000) - 3600 + : Math.floor(Date.now() / 1000) + 3600 + + return { exp, sub: 'abc123' } + }), + }, + TokenExpiredError: originalJWT.TokenExpiredError, } }) diff --git a/packages/auth-providers/netlify/api/vitest.config.mts b/packages/auth-providers/netlify/api/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/netlify/api/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/netlify/setup/jest.config.js b/packages/auth-providers/netlify/setup/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/netlify/setup/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/netlify/setup/package.json b/packages/auth-providers/netlify/setup/package.json index 39ba5ebc3504..ccca83faf34a 100644 --- a/packages/auth-providers/netlify/setup/package.json +++ b/packages/auth-providers/netlify/setup/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -31,8 +31,8 @@ "@babel/cli": "7.23.4", "@babel/core": "^7.22.20", "@types/yargs": "17.0.32", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/netlify/setup/src/__tests__/setup.test.ts b/packages/auth-providers/netlify/setup/src/__tests__/setup.test.ts index 5e33db38575a..9cf0b13b8fd0 100644 --- a/packages/auth-providers/netlify/setup/src/__tests__/setup.test.ts +++ b/packages/auth-providers/netlify/setup/src/__tests__/setup.test.ts @@ -1,10 +1,12 @@ +import { vi, test, expect } from 'vitest' + import { command, description, builder, handler } from '../setup' // mock Telemetry for CLI commands so they don't try to spawn a process -jest.mock('@redwoodjs/telemetry', () => { +vi.mock('@redwoodjs/telemetry', () => { return { - errorTelemetry: () => jest.fn(), - timedTelemetry: () => jest.fn(), + errorTelemetry: () => vi.fn(), + timedTelemetry: () => vi.fn(), } }) diff --git a/packages/auth-providers/netlify/setup/vitest.config.mts b/packages/auth-providers/netlify/setup/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/netlify/setup/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/netlify/web/jest.config.js b/packages/auth-providers/netlify/web/jest.config.js deleted file mode 100644 index e691bb8f6dbd..000000000000 --- a/packages/auth-providers/netlify/web/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testEnvironment: 'jest-environment-jsdom', - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/netlify/web/package.json b/packages/auth-providers/netlify/web/package.json index 3b48f28847e7..a3ef51f526fc 100644 --- a/packages/auth-providers/netlify/web/package.json +++ b/packages/auth-providers/netlify/web/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -32,9 +32,9 @@ "@babel/core": "^7.22.20", "@types/netlify-identity-widget": "1.9.6", "@types/react": "18.2.37", - "jest": "29.7.0", "react": "0.0.0-experimental-e5205658f-20230913", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "peerDependencies": { "netlify-identity-widget": "1.9.2" diff --git a/packages/auth-providers/netlify/web/src/__tests__/netlify.test.tsx b/packages/auth-providers/netlify/web/src/__tests__/netlify.test.tsx index f6d3feeb905b..f8b692d5f761 100644 --- a/packages/auth-providers/netlify/web/src/__tests__/netlify.test.tsx +++ b/packages/auth-providers/netlify/web/src/__tests__/netlify.test.tsx @@ -1,5 +1,6 @@ import { renderHook, act } from '@testing-library/react' import type * as NetlifyIdentityNS from 'netlify-identity-widget' +import { vi, expect, it, beforeAll, beforeEach, describe } from 'vitest' import type { CurrentUser } from '@redwoodjs/auth' @@ -56,7 +57,7 @@ const netlifyIdentityMockClient: Partial = { currentUser: () => loggedInUser || null, } -const fetchMock = jest.fn() +const fetchMock = vi.fn() fetchMock.mockImplementation(async (_url, options) => { const body = options?.body ? JSON.parse(options.body) : {} diff --git a/packages/auth-providers/netlify/web/vitest.config.mts b/packages/auth-providers/netlify/web/vitest.config.mts new file mode 100644 index 000000000000..52ec6b09db8f --- /dev/null +++ b/packages/auth-providers/netlify/web/vitest.config.mts @@ -0,0 +1,8 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + environment: 'jsdom', + }, +}) diff --git a/packages/auth-providers/supabase/api/jest.config.js b/packages/auth-providers/supabase/api/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/supabase/api/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/supabase/api/package.json b/packages/auth-providers/supabase/api/package.json index 6dffb7b0842f..c65687452e68 100644 --- a/packages/auth-providers/supabase/api/package.json +++ b/packages/auth-providers/supabase/api/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -33,8 +33,8 @@ "@redwoodjs/api": "6.0.7", "@types/aws-lambda": "8.10.126", "@types/jsonwebtoken": "9.0.5", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/supabase/api/src/__tests__/supabase.test.ts b/packages/auth-providers/supabase/api/src/__tests__/supabase.test.ts index dfd872a68836..dc15eef8dc05 100644 --- a/packages/auth-providers/supabase/api/src/__tests__/supabase.test.ts +++ b/packages/auth-providers/supabase/api/src/__tests__/supabase.test.ts @@ -1,16 +1,19 @@ import type { APIGatewayProxyEvent, Context as LambdaContext } from 'aws-lambda' import jwt from 'jsonwebtoken' +import { vi, beforeAll, afterAll, test, expect } from 'vitest' import { authDecoder } from '../decoder' -jest.mock('jsonwebtoken', () => { +vi.mock('jsonwebtoken', () => { return { - verify: jest.fn(() => { - return { - sub: 'abc123', - } - }), - decode: jest.fn(), + default: { + verify: vi.fn(() => { + return { + sub: 'abc123', + } + }), + decode: vi.fn(), + }, } }) diff --git a/packages/auth-providers/supabase/api/vitest.config.mts b/packages/auth-providers/supabase/api/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/supabase/api/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/supabase/setup/jest.config.js b/packages/auth-providers/supabase/setup/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/supabase/setup/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/supabase/setup/package.json b/packages/auth-providers/supabase/setup/package.json index 1a699a6d47ef..1d743c41ea48 100644 --- a/packages/auth-providers/supabase/setup/package.json +++ b/packages/auth-providers/supabase/setup/package.json @@ -18,9 +18,7 @@ "build:pack": "yarn pack -o redwoodjs-auth-supabase-setup.tgz", "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", - "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src --passWithNoTests", - "test:watch": "yarn test --watch" + "prepublishOnly": "NODE_ENV=production yarn build" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -31,7 +29,6 @@ "@babel/cli": "7.23.4", "@babel/core": "^7.22.20", "@types/yargs": "17.0.32", - "jest": "29.7.0", "typescript": "5.3.3" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" diff --git a/packages/auth-providers/supabase/web/jest.config.js b/packages/auth-providers/supabase/web/jest.config.js deleted file mode 100644 index e691bb8f6dbd..000000000000 --- a/packages/auth-providers/supabase/web/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testEnvironment: 'jest-environment-jsdom', - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/supabase/web/package.json b/packages/auth-providers/supabase/web/package.json index f0e9076d49c0..c5df68d883f1 100644 --- a/packages/auth-providers/supabase/web/package.json +++ b/packages/auth-providers/supabase/web/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -31,9 +31,9 @@ "@babel/core": "^7.22.20", "@supabase/supabase-js": "2.39.0", "@types/react": "18.2.37", - "jest": "29.7.0", "react": "0.0.0-experimental-e5205658f-20230913", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "peerDependencies": { "@supabase/supabase-js": "2.39.0" diff --git a/packages/auth-providers/supabase/web/src/__tests__/supabase.test.tsx b/packages/auth-providers/supabase/web/src/__tests__/supabase.test.tsx index a9d79a252cd7..096e3692307d 100644 --- a/packages/auth-providers/supabase/web/src/__tests__/supabase.test.tsx +++ b/packages/auth-providers/supabase/web/src/__tests__/supabase.test.tsx @@ -14,6 +14,7 @@ import type { } from '@supabase/supabase-js' import { AuthError } from '@supabase/supabase-js' import { renderHook, act } from '@testing-library/react' +import { vi, it, describe, beforeAll, beforeEach, expect } from 'vitest' import type { CurrentUser } from '@redwoodjs/auth' @@ -250,7 +251,7 @@ const supabaseMockClient: Partial = { auth: mockSupabaseAuthClient as SupabaseClient['auth'], } -const fetchMock = jest.fn() +const fetchMock = vi.fn() fetchMock.mockImplementation(async (_url, options) => { const body = options?.body ? JSON.parse(options.body) : {} diff --git a/packages/auth-providers/supabase/web/vitest.config.mts b/packages/auth-providers/supabase/web/vitest.config.mts new file mode 100644 index 000000000000..52ec6b09db8f --- /dev/null +++ b/packages/auth-providers/supabase/web/vitest.config.mts @@ -0,0 +1,8 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + environment: 'jsdom', + }, +}) diff --git a/packages/auth-providers/supertokens/api/jest.config.js b/packages/auth-providers/supertokens/api/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/supertokens/api/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/supertokens/api/package.json b/packages/auth-providers/supertokens/api/package.json index 6a3ebd3dadd9..4c961275eb6c 100644 --- a/packages/auth-providers/supertokens/api/package.json +++ b/packages/auth-providers/supertokens/api/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -33,8 +33,8 @@ "@babel/core": "^7.22.20", "@redwoodjs/api": "6.0.7", "@types/jsonwebtoken": "9.0.5", - "jest": "29.7.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "peerDependencies": { "supertokens-node": "15.2.1" diff --git a/packages/auth-providers/supertokens/api/src/__tests__/supertokens.test.ts b/packages/auth-providers/supertokens/api/src/__tests__/supertokens.test.ts index be12ae1a8b1f..d30873686b08 100644 --- a/packages/auth-providers/supertokens/api/src/__tests__/supertokens.test.ts +++ b/packages/auth-providers/supertokens/api/src/__tests__/supertokens.test.ts @@ -1,12 +1,15 @@ import type { APIGatewayProxyEvent, Context as LambdaContext } from 'aws-lambda' import jwt from 'jsonwebtoken' +import { vi, beforeAll, afterAll, test, expect } from 'vitest' import { authDecoder } from '../decoder' -jest.mock('jsonwebtoken', () => { +vi.mock('jsonwebtoken', () => { return { - verify: jest.fn(), - decode: jest.fn(), + default: { + verify: vi.fn(), + decode: vi.fn(), + }, } }) diff --git a/packages/auth-providers/supertokens/api/vitest.config.mts b/packages/auth-providers/supertokens/api/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/supertokens/api/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/supertokens/setup/__mocks__/fs.js b/packages/auth-providers/supertokens/setup/__mocks__/fs.js deleted file mode 100644 index 99fec09d82ed..000000000000 --- a/packages/auth-providers/supertokens/setup/__mocks__/fs.js +++ /dev/null @@ -1,220 +0,0 @@ -import path from 'path' - -const fs = { - ...jest.requireActual('fs'), -} - -let mockFiles = {} - -const pathSeparator = path.sep - -const getParentDir = (path) => { - return path.substring(0, path.lastIndexOf(pathSeparator)) -} - -const makeParentDirs = (path) => { - const parentDir = getParentDir(path) - if (parentDir && !(parentDir in mockFiles)) { - mockFiles[parentDir] = undefined - makeParentDirs(parentDir) - } -} - -/** - * This is a custom function that our tests can use during setup to specify - * what the files on the "mock" filesystem should look like when any of the - * `fs` APIs are used. - * - * Sets the state of the mocked file system - * @param newMockFiles - {[filepath]: contents} - */ -fs.__setMockFiles = (newMockFiles) => { - mockFiles = { ...newMockFiles } - - // Generate all the directories which implicitly exist - Object.keys(mockFiles).forEach((mockPath) => { - if (mockPath.includes(pathSeparator)) { - makeParentDirs(mockPath) - } - }) -} - -fs.__getMockFiles = () => { - return mockFiles -} - -fs.readFileSync = (path) => { - // In prisma v4.3.0, prisma format uses a Wasm module. See https://github.com/prisma/prisma/releases/tag/4.3.0. - // We shouldn't mock this, so we'll use the real fs.readFileSync. - if (path.includes('prisma_fmt_build_bg.wasm')) { - return jest.requireActual('fs').readFileSync(path) - } - - if (path in mockFiles) { - return mockFiles[path] - } else { - const fakeError = new Error( - `Error: ENOENT: no such file or directory, open '${path}'` - ) - fakeError.errno = -2 - fakeError.syscall = 'open' - fakeError.code = 'ENOENT' - fakeError.path = path - throw fakeError - } -} - -fs.writeFileSync = (path, contents) => { - const parentDir = getParentDir(path) - if (parentDir && !fs.existsSync(parentDir)) { - const fakeError = new Error( - `Error: ENOENT: no such file or directory, open '${path}'` - ) - fakeError.errno = -2 - fakeError.syscall = 'open' - fakeError.code = 'ENOENT' - fakeError.path = path - throw fakeError - } - mockFiles[path] = contents -} - -fs.appendFileSync = (path, contents) => { - if (path in mockFiles) { - mockFiles[path] = mockFiles[path] + contents - } else { - fs.writeFileSync(path, contents) - } -} - -fs.rmSync = (path, options = {}) => { - if (fs.existsSync(path)) { - if (options.recursive) { - Object.keys(mockFiles).forEach((mockedPath) => { - if (mockedPath.startsWith(path)) { - delete mockFiles[mockedPath] - } - }) - } else { - if (mockFiles[path] === undefined) { - const children = fs.readdirSync(path) - if (children.length !== 0) { - const fakeError = new Error( - `NodeError [SystemError]: Path is a directory: rm returned EISDIR (is a directory) ${path}` - ) - fakeError.errno = 21 - fakeError.syscall = 'rm' - fakeError.code = 'ERR_FS_EISDIR' - fakeError.path = path - throw fakeError - } - } - delete mockFiles[path] - } - } else { - const fakeError = new Error( - `Error: ENOENT: no such file or directory, stat '${path}'` - ) - fakeError.errno = -2 - fakeError.syscall = 'stat' - fakeError.code = 'ENOENT' - fakeError.path = path - throw fakeError - } -} - -fs.unlinkSync = (path) => { - if (path in mockFiles) { - delete mockFiles[path] - } else { - const fakeError = new Error( - `Error: ENOENT: no such file or directory, stat '${path}'` - ) - fakeError.errno = -2 - fakeError.syscall = 'unlink' - fakeError.code = 'ENOENT' - fakeError.path = path - throw fakeError - } -} - -fs.existsSync = (path) => { - return path in mockFiles -} - -fs.copyFileSync = (src, dist) => { - fs.writeFileSync(dist, fs.readFileSync(src)) -} - -fs.readdirSync = (path) => { - if (!fs.existsSync(path)) { - const fakeError = new Error( - `Error: ENOENT: no such file or directory, scandir '${path}'` - ) - fakeError.errno = -2 - fakeError.syscall = 'scandir' - fakeError.code = 'ENOENT' - fakeError.path = path - throw fakeError - } - - if (mockFiles[path] !== undefined) { - const fakeError = new Error( - `Error: ENOTDIR: not a directory, scandir '${path}'` - ) - fakeError.errno = -20 - fakeError.syscall = 'scandir' - fakeError.code = 'ENOTDIR' - fakeError.path = path - throw fakeError - } - - const content = [] - Object.keys(mockFiles).forEach((mockedPath) => { - const childPath = mockedPath.substring(path.length + 1) - if ( - mockedPath.startsWith(path) && - !childPath.includes(pathSeparator) && - childPath - ) { - content.push(childPath) - } - }) - return content -} - -fs.mkdirSync = (path, options = {}) => { - if (options.recursive) { - makeParentDirs(path) - } - // Directories are represented as paths with an "undefined" value - fs.writeFileSync(path, undefined) -} - -fs.rmdirSync = (path, options = {}) => { - if (!fs.existsSync(path)) { - const fakeError = new Error( - `Error: ENOENT: no such file or directory, rmdir '${path}'` - ) - fakeError.errno = -2 - fakeError.syscall = 'rmdir' - fakeError.code = 'ENOENT' - fakeError.path = path - throw fakeError - } - - if (mockFiles[path] !== undefined) { - const fakeError = new Error( - `Error: ENOTDIR: not a directory, rmdir '${path}'` - ) - fakeError.errno = -20 - fakeError.syscall = 'rmdir' - fakeError.code = 'ENOTDIR' - fakeError.path = path - throw fakeError - } - - fs.rmSync(path, options) -} - -module.exports = fs diff --git a/packages/auth-providers/supertokens/setup/jest.config.js b/packages/auth-providers/supertokens/setup/jest.config.js deleted file mode 100644 index dee127c25474..000000000000 --- a/packages/auth-providers/supertokens/setup/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/supertokens/setup/package.json b/packages/auth-providers/supertokens/setup/package.json index c44702cc29c1..d85a20039801 100644 --- a/packages/auth-providers/supertokens/setup/package.json +++ b/packages/auth-providers/supertokens/setup/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src --passWithNoTests", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -31,8 +31,9 @@ "@babel/cli": "7.23.4", "@babel/core": "^7.22.20", "@types/yargs": "17.0.32", - "jest": "29.7.0", - "typescript": "5.3.3" + "memfs": "4.6.0", + "typescript": "5.3.3", + "vitest": "1.2.1" }, "gitHead": "3905ed045508b861b495f8d5630d76c7a157d8f1" } diff --git a/packages/auth-providers/supertokens/setup/src/__tests__/setup.test.ts b/packages/auth-providers/supertokens/setup/src/__tests__/setup.test.ts index 7c108e1d2eb8..32d8a9fc0cac 100644 --- a/packages/auth-providers/supertokens/setup/src/__tests__/setup.test.ts +++ b/packages/auth-providers/supertokens/setup/src/__tests__/setup.test.ts @@ -1,10 +1,12 @@ +import { vi, test, expect } from 'vitest' + import { command, description, builder, handler } from '../setup' // mock Telemetry for CLI commands so they don't try to spawn a process -jest.mock('@redwoodjs/telemetry', () => { +vi.mock('@redwoodjs/telemetry', () => { return { - errorTelemetry: () => jest.fn(), - timedTelemetry: () => jest.fn(), + errorTelemetry: () => vi.fn(), + timedTelemetry: () => vi.fn(), } }) diff --git a/packages/auth-providers/supertokens/setup/src/__tests__/setupHandler.test.ts b/packages/auth-providers/supertokens/setup/src/__tests__/setupHandler.test.ts index 6789d79d940c..a19692eee4e4 100644 --- a/packages/auth-providers/supertokens/setup/src/__tests__/setupHandler.test.ts +++ b/packages/auth-providers/supertokens/setup/src/__tests__/setupHandler.test.ts @@ -1,12 +1,12 @@ // mock Telemetry for CLI commands so they don't try to spawn a process -jest.mock('@redwoodjs/telemetry', () => { +vi.mock('@redwoodjs/telemetry', () => { return { - errorTelemetry: () => jest.fn(), - timedTelemetry: () => jest.fn(), + errorTelemetry: () => vi.fn(), + timedTelemetry: () => vi.fn(), } }) -jest.mock('@redwoodjs/cli-helpers', () => { +vi.mock('@redwoodjs/cli-helpers', () => { return { getPaths: () => { return { @@ -18,24 +18,22 @@ jest.mock('@redwoodjs/cli-helpers', () => { base: '', } }, - standardAuthHandler: () => jest.fn(), + standardAuthHandler: () => vi.fn(), } }) -// This will load packages/auth-providers/supertokens/setup/__mocks__/fs.js -jest.mock('fs') - -const mockFS = fs as unknown as Omit, 'readdirSync'> & { - __setMockFiles: (files: Record) => void -} +vi.mock('fs', async () => ({ default: (await import('memfs')).fs })) import fs from 'fs' +import { vol } from 'memfs' +import { vi, describe, it, expect } from 'vitest' + import { addRoutingLogic } from '../setupHandler' describe('addRoutingLogic', () => { it('modifies the Routes.{jsx,tsx} file', () => { - mockFS.__setMockFiles({ + vol.fromJSON({ 'Routes.tsx': "// In this file, all Page components from 'src/pages' are auto-imported.\n" + ` @@ -59,7 +57,7 @@ export default Routes addRoutingLogic.task() - expect(mockFS.readFileSync('Routes.tsx')).toMatchInlineSnapshot(` + expect(fs.readFileSync('Routes.tsx', 'utf-8')).toMatchInlineSnapshot(` "// In this file, all Page components from 'src/pages' are auto-imported. import { canHandleRoute, getRoutingComponent } from 'supertokens-auth-react/ui' @@ -88,7 +86,7 @@ export default Routes }) it('handles a Routes.{jsx,tsx} file with a legacy setup', () => { - mockFS.__setMockFiles({ + vol.fromJSON({ 'Routes.tsx': "// In this file, all Page components from 'src/pages' are auto-imported.\n" + ` @@ -118,7 +116,7 @@ export default Routes addRoutingLogic.task() - expect(mockFS.readFileSync('Routes.tsx')).toMatchInlineSnapshot(` + expect(fs.readFileSync('Routes.tsx', 'utf-8')).toMatchInlineSnapshot(` "// In this file, all Page components from 'src/pages' are auto-imported. @@ -134,7 +132,7 @@ export default Routes return getRoutingComponent(PreBuiltUI) } - + return ( diff --git a/packages/auth-providers/supertokens/setup/vitest.config.mts b/packages/auth-providers/supertokens/setup/vitest.config.mts new file mode 100644 index 000000000000..4c8730d4808b --- /dev/null +++ b/packages/auth-providers/supertokens/setup/vitest.config.mts @@ -0,0 +1,7 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + }, +}) diff --git a/packages/auth-providers/supertokens/web/jest.config.js b/packages/auth-providers/supertokens/web/jest.config.js deleted file mode 100644 index e691bb8f6dbd..000000000000 --- a/packages/auth-providers/supertokens/web/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @type {import('@jest/types').Config.InitialOptions} */ -module.exports = { - testEnvironment: 'jest-environment-jsdom', - testPathIgnorePatterns: ['fixtures', 'dist'], -} diff --git a/packages/auth-providers/supertokens/web/package.json b/packages/auth-providers/supertokens/web/package.json index 423f4ff54c7c..43d43e261621 100644 --- a/packages/auth-providers/supertokens/web/package.json +++ b/packages/auth-providers/supertokens/web/package.json @@ -19,8 +19,8 @@ "build:types": "tsc --build --verbose", "build:watch": "nodemon --watch src --ext \"js,jsx,ts,tsx,template\" --ignore dist --exec \"yarn build\"", "prepublishOnly": "NODE_ENV=production yarn build", - "test": "jest src", - "test:watch": "yarn test --watch" + "test": "vitest run src", + "test:watch": "vitest watch src" }, "dependencies": { "@babel/runtime-corejs3": "7.23.6", @@ -31,10 +31,10 @@ "@babel/cli": "7.23.4", "@babel/core": "^7.22.20", "@types/react": "18.2.37", - "jest": "29.7.0", "react": "0.0.0-experimental-e5205658f-20230913", "supertokens-auth-react": "0.34.0", - "typescript": "5.3.3" + "typescript": "5.3.3", + "vitest": "1.2.1" }, "peerDependencies": { "supertokens-auth-react": "0.34.0" diff --git a/packages/auth-providers/supertokens/web/src/__tests__/supertokens.test.tsx b/packages/auth-providers/supertokens/web/src/__tests__/supertokens.test.tsx index a740b41134e9..d20fdb9df410 100644 --- a/packages/auth-providers/supertokens/web/src/__tests__/supertokens.test.tsx +++ b/packages/auth-providers/supertokens/web/src/__tests__/supertokens.test.tsx @@ -1,4 +1,5 @@ import { renderHook, act } from '@testing-library/react' +import { vi, it, expect, beforeAll, beforeEach, describe } from 'vitest' import type { CurrentUser } from '@redwoodjs/auth' @@ -49,7 +50,7 @@ const superTokensMockClient: SuperTokensAuth = { }, } -const fetchMock = jest.fn() +const fetchMock = vi.fn() fetchMock.mockImplementation(async (_url, options) => { const body = options?.body ? JSON.parse(options.body) : {} diff --git a/packages/auth-providers/supertokens/web/vitest.config.mts b/packages/auth-providers/supertokens/web/vitest.config.mts new file mode 100644 index 000000000000..52ec6b09db8f --- /dev/null +++ b/packages/auth-providers/supertokens/web/vitest.config.mts @@ -0,0 +1,8 @@ +import { defineConfig, configDefaults } from 'vitest/config' + +export default defineConfig({ + test: { + exclude: [...configDefaults.exclude, '**/fixtures'], + environment: 'jsdom', + }, +}) diff --git a/yarn.lock b/yarn.lock index 41c9d6b4866e..6f8001bd4a4e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7596,10 +7596,10 @@ __metadata: "@redwoodjs/api": "npm:6.0.7" "@types/jsonwebtoken": "npm:9.0.5" core-js: "npm:3.34.0" - jest: "npm:29.7.0" jsonwebtoken: "npm:9.0.2" jwks-rsa: "npm:3.1.0" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -7613,8 +7613,8 @@ __metadata: "@redwoodjs/cli-helpers": "npm:6.0.7" "@types/yargs": "npm:17.0.32" core-js: "npm:3.34.0" - jest: "npm:29.7.0" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -7629,9 +7629,9 @@ __metadata: "@redwoodjs/auth": "npm:6.0.7" "@types/react": "npm:18.2.37" core-js: "npm:3.34.0" - jest: "npm:29.7.0" react: "npm:0.0.0-experimental-e5205658f-20230913" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" peerDependencies: "@auth0/auth0-spa-js": 2.1.2 languageName: unknown @@ -7648,10 +7648,10 @@ __metadata: "@types/aws-lambda": "npm:8.10.126" "@types/jsonwebtoken": "npm:9.0.5" core-js: "npm:3.34.0" - jest: "npm:29.7.0" jsonwebtoken: "npm:9.0.2" jwks-rsa: "npm:3.1.0" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -7665,8 +7665,8 @@ __metadata: "@redwoodjs/cli-helpers": "npm:6.0.7" "@types/yargs": "npm:17.0.32" core-js: "npm:3.34.0" - jest: "npm:29.7.0" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -7682,9 +7682,9 @@ __metadata: "@types/netlify-identity-widget": "npm:1.9.6" "@types/react": "npm:18.2.37" core-js: "npm:3.34.0" - jest: "npm:29.7.0" react: "npm:0.0.0-experimental-e5205658f-20230913" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" peerDependencies: "@azure/msal-browser": 2.38.3 languageName: unknown @@ -7701,8 +7701,8 @@ __metadata: "@redwoodjs/api": "npm:6.0.7" "@types/aws-lambda": "npm:8.10.126" core-js: "npm:3.34.0" - jest: "npm:29.7.0" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -7716,7 +7716,6 @@ __metadata: "@redwoodjs/cli-helpers": "npm:6.0.7" "@types/yargs": "npm:17.0.32" core-js: "npm:3.34.0" - jest: "npm:29.7.0" typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -7733,9 +7732,9 @@ __metadata: "@redwoodjs/auth": "npm:6.0.7" "@types/react": "npm:18.2.37" core-js: "npm:3.34.0" - jest: "npm:29.7.0" react: "npm:0.0.0-experimental-e5205658f-20230913" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" peerDependencies: "@clerk/clerk-react": 4.28.3 languageName: unknown @@ -7751,8 +7750,8 @@ __metadata: "@redwoodjs/cli-helpers": "npm:6.0.7" "@types/yargs": "npm:17.0.32" core-js: "npm:3.34.0" - jest: "npm:29.7.0" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -7770,10 +7769,10 @@ __metadata: "@types/uuid": "npm:9.0.7" base64url: "npm:3.0.1" core-js: "npm:3.34.0" - jest: "npm:29.7.0" md5: "npm:2.3.0" typescript: "npm:5.3.3" uuid: "npm:9.0.1" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -7789,7 +7788,6 @@ __metadata: "@simplewebauthn/typescript-types": "npm:7.4.0" "@types/yargs": "npm:17.0.32" core-js: "npm:3.34.0" - jest: "npm:29.7.0" prompts: "npm:2.4.2" terminal-link: "npm:2.1.1" typescript: "npm:5.3.3" @@ -7825,8 +7823,8 @@ __metadata: "@types/aws-lambda": "npm:8.10.126" core-js: "npm:3.34.0" firebase-admin: "npm:11.11.0" - jest: "npm:29.7.0" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -7840,8 +7838,8 @@ __metadata: "@redwoodjs/cli-helpers": "npm:6.0.7" "@types/yargs": "npm:17.0.32" core-js: "npm:3.34.0" - jest: "npm:29.7.0" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -7875,9 +7873,9 @@ __metadata: "@types/aws-lambda": "npm:8.10.126" "@types/jsonwebtoken": "npm:9.0.5" core-js: "npm:3.34.0" - jest: "npm:29.7.0" jsonwebtoken: "npm:9.0.2" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -7891,8 +7889,8 @@ __metadata: "@redwoodjs/cli-helpers": "npm:6.0.7" "@types/yargs": "npm:17.0.32" core-js: "npm:3.34.0" - jest: "npm:29.7.0" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -7907,9 +7905,9 @@ __metadata: "@types/netlify-identity-widget": "npm:1.9.6" "@types/react": "npm:18.2.37" core-js: "npm:3.34.0" - jest: "npm:29.7.0" react: "npm:0.0.0-experimental-e5205658f-20230913" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" peerDependencies: netlify-identity-widget: 1.9.2 languageName: unknown @@ -7926,9 +7924,9 @@ __metadata: "@types/aws-lambda": "npm:8.10.126" "@types/jsonwebtoken": "npm:9.0.5" core-js: "npm:3.34.0" - jest: "npm:29.7.0" jsonwebtoken: "npm:9.0.2" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -7942,7 +7940,6 @@ __metadata: "@redwoodjs/cli-helpers": "npm:6.0.7" "@types/yargs": "npm:17.0.32" core-js: "npm:3.34.0" - jest: "npm:29.7.0" typescript: "npm:5.3.3" languageName: unknown linkType: soft @@ -7957,9 +7954,9 @@ __metadata: "@supabase/supabase-js": "npm:2.39.0" "@types/react": "npm:18.2.37" core-js: "npm:3.34.0" - jest: "npm:29.7.0" react: "npm:0.0.0-experimental-e5205658f-20230913" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" peerDependencies: "@supabase/supabase-js": 2.39.0 languageName: unknown @@ -7975,10 +7972,10 @@ __metadata: "@redwoodjs/api": "npm:6.0.7" "@types/jsonwebtoken": "npm:9.0.5" core-js: "npm:3.34.0" - jest: "npm:29.7.0" jsonwebtoken: "npm:9.0.2" jwks-rsa: "npm:3.1.0" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" peerDependencies: supertokens-node: 15.2.1 languageName: unknown @@ -7994,8 +7991,9 @@ __metadata: "@redwoodjs/cli-helpers": "npm:6.0.7" "@types/yargs": "npm:17.0.32" core-js: "npm:3.34.0" - jest: "npm:29.7.0" + memfs: "npm:4.6.0" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" languageName: unknown linkType: soft @@ -8009,10 +8007,10 @@ __metadata: "@redwoodjs/auth": "npm:6.0.7" "@types/react": "npm:18.2.37" core-js: "npm:3.34.0" - jest: "npm:29.7.0" react: "npm:0.0.0-experimental-e5205658f-20230913" supertokens-auth-react: "npm:0.34.0" typescript: "npm:5.3.3" + vitest: "npm:1.2.1" peerDependencies: supertokens-auth-react: 0.34.0 languageName: unknown