Some checks failed
CI / lint-typecheck (pull_request) Failing after 4m51s
CI / tests (pull_request) Has been skipped
CI / contract-tests (pull_request) Has been skipped
CI / e2e-tests (pull_request) Has been skipped
CI / comment-pr (pull_request) Has been skipped
CI / commit-types (pull_request) Has been skipped
73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
import { describe, it, expect, beforeEach } from 'vitest';
|
|
import { DatabaseTestContext, DriverData } from '../DatabaseTestContext';
|
|
|
|
describe('Database Constraints - Error Mapping and Reporting', () => {
|
|
let context: DatabaseTestContext;
|
|
|
|
beforeEach(() => {
|
|
context = DatabaseTestContext.create();
|
|
});
|
|
|
|
it('should provide meaningful error messages for constraint violations', async () => {
|
|
// Given: A driver exists
|
|
const driver: DriverData = {
|
|
id: 'driver-123',
|
|
iracingId: '12345',
|
|
name: 'Test Driver',
|
|
country: 'US',
|
|
joinedAt: new Date(),
|
|
};
|
|
await context.driverRepository.create(driver);
|
|
|
|
// And: A team is created
|
|
await context.createTeamUseCase.execute({
|
|
name: 'Test Team',
|
|
tag: 'TT',
|
|
description: 'Test',
|
|
ownerId: driver.id,
|
|
leagues: [],
|
|
});
|
|
|
|
// When: Attempt to create duplicate
|
|
const result = await context.createTeamUseCase.execute({
|
|
name: 'Test Team',
|
|
tag: 'TT',
|
|
description: 'Duplicate',
|
|
ownerId: driver.id,
|
|
leagues: [],
|
|
});
|
|
|
|
// Then: Error should have clear message
|
|
expect(result.isErr()).toBe(true);
|
|
if (result.isErr()) {
|
|
expect(result.error.details.message).toContain('already belongs to a team');
|
|
}
|
|
});
|
|
|
|
it('should handle repository errors gracefully', async () => {
|
|
// Given: A driver exists
|
|
const driver: DriverData = {
|
|
id: 'driver-123',
|
|
iracingId: '12345',
|
|
name: 'Test Driver',
|
|
country: 'US',
|
|
joinedAt: new Date(),
|
|
};
|
|
await context.driverRepository.create(driver);
|
|
|
|
// When: Repository throws an error (simulated by using invalid data)
|
|
// Note: In real scenario, this would be a database error
|
|
// For this test, we'll verify the error handling path works
|
|
const result = await context.createTeamUseCase.execute({
|
|
name: 'Valid Name',
|
|
tag: 'TT',
|
|
description: 'Test',
|
|
ownerId: 'non-existent',
|
|
leagues: [],
|
|
});
|
|
|
|
// Then: Should handle validation error
|
|
expect(result.isErr()).toBe(true);
|
|
});
|
|
});
|