Files

24 lines
1.1 KiB
TypeScript

import {before,after} from 'node:test';
import {randomUUID} from 'node:crypto';
import {Pool} from 'pg';
import {closeDatabase} from '../lib/store.ts';
export function useTestDatabase(label:string){
let url:string,schema:string;
before(async()=>{
if(!process.env.TEST_DATABASE_URL)throw new Error('Tests require a dedicated local TEST_DATABASE_URL');
const target=new URL(process.env.TEST_DATABASE_URL);
if(!['127.0.0.1','localhost'].includes(target.hostname)||target.pathname!=='/sverka_test')throw new Error('Tests must use the isolated local sverka_test database');
schema='sverka_test_'+label+'_'+randomUUID().replaceAll('-','');url=target.href;
const admin=new Pool({connectionString:url});
try{await admin.query(`CREATE SCHEMA "${schema}"`);}finally{await admin.end();}
target.searchParams.set('options','-c search_path='+schema);process.env.DATABASE_URL=target.href;
});
after(async()=>{
await closeDatabase();
if(!url||!schema)return;
const admin=new Pool({connectionString:url});
try{await admin.query(`DROP SCHEMA "${schema}" CASCADE`);}finally{await admin.end();}
});
}