diff --git a/apps/backend/package.json b/apps/backend/package.json index f482c65..4905b44 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -4,7 +4,7 @@ "dev": "bun run --hot src/server.ts", "start": "bun src/server.ts", "build": "tsc -b", - "test": "bun test", + "test": "bun test --preload ./test/support/prisma.mock.ts ./test", "lint": "biome check .", "lint:fix": "biome check --write .", "format": "biome format --write .", diff --git a/apps/backend/test/complex/invite-complex-user.handler.test.ts b/apps/backend/test/complex/invite-complex-user.handler.test.ts index 6277a66..5e7ee33 100644 --- a/apps/backend/test/complex/invite-complex-user.handler.test.ts +++ b/apps/backend/test/complex/invite-complex-user.handler.test.ts @@ -1,6 +1,5 @@ import { beforeEach, expect, mock, test } from 'bun:test'; -import { createInviteComplexUserHandler } from '@/modules/complex/handlers/invite-complex-user.handler'; import type { InviteComplexUserResponse } from '@repo/api-contract'; const inviteComplexUserMock = mock(async () => undefined as unknown as InviteComplexUserResponse); @@ -15,6 +14,10 @@ class MockComplexMembersError extends Error { } } +const { createInviteComplexUserHandler } = await import( + '@/modules/complex/handlers/invite-complex-user.handler' +); + const inviteComplexUserHandler = createInviteComplexUserHandler({ inviteComplexUser: inviteComplexUserMock, ComplexMembersError: MockComplexMembersError, @@ -59,7 +62,6 @@ function createContext(input: { beforeEach(() => { inviteComplexUserMock.mockReset(); - mock.clearAllMocks(); }); test('returns 201 with the service result', async () => { diff --git a/apps/backend/test/complex/invite-complex-user.test.ts b/apps/backend/test/complex/invite-complex-user.test.ts index 10d59ec..9d13302 100644 --- a/apps/backend/test/complex/invite-complex-user.test.ts +++ b/apps/backend/test/complex/invite-complex-user.test.ts @@ -1,14 +1,15 @@ -import { beforeEach, expect, mock, test } from 'bun:test'; +import { beforeEach, expect, test } from 'bun:test'; -import { - ComplexMembersError, - inviteComplexUser, -} from '@/modules/complex/services/complex-members.service'; import { prismaMock, sendMailMock, transactionMock } from '../support/prisma.mock'; +const { ComplexMembersError, inviteComplexUser } = await import( + '@/modules/complex/services/complex-members.service' +); + beforeEach(() => { prismaMock._reset(); - mock.clearAllMocks(); + sendMailMock.mockClear(); + transactionMock.mockClear(); }); test('creates a pending invitation and sends the email', async () => { @@ -21,10 +22,10 @@ test('creates a pending invitation and sends the email', async () => { complexId: 'complex-1', email: 'new.member@example.com', tokenHash: 'token-hash', - expiresAt: new Date('2026-04-29T00:00:00.000Z'), + expiresAt: new Date('2027-01-01T00:00:00.000Z'), acceptedAt: null, revokedAt: null, - createdAt: new Date('2026-04-22T00:00:00.000Z'), + createdAt: new Date('2026-12-01T00:00:00.000Z'), } as never); const result = await inviteComplexUser('admin-1', 'complex-1', { diff --git a/apps/backend/test/sport/create-sport.handler.test.ts b/apps/backend/test/sport/create-sport.handler.test.ts index 6b4a2b5..5cff821 100644 --- a/apps/backend/test/sport/create-sport.handler.test.ts +++ b/apps/backend/test/sport/create-sport.handler.test.ts @@ -49,7 +49,6 @@ function createContext(body: unknown) { beforeEach(() => { createSportMock.mockReset(); - mock.clearAllMocks(); }); test('returns 201 with the created sport', async () => { diff --git a/apps/backend/test/sport/sport.service.test.ts b/apps/backend/test/sport/sport.service.test.ts index 92e4f81..8fc85d9 100644 --- a/apps/backend/test/sport/sport.service.test.ts +++ b/apps/backend/test/sport/sport.service.test.ts @@ -6,7 +6,6 @@ import type { PrismaClient } from '@/generated/prisma/client'; import type { PrismaClientMock } from 'bun-mock-prisma'; const prismaMock = createPrismaMock() as PrismaClientMock; -const uuidV7Mock = mock(() => '00000000-0000-4000-8000-000000000001'); mock.module('@/lib/prisma', () => ({ __esModule: true, @@ -15,10 +14,7 @@ mock.module('@/lib/prisma', () => ({ }, })); -mock.module('uuid', () => ({ - __esModule: true, - v7: uuidV7Mock, -})); +const { uuidV7Mock } = await import('../support/prisma.mock'); const { createSport, getSportById, listSports, updateSport } = await import( '@/modules/sport/services/sport.service' @@ -26,7 +22,7 @@ const { createSport, getSportById, listSports, updateSport } = await import( beforeEach(() => { prismaMock._reset(); - mock.clearAllMocks(); + uuidV7Mock.mockClear(); }); test('listSports returns sports ordered by name', async () => { diff --git a/apps/backend/test/support/prisma.mock.ts b/apps/backend/test/support/prisma.mock.ts index 3f706a4..8249478 100644 --- a/apps/backend/test/support/prisma.mock.ts +++ b/apps/backend/test/support/prisma.mock.ts @@ -33,3 +33,10 @@ mock.module('@/lib/mailer', () => ({ __esModule: true, sendMail: sendMailMock, })); + +export const uuidV7Mock = mock(() => '00000000-0000-4000-8000-000000000001'); + +mock.module('uuid', () => ({ + __esModule: true, + v7: uuidV7Mock, +})); diff --git a/bunfig.toml b/bunfig.toml new file mode 100644 index 0000000..1ef362d --- /dev/null +++ b/bunfig.toml @@ -0,0 +1,2 @@ +[test] +preload = ["./apps/backend/test/support/prisma.mock.ts"] diff --git a/package.json b/package.json index c2be90e..c33d2ca 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "lint:frontend": "bun --filter frontend lint", "lint:frontend:fix": "bun --filter frontend lint:fix", "lint:backend": "bun --filter backend lint", - "lint:backend:fix": "bun --filter backend lint:fix" + "lint:backend:fix": "bun --filter backend lint:fix", + "test": "bun --filter backend test" }, "devDependencies": { "@biomejs/biome": "^1.9.4",