/** * @file Verifies db.js renames `dashboard_runs.router` (before the AI Router → * AI Proxy rename) to `proxy` in place, keeping each run's value, so a resume * still goes back to the proxy its session last ran on. * @author Nguyễn Ngọc Trí Vĩ */ const { describe, it, before, after } = require("node:test"); const assert = require("node:assert/strict"); const path = require("path"); const fs = require("fs"); const os = require("os"); const Database = require("better-sqlite3"); let TEST_DB; before(() => { TEST_DB = path.join(os.tmpdir(), `dashboard-runs-router-${Date.now()}-${process.pid}.db`); process.env.DASHBOARD_DB_PATH = TEST_DB; const raw = new Database(TEST_DB); raw.exec(` CREATE TABLE dashboard_runs ( id TEXT PRIMARY KEY, session_id TEXT, mode TEXT, cwd TEXT NOT NULL, model TEXT, permission_mode TEXT, effort TEXT, resume_session_id TEXT, prompt_preview TEXT, status TEXT NOT NULL, exit_code INTEGER, started_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')), ended_at TEXT, router TEXT ); `); raw .prepare( "INSERT INTO dashboard_runs (id, session_id, cwd, status, router) VALUES (?, ?, ?, ?, ?)" ) .run("agenthub-lane-1", "sess-1", "/tmp/x", "completed", "9router"); raw.close(); }); after(() => { for (const suffix of ["", "-wal", "-shm", "-migrate.lock"]) { fs.rmSync(TEST_DB + suffix, { force: true }); } }); describe("dashboard_runs.router → proxy", () => { it("renames the column and keeps the value", () => { const { db } = require("../db"); const cols = db .prepare("PRAGMA table_info(dashboard_runs)") .all() .map((c) => c.name); assert.ok(cols.includes("proxy")); assert.ok(!cols.includes("router")); assert.equal(require("../lib/dashboard-runs").proxyForSession("sess-1"), "9router"); }); });