Files

65 lines
2.0 KiB
TypeScript
Raw Permalink Normal View History

/**
* Integration Test Setup
* Provides shared utilities and fixtures for integration tests
*/
import { FastifyInstance } from 'fastify';
import { getPool } from '@the-order/database';
export interface TestContext {
identityService: FastifyInstance;
intakeService: FastifyInstance;
financeService: FastifyInstance;
dataroomService: FastifyInstance;
dbPool: ReturnType<typeof getPool>;
}
export async function setupTestContext(): Promise<TestContext> {
// Import services dynamically to avoid circular dependencies
const { createServer: createIdentityServer } = await import('../../services/identity/src/index');
const { createServer: createIntakeServer } = await import('../../services/intake/src/index');
const { createServer: createFinanceServer } = await import('../../services/finance/src/index');
const { createServer: createDataroomServer } = await import('../../services/dataroom/src/index');
const identityService = await createIdentityServer();
const intakeService = await createIntakeServer();
const financeService = await createFinanceServer();
const dataroomService = await createDataroomServer();
await Promise.all([
identityService.ready(),
intakeService.ready(),
financeService.ready(),
dataroomService.ready(),
]);
const dbPool = getPool({
connectionString: process.env.TEST_DATABASE_URL || process.env.DATABASE_URL || '',
});
return {
identityService,
intakeService,
financeService,
dataroomService,
dbPool,
};
}
export async function teardownTestContext(context: TestContext): Promise<void> {
await Promise.all([
context.identityService.close(),
context.intakeService.close(),
context.financeService.close(),
context.dataroomService.close(),
]);
await context.dbPool.end();
}
export async function cleanupDatabase(pool: ReturnType<typeof getPool>): Promise<void> {
// Clean up test data
await pool.query('TRUNCATE TABLE credentials, documents, payments, deals CASCADE');
}