@accounter/server
Version:
Accounter GraphQL server
71 lines (70 loc) • 2.24 kB
TypeScript
/**
* Fixture validation logic
*
* Validates fixture referential integrity and required fields before insertion.
* Ensures that all foreign key references point to entities that exist within
* the fixture, preventing database constraint violations.
*
* @see packages/server/src/__tests__/helpers/fixture-types.ts for fixture structure
* @see packages/server/src/__tests__/helpers/fixture-loader.ts for insertion logic
*/
import type { Fixture } from './fixture-types.js';
/**
* Validation result for successful validation
*/
export interface ValidationSuccess {
ok: true;
}
/**
* Validation result for failed validation
*/
export interface ValidationFailure {
ok: false;
errors: string[];
}
/**
* Result of fixture validation
*/
export type ValidationResult = ValidationSuccess | ValidationFailure;
/**
* Validate a fixture for referential integrity and required fields
*
* Checks:
* 1. All charge references are valid (transactions → charges, documents → charges)
* 2. All business references are valid (charges → businesses, transactions → businesses, documents → businesses)
* 3. All account references are valid (transactions → accounts)
* 4. All tax category references are valid (charges → tax categories)
* 5. Required fields are present
*
* @param fixture - The fixture to validate
* @returns Validation result with ok=true or ok=false with error list
*
* @example
* ```typescript
* const result = validateFixture(expenseScenarioA);
* if (!result.ok) {
* console.error('Validation errors:', result.errors);
* throw new Error('Invalid fixture');
* }
* ```
*/
export declare function validateFixture(fixture: Fixture): ValidationResult;
/**
* Validate a fixture and throw if invalid
*
* Convenience wrapper around validateFixture that throws an error
* with a formatted message if validation fails.
*
* @param fixture - The fixture to validate
* @throws {Error} If validation fails
*
* @example
* ```typescript
* // Throws if invalid
* assertValidFixture(expenseScenarioA);
*
* // Continues if valid
* await insertFixture(client, expenseScenarioA);
* ```
*/
export declare function assertValidFixture(fixture: Fixture): asserts fixture is Fixture;