65 lines
2.0 KiB
TypeScript
65 lines
2.0 KiB
TypeScript
|
|
/**
|
||
|
|
* 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');
|
||
|
|
}
|
||
|
|
|