36 lines
1.2 KiB
JavaScript
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();
|
|
}
|