mirror of
https://github.com/colanode/colanode.git
synced 2026-02-24 11:59:53 +01:00
67 lines
1.7 KiB
TypeScript
67 lines
1.7 KiB
TypeScript
import os from 'node:os';
|
|
import path from 'node:path';
|
|
import { writeFile } from 'node:fs/promises';
|
|
|
|
import { PostgreSqlContainer } from '@testcontainers/postgresql';
|
|
import { RedisContainer } from '@testcontainers/redis';
|
|
|
|
type TestEnvConfig = {
|
|
POSTGRES_URL: string;
|
|
REDIS_URL: string;
|
|
CONFIG: string;
|
|
NODE_ENV: string;
|
|
};
|
|
|
|
const ENV_PATH = path.join(os.tmpdir(), 'colanode-test-env.json');
|
|
const CONFIG_PATH = path.join(os.tmpdir(), 'colanode-test-config.json');
|
|
|
|
export default async function globalSetup() {
|
|
const postgres = await new PostgreSqlContainer('pgvector/pgvector:pg17')
|
|
.withDatabase('colanode_test')
|
|
.withUsername('postgres')
|
|
.withPassword('postgres')
|
|
.start();
|
|
|
|
const redis = await new RedisContainer('redis:7-alpine').start();
|
|
|
|
const testConfig = {
|
|
mode: 'standalone',
|
|
logging: { level: 'silent' },
|
|
email: { enabled: false },
|
|
jobs: {
|
|
nodeUpdatesMerge: { enabled: false },
|
|
documentUpdatesMerge: { enabled: false },
|
|
cleanup: { enabled: false },
|
|
},
|
|
storage: {
|
|
tus: { locker: { type: 'memory' }, cache: { type: 'none' } },
|
|
provider: {
|
|
type: 'file',
|
|
directory: path.join(os.tmpdir(), 'colanode-test-storage'),
|
|
},
|
|
},
|
|
};
|
|
|
|
await writeFile(CONFIG_PATH, JSON.stringify(testConfig));
|
|
|
|
const envConfig: TestEnvConfig = {
|
|
POSTGRES_URL: postgres.getConnectionUri(),
|
|
REDIS_URL: redis.getConnectionUrl(),
|
|
CONFIG: CONFIG_PATH,
|
|
NODE_ENV: 'test',
|
|
};
|
|
|
|
await writeFile(ENV_PATH, JSON.stringify(envConfig));
|
|
|
|
Object.assign(process.env, envConfig);
|
|
|
|
const { migrate, database } = await import('../src/data/database');
|
|
await migrate();
|
|
await database.destroy();
|
|
|
|
return async () => {
|
|
await redis.stop();
|
|
await postgres.stop();
|
|
};
|
|
}
|