refactor use cases

This commit is contained in:
2026-01-08 15:34:51 +01:00
parent d984ab24a8
commit 52e9a2f6a7
362 changed files with 5192 additions and 8409 deletions

View File

@@ -1,5 +1,5 @@
import { describe, it, expect, vi, type Mock } from 'vitest';
import type { Logger, UseCaseOutputPort } from '@core/shared/application';
import type { Logger } from '@core/shared/application';
import { Result } from '@core/shared/application/Result';
import type { ApplicationErrorCode } from '@core/shared/errors/ApplicationErrorCode';
import {
@@ -16,16 +16,10 @@ vi.mock('uuid', () => ({
v4: () => 'request-1',
}));
interface TestOutputPort extends UseCaseOutputPort<RequestAvatarGenerationResult> {
present: Mock;
result?: RequestAvatarGenerationResult;
}
describe('RequestAvatarGenerationUseCase', () => {
let avatarRepo: { save: Mock };
let faceValidation: { validateFacePhoto: Mock };
let avatarGeneration: { generateAvatars: Mock };
let output: TestOutputPort;
let logger: Logger;
let useCase: RequestAvatarGenerationUseCase;
@@ -42,12 +36,6 @@ describe('RequestAvatarGenerationUseCase', () => {
generateAvatars: vi.fn(),
};
output = {
present: vi.fn((result: RequestAvatarGenerationResult) => {
output.result = result;
}),
} as unknown as TestOutputPort;
logger = {
debug: vi.fn(),
info: vi.fn(),
@@ -59,12 +47,11 @@ describe('RequestAvatarGenerationUseCase', () => {
avatarRepo as unknown as IAvatarGenerationRepository,
faceValidation as unknown as FaceValidationPort,
avatarGeneration as unknown as AvatarGenerationPort,
output,
logger,
);
});
it('completes generation and presents avatar URLs', async () => {
it('returns RequestAvatarGenerationResult on success', async () => {
faceValidation.validateFacePhoto.mockResolvedValue({
isValid: true,
hasFace: true,
@@ -92,7 +79,8 @@ describe('RequestAvatarGenerationUseCase', () => {
expect(avatarGeneration.generateAvatars).toHaveBeenCalled();
expect(avatarRepo.save).toHaveBeenCalledTimes(4);
expect(output.present).toHaveBeenCalledWith({
const successResult = result.unwrap();
expect(successResult).toEqual({
requestId: 'request-1',
status: 'completed',
avatarUrls: ['https://example.com/a.png', 'https://example.com/b.png'],
@@ -113,7 +101,7 @@ describe('RequestAvatarGenerationUseCase', () => {
suitColor: 'red' as unknown as RequestAvatarGenerationInput['suitColor'],
};
const result: Result<void, ApplicationErrorCode<RequestAvatarGenerationErrorCode, { message: string }>> =
const result: Result<RequestAvatarGenerationResult, ApplicationErrorCode<RequestAvatarGenerationErrorCode, { message: string }>> =
await useCase.execute(input);
expect(result.isErr()).toBe(true);
@@ -122,7 +110,6 @@ describe('RequestAvatarGenerationUseCase', () => {
expect(err.details?.message).toBe('Bad image');
expect(avatarGeneration.generateAvatars).not.toHaveBeenCalled();
expect(output.present).not.toHaveBeenCalled();
expect(avatarRepo.save).toHaveBeenCalledTimes(3);
});
@@ -145,7 +132,7 @@ describe('RequestAvatarGenerationUseCase', () => {
suitColor: 'red' as unknown as RequestAvatarGenerationInput['suitColor'],
};
const result: Result<void, ApplicationErrorCode<RequestAvatarGenerationErrorCode, { message: string }>> =
const result: Result<RequestAvatarGenerationResult, ApplicationErrorCode<RequestAvatarGenerationErrorCode, { message: string }>> =
await useCase.execute(input);
expect(result.isErr()).toBe(true);
@@ -153,7 +140,6 @@ describe('RequestAvatarGenerationUseCase', () => {
expect(err.code).toBe('GENERATION_FAILED');
expect(err.details?.message).toBe('Generation service down');
expect(output.present).not.toHaveBeenCalled();
expect(avatarRepo.save).toHaveBeenCalledTimes(4);
});
@@ -166,7 +152,7 @@ describe('RequestAvatarGenerationUseCase', () => {
suitColor: 'red' as unknown as RequestAvatarGenerationInput['suitColor'],
};
const result: Result<void, ApplicationErrorCode<RequestAvatarGenerationErrorCode, { message: string }>> =
const result: Result<RequestAvatarGenerationResult, ApplicationErrorCode<RequestAvatarGenerationErrorCode, { message: string }>> =
await useCase.execute(input);
expect(result.isErr()).toBe(true);
@@ -174,7 +160,6 @@ describe('RequestAvatarGenerationUseCase', () => {
expect(err.code).toBe('REPOSITORY_ERROR');
expect(err.details?.message).toBe('DB error');
expect(output.present).not.toHaveBeenCalled();
expect((logger.error as unknown as Mock)).toHaveBeenCalled();
});
});