First commit, phased 1 and 2 created but untested
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const os = require('os');
|
||||
|
||||
let tmpDir;
|
||||
let dbPath;
|
||||
let server;
|
||||
|
||||
function createFreshApp() {
|
||||
process.env.DB_PATH = dbPath;
|
||||
|
||||
const cached = [
|
||||
require.resolve('../src/db'),
|
||||
require.resolve('../src/config'),
|
||||
require.resolve('../src/middleware/session'),
|
||||
require.resolve('../src/services/authService'),
|
||||
require.resolve('../src/app'),
|
||||
require.resolve('../scripts/migrate'),
|
||||
];
|
||||
for (const id of cached) {
|
||||
if (require.cache[id]) delete require.cache[id];
|
||||
}
|
||||
|
||||
const { runMigrations } = require('../scripts/migrate');
|
||||
runMigrations();
|
||||
|
||||
const { createApp } = require('../src/app');
|
||||
return createApp();
|
||||
}
|
||||
|
||||
async function setup() {
|
||||
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'emberfall-test-'));
|
||||
dbPath = path.join(tmpDir, 'test.db');
|
||||
|
||||
const app = createFreshApp();
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
server = app.listen(0, () => {
|
||||
const port = server.address().port;
|
||||
resolve(`http://localhost:${port}`);
|
||||
});
|
||||
server.on('error', reject);
|
||||
});
|
||||
}
|
||||
|
||||
function teardown() {
|
||||
return new Promise((resolve) => {
|
||||
if (server) {
|
||||
// Force-close all connections and the server to avoid hanging on session store interval
|
||||
try { server.closeAllConnections(); } catch (_) {}
|
||||
server.close(() => {
|
||||
server = null;
|
||||
resolve();
|
||||
});
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function cleanup() {
|
||||
if (tmpDir && fs.existsSync(tmpDir)) {
|
||||
try { fs.rmSync(tmpDir, { recursive: true }); } catch (_) {}
|
||||
}
|
||||
tmpDir = undefined;
|
||||
dbPath = undefined;
|
||||
}
|
||||
|
||||
module.exports = { setup, teardown, cleanup };
|
||||
Reference in New Issue
Block a user