import config from "config"; import MysqlConnectionManager from "../src/db/MysqlConnectionManager.js"; import TestApp from "../src/TestApp.js"; import {setupMailServer, teardownMailServer} from "./_mail_server.js"; export default function useApp(appSupplier: AppSupplier): () => T { let app: T; beforeAll(async () => { await MysqlConnectionManager.prepare(); await MysqlConnectionManager.query('DROP DATABASE IF EXISTS ' + config.get('mysql.database')); await MysqlConnectionManager.endPool(); await setupMailServer(); app = await appSupplier('127.0.0.1', 8966); await app.start(); }); afterAll(async () => { const errors = []; try { await app.stop(); } catch (e) { errors.push(e); } try { await teardownMailServer(); } catch (e) { errors.push(e); } if (errors.length > 0) throw errors; }); return () => app; } export type AppSupplier = (addr: string, port: number) => Promise;