Files
gridpilot.gg/tests/integration/database/integrity/data-integrity.integration.test.ts
Marc Mintel 09632d004d
Some checks failed
CI / lint-typecheck (pull_request) Failing after 12s
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
code quality
2026-01-26 22:16:33 +01:00

86 lines
2.8 KiB
TypeScript

import { describe, it, expect, beforeEach } from 'vitest';
import { DatabaseTestContext, DriverData } from '../DatabaseTestContext';
describe('Database Constraints - Data Integrity After Failed Operations', () => {
let context: DatabaseTestContext;
beforeEach(() => {
context = DatabaseTestContext.create();
});
it('should maintain repository state after 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 valid team is created
const validTeamResult = await context.createTeamUseCase.execute({
name: 'Valid Team',
tag: 'VT',
description: 'Valid team',
ownerId: driver.id,
leagues: [],
});
expect(validTeamResult.isOk()).toBe(true);
// When: Attempt to create duplicate team (should fail)
const duplicateResult = await context.createTeamUseCase.execute({
name: 'Valid Team',
tag: 'VT',
description: 'Duplicate team',
ownerId: driver.id,
leagues: [],
});
expect(duplicateResult.isErr()).toBe(true);
// Then: Original team should still exist and be retrievable
const teams = await context.teamRepository.findAll();
expect(teams.length).toBe(1);
expect(teams[0]!.name).toBe('Valid Team');
});
it('should handle multiple failed operations without corruption', async () => {
// Given: A driver and team exist
const driver: DriverData = {
id: 'driver-123',
iracingId: '12345',
name: 'Test Driver',
country: 'US',
joinedAt: new Date(),
};
await context.driverRepository.create(driver);
const team = {
id: 'team-123',
name: 'Test Team',
tag: 'TT',
description: 'A test team',
ownerId: 'other-driver',
leagues: [],
isRecruiting: false,
createdAt: new Date(),
};
await context.teamRepository.create(team);
// When: Multiple failed operations occur
await context.joinTeamUseCase.execute({ teamId: 'non-existent', driverId: driver.id });
await context.joinTeamUseCase.execute({ teamId: team.id, driverId: 'non-existent' });
await context.createTeamUseCase.execute({ name: 'Test Team', tag: 'TT', description: 'Duplicate', ownerId: driver.id, leagues: [] });
// Then: Repositories should remain in valid state
const drivers = await context.driverRepository.findById(driver.id);
const teams = await context.teamRepository.findAll();
const membership = await context.teamMembershipRepository.getMembership(team.id, driver.id);
expect(drivers).not.toBeNull();
expect(teams.length).toBe(1);
expect(membership).toBeNull(); // No successful joins
});
});