fix issues in core

This commit is contained in:
2025-12-23 11:25:08 +01:00
parent 1efd971032
commit 2854ae3c5c
113 changed files with 1142 additions and 458 deletions

View File

@@ -1,12 +1,15 @@
import { describe, it, expect, vi, type Mock } from 'vitest';
import { CreateAchievementUseCase, type IAchievementRepository } from './CreateAchievementUseCase';
import { Achievement } from '@core/identity/domain/entities/Achievement';
import type { Logger, UseCaseOutputPort } from '@core/shared/application';
describe('CreateAchievementUseCase', () => {
let achievementRepository: {
save: Mock;
findById: Mock;
};
let logger: Logger;
let output: UseCaseOutputPort<any> & { present: Mock };
let useCase: CreateAchievementUseCase;
beforeEach(() => {
@@ -15,7 +18,22 @@ describe('CreateAchievementUseCase', () => {
findById: vi.fn(),
};
useCase = new CreateAchievementUseCase(achievementRepository as unknown as IAchievementRepository);
logger = {
debug: vi.fn(),
info: vi.fn(),
warn: vi.fn(),
error: vi.fn(),
} as unknown as Logger;
output = {
present: vi.fn(),
};
useCase = new CreateAchievementUseCase(
achievementRepository as unknown as IAchievementRepository,
logger,
output,
);
});
it('creates an achievement and persists it', async () => {
@@ -29,9 +47,9 @@ describe('CreateAchievementUseCase', () => {
points: 50,
requirements: [
{
type: 'wins',
type: 'wins' as const,
value: 1,
operator: '>=',
operator: '>=' as const,
},
],
isSecret: false,
@@ -41,13 +59,12 @@ describe('CreateAchievementUseCase', () => {
const result = await useCase.execute(props);
expect(result).toBeInstanceOf(Achievement);
expect(result.id).toBe(props.id);
expect(result.name).toBe(props.name);
expect(result.description).toBe(props.description);
expect(result.category).toBe(props.category);
expect(result.points).toBe(props.points);
expect(result.requirements).toHaveLength(1);
expect(achievementRepository.save).toHaveBeenCalledWith(result);
expect(result.isOk()).toBe(true);
expect(achievementRepository.save).toHaveBeenCalledTimes(1);
const savedAchievement = achievementRepository.save.mock.calls?.[0]?.[0];
expect(savedAchievement).toBeInstanceOf(Achievement);
expect(savedAchievement.id).toBe(props.id);
expect(savedAchievement.name).toBe(props.name);
expect(output.present).toHaveBeenCalledWith({ achievement: savedAchievement });
});
});
});