refactor league module (wip)
This commit is contained in:
48
apps/api/src/domain/dashboard/DashboardService.test.ts
Normal file
48
apps/api/src/domain/dashboard/DashboardService.test.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import { vi } from 'vitest';
|
||||
import { DashboardService } from './DashboardService';
|
||||
import { DashboardOverviewUseCase } from '@core/racing/application/use-cases/DashboardOverviewUseCase';
|
||||
import type { Logger } from '@core/shared/application/Logger';
|
||||
import { DashboardOverviewPresenter } from './presenters/DashboardOverviewPresenter';
|
||||
|
||||
describe('DashboardService', () => {
|
||||
let service: DashboardService;
|
||||
let mockUseCase: ReturnType<typeof vi.mocked<DashboardOverviewUseCase>>;
|
||||
let mockPresenter: ReturnType<typeof vi.mocked<DashboardOverviewPresenter>>;
|
||||
let mockLogger: ReturnType<typeof vi.mocked<Logger>>;
|
||||
|
||||
beforeEach(() => {
|
||||
mockUseCase = {
|
||||
execute: vi.fn(),
|
||||
} as any;
|
||||
|
||||
mockPresenter = {
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(),
|
||||
} as any;
|
||||
|
||||
mockLogger = {
|
||||
debug: vi.fn(),
|
||||
info: vi.fn(),
|
||||
warn: vi.fn(),
|
||||
error: vi.fn(),
|
||||
} as any;
|
||||
|
||||
service = new DashboardService(
|
||||
mockLogger,
|
||||
mockUseCase,
|
||||
mockPresenter
|
||||
);
|
||||
});
|
||||
|
||||
it('should get dashboard overview', async () => {
|
||||
const mockResult = { totalUsers: 100 };
|
||||
mockUseCase.execute.mockResolvedValue(undefined);
|
||||
mockPresenter.getResponseModel.mockReturnValue(mockResult);
|
||||
|
||||
const result = await service.getDashboardOverview('driver-1');
|
||||
|
||||
expect(mockUseCase.execute).toHaveBeenCalledWith({ driverId: 'driver-1' });
|
||||
expect(mockPresenter.getResponseModel).toHaveBeenCalled();
|
||||
expect(result).toBe(mockResult);
|
||||
});
|
||||
});
|
||||
@@ -7,27 +7,20 @@ import { DashboardOverviewPresenter } from './presenters/DashboardOverviewPresen
|
||||
import type { Logger } from '@core/shared/application/Logger';
|
||||
|
||||
// Tokens
|
||||
import { DASHBOARD_OVERVIEW_USE_CASE_TOKEN, LOGGER_TOKEN } from './DashboardProviders';
|
||||
import { DASHBOARD_OVERVIEW_USE_CASE_TOKEN, LOGGER_TOKEN, DASHBOARD_OVERVIEW_OUTPUT_PORT_TOKEN } from './DashboardProviders';
|
||||
|
||||
@Injectable()
|
||||
export class DashboardService {
|
||||
private readonly presenter = new DashboardOverviewPresenter();
|
||||
|
||||
constructor(
|
||||
@Inject(LOGGER_TOKEN) private readonly logger: Logger,
|
||||
@Inject(DASHBOARD_OVERVIEW_USE_CASE_TOKEN) private readonly dashboardOverviewUseCase: DashboardOverviewUseCase,
|
||||
@Inject(DASHBOARD_OVERVIEW_OUTPUT_PORT_TOKEN) private readonly presenter: DashboardOverviewPresenter,
|
||||
) {}
|
||||
|
||||
async getDashboardOverview(driverId: string): Promise<DashboardOverviewDTO> {
|
||||
this.logger.debug('[DashboardService] Getting dashboard overview:', { driverId });
|
||||
|
||||
const result = await this.dashboardOverviewUseCase.execute({ driverId });
|
||||
|
||||
if (result.isErr()) {
|
||||
throw new Error(result.unwrapErr().details?.message ?? 'Failed to get dashboard overview');
|
||||
}
|
||||
|
||||
this.presenter.present(result);
|
||||
await this.dashboardOverviewUseCase.execute({ driverId });
|
||||
|
||||
return this.presenter.getResponseModel();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user