feat(tests): update test configurations and improve mocking setup
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
"dev": "bun run --hot src/server.ts",
|
"dev": "bun run --hot src/server.ts",
|
||||||
"start": "bun src/server.ts",
|
"start": "bun src/server.ts",
|
||||||
"build": "tsc -b",
|
"build": "tsc -b",
|
||||||
"test": "bun test",
|
"test": "bun test --preload ./test/support/prisma.mock.ts ./test",
|
||||||
"lint": "biome check .",
|
"lint": "biome check .",
|
||||||
"lint:fix": "biome check --write .",
|
"lint:fix": "biome check --write .",
|
||||||
"format": "biome format --write .",
|
"format": "biome format --write .",
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { beforeEach, expect, mock, test } from 'bun:test';
|
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';
|
import type { InviteComplexUserResponse } from '@repo/api-contract';
|
||||||
|
|
||||||
const inviteComplexUserMock = mock(async () => undefined as unknown as InviteComplexUserResponse);
|
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({
|
const inviteComplexUserHandler = createInviteComplexUserHandler({
|
||||||
inviteComplexUser: inviteComplexUserMock,
|
inviteComplexUser: inviteComplexUserMock,
|
||||||
ComplexMembersError: MockComplexMembersError,
|
ComplexMembersError: MockComplexMembersError,
|
||||||
@@ -59,7 +62,6 @@ function createContext(input: {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
inviteComplexUserMock.mockReset();
|
inviteComplexUserMock.mockReset();
|
||||||
mock.clearAllMocks();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('returns 201 with the service result', async () => {
|
test('returns 201 with the service result', async () => {
|
||||||
|
|||||||
@@ -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';
|
import { prismaMock, sendMailMock, transactionMock } from '../support/prisma.mock';
|
||||||
|
|
||||||
|
const { ComplexMembersError, inviteComplexUser } = await import(
|
||||||
|
'@/modules/complex/services/complex-members.service'
|
||||||
|
);
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
prismaMock._reset();
|
prismaMock._reset();
|
||||||
mock.clearAllMocks();
|
sendMailMock.mockClear();
|
||||||
|
transactionMock.mockClear();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('creates a pending invitation and sends the email', async () => {
|
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',
|
complexId: 'complex-1',
|
||||||
email: 'new.member@example.com',
|
email: 'new.member@example.com',
|
||||||
tokenHash: 'token-hash',
|
tokenHash: 'token-hash',
|
||||||
expiresAt: new Date('2026-04-29T00:00:00.000Z'),
|
expiresAt: new Date('2027-01-01T00:00:00.000Z'),
|
||||||
acceptedAt: null,
|
acceptedAt: null,
|
||||||
revokedAt: null,
|
revokedAt: null,
|
||||||
createdAt: new Date('2026-04-22T00:00:00.000Z'),
|
createdAt: new Date('2026-12-01T00:00:00.000Z'),
|
||||||
} as never);
|
} as never);
|
||||||
|
|
||||||
const result = await inviteComplexUser('admin-1', 'complex-1', {
|
const result = await inviteComplexUser('admin-1', 'complex-1', {
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ function createContext(body: unknown) {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
createSportMock.mockReset();
|
createSportMock.mockReset();
|
||||||
mock.clearAllMocks();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test('returns 201 with the created sport', async () => {
|
test('returns 201 with the created sport', async () => {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ import type { PrismaClient } from '@/generated/prisma/client';
|
|||||||
import type { PrismaClientMock } from 'bun-mock-prisma';
|
import type { PrismaClientMock } from 'bun-mock-prisma';
|
||||||
|
|
||||||
const prismaMock = createPrismaMock<PrismaClient>() as PrismaClientMock<PrismaClient>;
|
const prismaMock = createPrismaMock<PrismaClient>() as PrismaClientMock<PrismaClient>;
|
||||||
const uuidV7Mock = mock(() => '00000000-0000-4000-8000-000000000001');
|
|
||||||
|
|
||||||
mock.module('@/lib/prisma', () => ({
|
mock.module('@/lib/prisma', () => ({
|
||||||
__esModule: true,
|
__esModule: true,
|
||||||
@@ -15,10 +14,7 @@ mock.module('@/lib/prisma', () => ({
|
|||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
||||||
mock.module('uuid', () => ({
|
const { uuidV7Mock } = await import('../support/prisma.mock');
|
||||||
__esModule: true,
|
|
||||||
v7: uuidV7Mock,
|
|
||||||
}));
|
|
||||||
|
|
||||||
const { createSport, getSportById, listSports, updateSport } = await import(
|
const { createSport, getSportById, listSports, updateSport } = await import(
|
||||||
'@/modules/sport/services/sport.service'
|
'@/modules/sport/services/sport.service'
|
||||||
@@ -26,7 +22,7 @@ const { createSport, getSportById, listSports, updateSport } = await import(
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
prismaMock._reset();
|
prismaMock._reset();
|
||||||
mock.clearAllMocks();
|
uuidV7Mock.mockClear();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('listSports returns sports ordered by name', async () => {
|
test('listSports returns sports ordered by name', async () => {
|
||||||
|
|||||||
@@ -33,3 +33,10 @@ mock.module('@/lib/mailer', () => ({
|
|||||||
__esModule: true,
|
__esModule: true,
|
||||||
sendMail: sendMailMock,
|
sendMail: sendMailMock,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
export const uuidV7Mock = mock(() => '00000000-0000-4000-8000-000000000001');
|
||||||
|
|
||||||
|
mock.module('uuid', () => ({
|
||||||
|
__esModule: true,
|
||||||
|
v7: uuidV7Mock,
|
||||||
|
}));
|
||||||
|
|||||||
2
bunfig.toml
Normal file
2
bunfig.toml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
[test]
|
||||||
|
preload = ["./apps/backend/test/support/prisma.mock.ts"]
|
||||||
@@ -19,7 +19,8 @@
|
|||||||
"lint:frontend": "bun --filter frontend lint",
|
"lint:frontend": "bun --filter frontend lint",
|
||||||
"lint:frontend:fix": "bun --filter frontend lint:fix",
|
"lint:frontend:fix": "bun --filter frontend lint:fix",
|
||||||
"lint:backend": "bun --filter backend lint",
|
"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": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "^1.9.4",
|
"@biomejs/biome": "^1.9.4",
|
||||||
|
|||||||
Reference in New Issue
Block a user