league service
This commit is contained in:
102
tests/application/CompleteDriverOnboardingUseCase.spec.ts
Normal file
102
tests/application/CompleteDriverOnboardingUseCase.spec.ts
Normal file
@@ -0,0 +1,102 @@
|
||||
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
||||
import { CompleteDriverOnboardingUseCase } from '../../core/racing/application/use-cases/CompleteDriverOnboardingUseCase';
|
||||
import { IDriverRepository } from '../../core/racing/domain/repositories/IDriverRepository';
|
||||
import { CompleteOnboardingPresenter } from '../../apps/api/src/modules/driver/presenters/CompleteOnboardingPresenter';
|
||||
|
||||
describe('CompleteDriverOnboardingUseCase', () => {
|
||||
let useCase: CompleteDriverOnboardingUseCase;
|
||||
let driverRepository: { findById: any; save: any };
|
||||
|
||||
beforeEach(() => {
|
||||
driverRepository = {
|
||||
findById: vi.fn(),
|
||||
save: vi.fn(),
|
||||
};
|
||||
useCase = new CompleteDriverOnboardingUseCase(driverRepository as IDriverRepository);
|
||||
});
|
||||
|
||||
describe('execute', () => {
|
||||
it('should create a new driver and return success', async () => {
|
||||
const input = {
|
||||
userId: 'user-123',
|
||||
firstName: 'John',
|
||||
lastName: 'Doe',
|
||||
displayName: 'John Doe',
|
||||
country: 'US',
|
||||
timezone: 'America/New_York',
|
||||
bio: 'Racing enthusiast',
|
||||
};
|
||||
|
||||
driverRepository.findById.mockResolvedValue(null); // Driver doesn't exist
|
||||
driverRepository.save.mockResolvedValue(undefined);
|
||||
|
||||
const presenter = new CompleteOnboardingPresenter();
|
||||
|
||||
await useCase.execute(input, presenter);
|
||||
|
||||
expect(driverRepository.findById).toHaveBeenCalledWith('user-123');
|
||||
expect(driverRepository.save).toHaveBeenCalledWith(
|
||||
expect.objectContaining({
|
||||
id: 'user-123',
|
||||
iracingId: 'user-123',
|
||||
name: 'John Doe',
|
||||
country: 'US',
|
||||
bio: 'Racing enthusiast',
|
||||
})
|
||||
);
|
||||
expect(presenter.viewModel).toEqual({
|
||||
success: true,
|
||||
driverId: 'user-123',
|
||||
errorMessage: undefined,
|
||||
});
|
||||
});
|
||||
|
||||
it('should return error if driver already exists', async () => {
|
||||
const input = {
|
||||
userId: 'user-123',
|
||||
firstName: 'John',
|
||||
lastName: 'Doe',
|
||||
displayName: 'John Doe',
|
||||
country: 'US',
|
||||
};
|
||||
|
||||
const existingDriver = {
|
||||
id: 'user-123',
|
||||
name: 'Existing Driver',
|
||||
};
|
||||
|
||||
driverRepository.findById.mockResolvedValue(existingDriver);
|
||||
|
||||
const presenter = new CompleteOnboardingPresenter();
|
||||
|
||||
await useCase.execute(input, presenter);
|
||||
|
||||
expect(driverRepository.findById).toHaveBeenCalledWith('user-123');
|
||||
expect(driverRepository.save).not.toHaveBeenCalled();
|
||||
expect(presenter.viewModel).toEqual({
|
||||
success: false,
|
||||
driverId: undefined,
|
||||
errorMessage: 'Driver already exists',
|
||||
});
|
||||
});
|
||||
|
||||
it('should handle domain validation errors', async () => {
|
||||
const input = {
|
||||
userId: 'user-123',
|
||||
firstName: 'John',
|
||||
lastName: 'Doe',
|
||||
displayName: 'John Doe',
|
||||
country: 'INVALID', // Invalid country code
|
||||
};
|
||||
|
||||
driverRepository.findById.mockResolvedValue(null);
|
||||
|
||||
const presenter = new CompleteOnboardingPresenter();
|
||||
|
||||
await useCase.execute(input, presenter);
|
||||
|
||||
expect(presenter.viewModel.success).toBe(false);
|
||||
expect(presenter.viewModel.errorMessage).toContain('Country must be a valid ISO code');
|
||||
});
|
||||
});
|
||||
});
|
||||
33
tests/application/GetTotalDriversUseCase.spec.ts
Normal file
33
tests/application/GetTotalDriversUseCase.spec.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
||||
import { GetTotalDriversUseCase } from '../../core/racing/application/use-cases/GetTotalDriversUseCase';
|
||||
import { IDriverRepository } from '../../core/racing/domain/repositories/IDriverRepository';
|
||||
import { DriverStatsPresenter } from '../../apps/api/src/modules/driver/presenters/DriverStatsPresenter';
|
||||
|
||||
describe('GetTotalDriversUseCase', () => {
|
||||
let useCase: GetTotalDriversUseCase;
|
||||
let driverRepository: { findAll: any };
|
||||
|
||||
beforeEach(() => {
|
||||
driverRepository = {
|
||||
findAll: vi.fn(),
|
||||
};
|
||||
useCase = new GetTotalDriversUseCase(driverRepository as IDriverRepository);
|
||||
});
|
||||
|
||||
it('should return total drivers count', async () => {
|
||||
// Arrange
|
||||
const mockDrivers = [
|
||||
{ id: '1', name: 'Driver 1' },
|
||||
{ id: '2', name: 'Driver 2' },
|
||||
];
|
||||
driverRepository.findAll.mockResolvedValue(mockDrivers);
|
||||
const presenter = new DriverStatsPresenter();
|
||||
|
||||
// Act
|
||||
await useCase.execute(undefined, presenter);
|
||||
|
||||
// Assert
|
||||
expect(driverRepository.findAll).toHaveBeenCalled();
|
||||
expect(presenter.viewModel).toEqual({ totalDrivers: 2 });
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user