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); }); });