Refactor to vertical slice
This commit is contained in:
@@ -1,26 +1,17 @@
|
||||
import { beforeEach, expect, mock, test } from 'bun:test';
|
||||
|
||||
import { Errors } from '@/lib/errors';
|
||||
import { err, ok } from '@/lib/result';
|
||||
import type { InviteComplexUserResponse } from '@repo/api-contract';
|
||||
|
||||
const inviteComplexUserMock = mock(async () => undefined as unknown as InviteComplexUserResponse);
|
||||
|
||||
class MockComplexMembersError extends Error {
|
||||
status: 400 | 403 | 404 | 409;
|
||||
|
||||
constructor(message: string, status: 400 | 403 | 404 | 409 = 400) {
|
||||
super(message);
|
||||
this.name = 'ComplexMembersError';
|
||||
this.status = status;
|
||||
}
|
||||
}
|
||||
|
||||
const { createInviteComplexUserHandler } = await import(
|
||||
'@/modules/complex/handlers/invite-complex-user.handler'
|
||||
'@/modules/complex/features/invite-complex-user/invite-complex-user.handler'
|
||||
);
|
||||
|
||||
const inviteComplexUserHandler = createInviteComplexUserHandler({
|
||||
inviteComplexUser: inviteComplexUserMock,
|
||||
ComplexMembersError: MockComplexMembersError,
|
||||
});
|
||||
|
||||
type HandlerContext = {
|
||||
@@ -78,7 +69,7 @@ test('returns 201 with the service result', async () => {
|
||||
},
|
||||
} as const;
|
||||
|
||||
inviteComplexUserMock.mockResolvedValue(serviceResult);
|
||||
inviteComplexUserMock.mockResolvedValue(ok(serviceResult));
|
||||
|
||||
const { c, json } = createContext({
|
||||
userId: 'admin-1',
|
||||
@@ -99,8 +90,8 @@ test('returns 201 with the service result', async () => {
|
||||
});
|
||||
|
||||
test('maps ComplexMembersError to an error response', async () => {
|
||||
inviteComplexUserMock.mockRejectedValue(
|
||||
new MockComplexMembersError('Solo un ADMIN puede administrar usuarios.', 403)
|
||||
inviteComplexUserMock.mockResolvedValue(
|
||||
err(Errors.forbidden('Solo un ADMIN puede administrar usuarios.'))
|
||||
);
|
||||
|
||||
const { c, json } = createContext({
|
||||
@@ -117,8 +108,11 @@ test('maps ComplexMembersError to an error response', async () => {
|
||||
{ email: 'new.member@example.com' }
|
||||
);
|
||||
expect(json.mock.calls[0]?.[0]).toEqual({
|
||||
message: 'Solo un ADMIN puede administrar usuarios.',
|
||||
type: 'https://api.myapp.dev/problems/forbidden',
|
||||
title: 'Forbidden',
|
||||
status: 403,
|
||||
detail: 'Solo un ADMIN puede administrar usuarios.',
|
||||
});
|
||||
expect(json.mock.calls[0]?.[1]).toEqual({ status: 403 });
|
||||
expect(json.mock.calls[0]?.[1]).toBe(403);
|
||||
expect(response).toBeDefined();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user