feat: complete Phase 4 combat/hunting system
- Add content migration (003_content.sql): zones, monsters, items, loot tables - Add inventory migration (004_inventory.sql) and logs migration (006_logs.sql) - Add Mulberry32 PRNG (src/utils/rng.js) for deterministic combat - Add combat system (src/game/combat.js) with turn order, crit, mage bonus, 20-round cap - Add rewards/loot system (src/game/rewards.js) and leveling (src/game/leveling.js) - Add hunt endpoint (POST /api/hunt) with full combat flow in DB transaction - Add hunt integration tests and unit tests for rewards/leveling/combat - Fix session middleware to use memory store in tests (avoids cleanup hang) - Fix huntService transaction (db.transaction() returns wrapper, must call separately) - Add huntService to helpers.js cache invalidation for test isolation
This commit is contained in:
+17
-1
@@ -5,6 +5,7 @@ const os = require('os');
|
||||
let tmpDir;
|
||||
let dbPath;
|
||||
let server;
|
||||
let dbRef;
|
||||
|
||||
function createFreshApp() {
|
||||
process.env.DB_PATH = dbPath;
|
||||
@@ -14,6 +15,7 @@ function createFreshApp() {
|
||||
require.resolve('../src/config'),
|
||||
require.resolve('../src/middleware/session'),
|
||||
require.resolve('../src/services/authService'),
|
||||
require.resolve('../src/services/huntService'),
|
||||
require.resolve('../src/app'),
|
||||
require.resolve('../scripts/migrate'),
|
||||
];
|
||||
@@ -24,6 +26,10 @@ function createFreshApp() {
|
||||
const { runMigrations } = require('../scripts/migrate');
|
||||
runMigrations();
|
||||
|
||||
// Capture the DB instance before creating the app (session store uses it)
|
||||
const dbModule = require('../src/db');
|
||||
dbRef = dbModule.getDb();
|
||||
|
||||
const { createApp } = require('../src/app');
|
||||
return createApp();
|
||||
}
|
||||
@@ -46,13 +52,23 @@ async function setup() {
|
||||
function teardown() {
|
||||
return new Promise((resolve) => {
|
||||
if (server) {
|
||||
// Force-close all connections and the server to avoid hanging on session store interval
|
||||
// Close server first to stop accepting connections
|
||||
try { server.closeAllConnections(); } catch (_) {}
|
||||
server.close(() => {
|
||||
server = null;
|
||||
// Then close DB to stop session store's cleanup interval
|
||||
if (dbRef) {
|
||||
try { dbRef.close(); } catch (_) {}
|
||||
dbRef = null;
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
} else {
|
||||
// No server, just close DB
|
||||
if (dbRef) {
|
||||
try { dbRef.close(); } catch (_) {}
|
||||
dbRef = null;
|
||||
}
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user