website refactor
This commit is contained in:
@@ -1,41 +1,79 @@
|
||||
import { describe, expect, it, vi } from 'vitest';
|
||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||
import { describe, expect, it, vi, beforeEach } from 'vitest';
|
||||
import { Result } from '@core/shared/application/Result';
|
||||
import { DriverService } from './DriverService';
|
||||
|
||||
describe('DriverService', () => {
|
||||
const logger = { debug: vi.fn(), info: vi.fn(), warn: vi.fn(), error: vi.fn() };
|
||||
|
||||
// Mocks for use cases
|
||||
const getDriversLeaderboardUseCase = { execute: vi.fn() };
|
||||
const getTotalDriversUseCase = { execute: vi.fn() };
|
||||
const getDriverLiveriesUseCase = { execute: vi.fn() };
|
||||
const completeDriverOnboardingUseCase = { execute: vi.fn() };
|
||||
const isDriverRegisteredForRaceUseCase = { execute: vi.fn() };
|
||||
const updateDriverProfileUseCase = { execute: vi.fn() };
|
||||
const getProfileOverviewUseCase = { execute: vi.fn() };
|
||||
|
||||
// Mock for repository
|
||||
const driverRepository = { findById: vi.fn() };
|
||||
|
||||
// Mocks for presenters
|
||||
const driversLeaderboardPresenter = { present: vi.fn(), getResponseModel: vi.fn() };
|
||||
const driverStatsPresenter = { present: vi.fn(), getResponseModel: vi.fn() };
|
||||
const completeOnboardingPresenter = { getResponseModel: vi.fn() };
|
||||
const driverRegistrationStatusPresenter = { getResponseModel: vi.fn() };
|
||||
const driverPresenter = { present: vi.fn(), getResponseModel: vi.fn() };
|
||||
const driverProfilePresenter = { getResponseModel: vi.fn() };
|
||||
const getDriverLiveriesPresenter = { present: vi.fn(), getResponseModel: vi.fn() };
|
||||
|
||||
it('getDriversLeaderboard executes use case and returns presenter model', async () => {
|
||||
const getDriversLeaderboardUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const driversLeaderboardPresenter = {
|
||||
setMediaResolver: vi.fn(),
|
||||
setBaseUrl: vi.fn(),
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(() => ({ items: [] }))
|
||||
};
|
||||
const driverPresenter = {
|
||||
setMediaResolver: vi.fn(),
|
||||
setBaseUrl: vi.fn(),
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(() => null)
|
||||
};
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
|
||||
// Default successful responses
|
||||
getDriversLeaderboardUseCase.execute.mockResolvedValue(Result.ok(undefined));
|
||||
getTotalDriversUseCase.execute.mockResolvedValue(Result.ok(undefined));
|
||||
getDriverLiveriesUseCase.execute.mockResolvedValue(Result.ok(undefined));
|
||||
completeDriverOnboardingUseCase.execute.mockResolvedValue(Result.ok(undefined));
|
||||
isDriverRegisteredForRaceUseCase.execute.mockResolvedValue(Result.ok(undefined));
|
||||
updateDriverProfileUseCase.execute.mockResolvedValue(Result.ok(undefined));
|
||||
getProfileOverviewUseCase.execute.mockResolvedValue(Result.ok(undefined));
|
||||
|
||||
driverRepository.findById.mockResolvedValue(null);
|
||||
|
||||
driversLeaderboardPresenter.getResponseModel.mockReturnValue({ items: [] });
|
||||
driverStatsPresenter.getResponseModel.mockReturnValue({ totalDrivers: 0 });
|
||||
completeOnboardingPresenter.getResponseModel.mockReturnValue({ success: true });
|
||||
driverRegistrationStatusPresenter.getResponseModel.mockReturnValue({ isRegistered: false });
|
||||
driverPresenter.getResponseModel.mockReturnValue(null);
|
||||
driverProfilePresenter.getResponseModel.mockReturnValue({ profile: {} });
|
||||
getDriverLiveriesPresenter.getResponseModel.mockReturnValue({ liveries: [] });
|
||||
});
|
||||
|
||||
const service = new DriverService(
|
||||
const createService = () => {
|
||||
return new DriverService(
|
||||
getDriversLeaderboardUseCase as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ findById: vi.fn() } as any,
|
||||
getTotalDriversUseCase as any,
|
||||
getDriverLiveriesUseCase as any,
|
||||
completeDriverOnboardingUseCase as any,
|
||||
isDriverRegisteredForRaceUseCase as any,
|
||||
updateDriverProfileUseCase as any,
|
||||
getProfileOverviewUseCase as any,
|
||||
driverRepository as any,
|
||||
logger as any,
|
||||
driversLeaderboardPresenter as any,
|
||||
{ getResponseModel: vi.fn(() => ({ totalDrivers: 0 })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ success: true })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ isRegistered: false })) } as any,
|
||||
driverStatsPresenter as any,
|
||||
completeOnboardingPresenter as any,
|
||||
driverRegistrationStatusPresenter as any,
|
||||
driverPresenter as any,
|
||||
{ getResponseModel: vi.fn(() => ({ profile: {} })) } as any,
|
||||
driverProfilePresenter as any,
|
||||
getDriverLiveriesPresenter as any,
|
||||
);
|
||||
};
|
||||
|
||||
it('getDriversLeaderboard executes use case and returns presenter model', async () => {
|
||||
const service = createService();
|
||||
driversLeaderboardPresenter.getResponseModel.mockReturnValue({ items: [] });
|
||||
|
||||
await expect(service.getDriversLeaderboard()).resolves.toEqual({ items: [] });
|
||||
expect(getDriversLeaderboardUseCase.execute).toHaveBeenCalledWith({});
|
||||
@@ -43,34 +81,8 @@ describe('DriverService', () => {
|
||||
});
|
||||
|
||||
it('getTotalDrivers executes use case and returns presenter model', async () => {
|
||||
const getTotalDriversUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const driverStatsPresenter = {
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(() => ({ totalDrivers: 123 }))
|
||||
};
|
||||
const driverPresenter = {
|
||||
setMediaResolver: vi.fn(),
|
||||
setBaseUrl: vi.fn(),
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(() => null)
|
||||
};
|
||||
|
||||
const service = new DriverService(
|
||||
{ execute: vi.fn() } as any,
|
||||
getTotalDriversUseCase as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ findById: vi.fn() } as any,
|
||||
logger as any,
|
||||
{ getResponseModel: vi.fn(() => ({ items: [] })) } as any,
|
||||
driverStatsPresenter as any,
|
||||
{ getResponseModel: vi.fn(() => ({ success: true })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ isRegistered: false })) } as any,
|
||||
driverPresenter as any,
|
||||
{ getResponseModel: vi.fn(() => ({ profile: {} })) } as any,
|
||||
);
|
||||
const service = createService();
|
||||
driverStatsPresenter.getResponseModel.mockReturnValue({ totalDrivers: 123 });
|
||||
|
||||
await expect(service.getTotalDrivers()).resolves.toEqual({ totalDrivers: 123 });
|
||||
expect(getTotalDriversUseCase.execute).toHaveBeenCalledWith({});
|
||||
@@ -78,30 +90,7 @@ describe('DriverService', () => {
|
||||
});
|
||||
|
||||
it('completeOnboarding passes optional bio only when provided', async () => {
|
||||
const completeDriverOnboardingUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const driverPresenter = {
|
||||
setMediaResolver: vi.fn(),
|
||||
setBaseUrl: vi.fn(),
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(() => null)
|
||||
};
|
||||
|
||||
const service = new DriverService(
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
completeDriverOnboardingUseCase as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ findById: vi.fn() } as any,
|
||||
logger as any,
|
||||
{ getResponseModel: vi.fn(() => ({ items: [] })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ totalDrivers: 0 })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ success: true })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ isRegistered: false })) } as any,
|
||||
driverPresenter as any,
|
||||
{ getResponseModel: vi.fn(() => ({ profile: {} })) } as any,
|
||||
);
|
||||
const service = createService();
|
||||
|
||||
await service.completeOnboarding('u1', {
|
||||
firstName: 'F',
|
||||
@@ -139,31 +128,8 @@ describe('DriverService', () => {
|
||||
});
|
||||
|
||||
it('getDriverRegistrationStatus passes raceId and driverId and returns presenter model', async () => {
|
||||
const isDriverRegisteredForRaceUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const driverRegistrationStatusPresenter = { getResponseModel: vi.fn(() => ({ isRegistered: true })) };
|
||||
const driverPresenter = {
|
||||
setMediaResolver: vi.fn(),
|
||||
setBaseUrl: vi.fn(),
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(() => null)
|
||||
};
|
||||
|
||||
const service = new DriverService(
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
isDriverRegisteredForRaceUseCase as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ findById: vi.fn() } as any,
|
||||
logger as any,
|
||||
{ getResponseModel: vi.fn(() => ({ items: [] })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ totalDrivers: 0 })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ success: true })) } as any,
|
||||
driverRegistrationStatusPresenter as any,
|
||||
driverPresenter as any,
|
||||
{ getResponseModel: vi.fn(() => ({ profile: {} })) } as any,
|
||||
);
|
||||
const service = createService();
|
||||
driverRegistrationStatusPresenter.getResponseModel.mockReturnValue({ isRegistered: true });
|
||||
|
||||
await expect(
|
||||
service.getDriverRegistrationStatus({ raceId: 'r1', driverId: 'd1' } as any),
|
||||
@@ -174,30 +140,8 @@ describe('DriverService', () => {
|
||||
});
|
||||
|
||||
it('getCurrentDriver calls repository and returns presenter model', async () => {
|
||||
const driverRepository = { findById: vi.fn(async () => null) };
|
||||
const driverPresenter = {
|
||||
setMediaResolver: vi.fn(),
|
||||
setBaseUrl: vi.fn(),
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(() => null)
|
||||
};
|
||||
|
||||
const service = new DriverService(
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
driverRepository as any,
|
||||
logger as any,
|
||||
{ getResponseModel: vi.fn(() => ({ items: [] })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ totalDrivers: 0 })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ success: true })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ isRegistered: false })) } as any,
|
||||
driverPresenter as any,
|
||||
{ getResponseModel: vi.fn(() => ({ profile: {} })) } as any,
|
||||
);
|
||||
const service = createService();
|
||||
driverRepository.findById.mockResolvedValue(null);
|
||||
|
||||
await expect(service.getCurrentDriver('u1')).resolves.toBeNull();
|
||||
expect(driverRepository.findById).toHaveBeenCalledWith('u1');
|
||||
@@ -205,30 +149,8 @@ describe('DriverService', () => {
|
||||
});
|
||||
|
||||
it('updateDriverProfile builds optional input and returns presenter model', async () => {
|
||||
const updateDriverProfileUseCase = { execute: vi.fn(async () => {}) };
|
||||
const driverPresenter = {
|
||||
setMediaResolver: vi.fn(),
|
||||
setBaseUrl: vi.fn(),
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(() => ({ driver: { id: 'd1' } }))
|
||||
};
|
||||
|
||||
const service = new DriverService(
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
updateDriverProfileUseCase as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ findById: vi.fn() } as any,
|
||||
logger as any,
|
||||
{ getResponseModel: vi.fn(() => ({ items: [] })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ totalDrivers: 0 })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ success: true })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ isRegistered: false })) } as any,
|
||||
driverPresenter as any,
|
||||
{ getResponseModel: vi.fn(() => ({ profile: {} })) } as any,
|
||||
);
|
||||
const service = createService();
|
||||
driverPresenter.getResponseModel.mockReturnValue({ driver: { id: 'd1' } });
|
||||
|
||||
await service.updateDriverProfile('d1');
|
||||
expect(updateDriverProfileUseCase.execute).toHaveBeenCalledWith({ driverId: 'd1' });
|
||||
@@ -252,66 +174,16 @@ describe('DriverService', () => {
|
||||
});
|
||||
|
||||
it('getDriver calls repository and returns presenter model', async () => {
|
||||
const driverRepository = { findById: vi.fn(async () => null) };
|
||||
const driverPresenter = {
|
||||
setMediaResolver: vi.fn(),
|
||||
setBaseUrl: vi.fn(),
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(() => null)
|
||||
};
|
||||
|
||||
const service = new DriverService(
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
driverRepository as any,
|
||||
logger as any,
|
||||
{ getResponseModel: vi.fn(() => ({ items: [] })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ totalDrivers: 0 })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ success: true })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ isRegistered: false })) } as any,
|
||||
driverPresenter as any,
|
||||
{ getResponseModel: vi.fn(() => ({ profile: {} })) } as any,
|
||||
);
|
||||
const service = createService();
|
||||
driverRepository.findById.mockResolvedValue(null);
|
||||
|
||||
await expect(service.getDriver('d1')).resolves.toBeNull();
|
||||
expect(driverRepository.findById).toHaveBeenCalledWith('d1');
|
||||
// When driver is not found, presenter is not called
|
||||
});
|
||||
|
||||
it('getDriverProfile executes use case and returns presenter model', async () => {
|
||||
const getProfileOverviewUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const driverProfilePresenter = {
|
||||
setMediaResolver: vi.fn(),
|
||||
setBaseUrl: vi.fn(),
|
||||
getResponseModel: vi.fn(() => ({ profile: { id: 'd1' } }))
|
||||
};
|
||||
const driverPresenter = {
|
||||
setMediaResolver: vi.fn(),
|
||||
setBaseUrl: vi.fn(),
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(() => null)
|
||||
};
|
||||
|
||||
const service = new DriverService(
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
getProfileOverviewUseCase as any,
|
||||
{ findById: vi.fn() } as any,
|
||||
logger as any,
|
||||
{ getResponseModel: vi.fn(() => ({ items: [] })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ totalDrivers: 0 })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ success: true })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ isRegistered: false })) } as any,
|
||||
driverPresenter as any,
|
||||
driverProfilePresenter as any,
|
||||
);
|
||||
const service = createService();
|
||||
driverProfilePresenter.getResponseModel.mockReturnValue({ profile: { id: 'd1' } });
|
||||
|
||||
await expect(service.getDriverProfile('d1')).resolves.toEqual({ profile: { id: 'd1' } });
|
||||
expect(getProfileOverviewUseCase.execute).toHaveBeenCalledWith({ driverId: 'd1' });
|
||||
@@ -319,39 +191,12 @@ describe('DriverService', () => {
|
||||
});
|
||||
|
||||
it('getDriverLiveries executes use case and returns presenter model', async () => {
|
||||
const getDriverLiveriesUseCase = { execute: vi.fn(async () => Result.ok(undefined)) };
|
||||
const getDriverLiveriesPresenter = {
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(() => ({ liveries: [] }))
|
||||
};
|
||||
const driverPresenter = {
|
||||
setMediaResolver: vi.fn(),
|
||||
setBaseUrl: vi.fn(),
|
||||
present: vi.fn(),
|
||||
getResponseModel: vi.fn(() => null)
|
||||
};
|
||||
|
||||
const service = new DriverService(
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
getDriverLiveriesUseCase as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ execute: vi.fn() } as any,
|
||||
{ findById: vi.fn() } as any,
|
||||
logger as any,
|
||||
{ getResponseModel: vi.fn(() => ({ items: [] })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ totalDrivers: 0 })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ success: true })) } as any,
|
||||
{ getResponseModel: vi.fn(() => ({ isRegistered: false })) } as any,
|
||||
driverPresenter as any,
|
||||
{ getResponseModel: vi.fn(() => ({ profile: {} })) } as any,
|
||||
getDriverLiveriesPresenter as any,
|
||||
);
|
||||
const service = createService();
|
||||
getDriverLiveriesPresenter.getResponseModel.mockReturnValue({ liveries: [] });
|
||||
|
||||
await expect(service.getDriverLiveries('d1')).resolves.toEqual({ liveries: [] });
|
||||
expect(getDriverLiveriesUseCase.execute).toHaveBeenCalledWith({ driverId: 'd1' });
|
||||
expect(getDriverLiveriesPresenter.present).toHaveBeenCalled();
|
||||
expect(getDriverLiveriesPresenter.getResponseModel).toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user