PPPAIMT-Crest/backend/test/globalSetup.js

36 lines
1.2 KiB
JavaScript

const TEST_DB = 'ppaimt_crest_test';
export async function setup() {
const dotenv = await import('dotenv');
dotenv.config({ path: new URL('../.env', import.meta.url), quiet: true });
process.env.NODE_ENV = 'test';
process.env.DB_NAME = TEST_DB;
process.env.DATA_ENCRYPTION_KEY = 'BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwc=';
if (!/^[A-Za-z0-9_]+$/.test(TEST_DB)) {
throw new Error('Invalid test database name');
}
if (!process.env.DB_USER) {
throw new Error('DB_USER is required in backend/.env before tests can migrate');
}
const mysql = await import('mysql2/promise');
const connection = await mysql.createConnection({
host: process.env.DB_HOST || '127.0.0.1',
port: Number(process.env.DB_PORT || 3306),
user: process.env.DB_USER,
password: process.env.DB_PASSWORD ?? '',
});
await connection.query(
`CREATE DATABASE IF NOT EXISTS \`${TEST_DB}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci`,
);
await connection.end();
const { default: knex } = await import('knex');
const configModule = await import('../knexfile.js');
const db = knex(configModule.default);
await db.migrate.latest();
await db.destroy();
}