/** * 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; } export async function setupTestContext(): Promise { // 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 { 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): Promise { // Clean up test data await pool.query('TRUNCATE TABLE credentials, documents, payments, deals CASCADE'); }