Files
diegosouzapw--omniroute/tests/unit/db-migrationrunner-constants-split.test.ts
2026-07-13 13:39:12 +08:00

111 lines
4.3 KiB
TypeScript

/**
* Characterization / snapshot test: migrationRunner.ts god-file decomposition.
*
* The static migration-compatibility data tables were extracted verbatim from
* src/lib/db/migrationRunner.ts into the pure-data leaf
* src/lib/db/migrationRunner/constants.ts (no imports, no DB, no behaviour).
*
* These tables drive the reconciliation / dedup / already-applied detection
* paths in runMigrations(). The existing db-migration-runner.test.ts proves the
* BEHAVIOUR is unchanged; this test PINS THE DATA so a bad move (a dropped row,
* a transposed version, a corrupted sentinel) is caught immediately — the data
* is the thing the move could silently break.
*
* Pure value assertions — no DB handle is opened.
*/
import { describe, it } from "node:test";
import assert from "node:assert/strict";
import {
RENAMED_MIGRATION_COMPATIBILITY,
LEGACY_VERSION_SLOT_MIGRATIONS,
SUPERSEDED_DUPLICATE_MIGRATIONS,
PHYSICAL_SCHEMA_SENTINELS,
INITIAL_SCHEMA_SENTINELS,
OPTIONAL_FTS5_MIGRATION_VERSIONS,
} from "../../src/lib/db/migrationRunner/constants.ts";
// ── small tables — full snapshot ─────────────────────────────────────────────
describe("migrationRunner/constants — exact small-table snapshots", () => {
it("LEGACY_VERSION_SLOT_MIGRATIONS is the 9-entry list, in order", () => {
assert.deepEqual(
LEGACY_VERSION_SLOT_MIGRATIONS.map((m) => `${m.version}:${m.name}`),
[
"028:evals_tables",
"029:webhooks_templates",
"030:mcp_scopes_api_keys",
"031:api_keys_expires",
"032:detailed_logs_warnings",
"033:provider_connections_block_extra_usage",
"033:add_batch_id_to_call_logs",
"046:remove_status_from_files",
"051:remove_status_from_files",
]
);
});
it("SUPERSEDED_DUPLICATE_MIGRATIONS is the single 041→050 session_account_affinity entry", () => {
assert.deepEqual(SUPERSEDED_DUPLICATE_MIGRATIONS, [
{
version: "041",
name: "session_account_affinity",
supersededByVersion: "050",
supersededByName: "session_account_affinity",
},
]);
});
it("INITIAL_SCHEMA_SENTINELS pins the three baseline tables", () => {
assert.deepEqual(INITIAL_SCHEMA_SENTINELS, ["provider_connections", "combos", "call_logs"]);
});
it("OPTIONAL_FTS5_MIGRATION_VERSIONS is exactly {022, 023}", () => {
assert.ok(OPTIONAL_FTS5_MIGRATION_VERSIONS instanceof Set);
assert.deepEqual([...OPTIONAL_FTS5_MIGRATION_VERSIONS].sort(), ["022", "023"]);
});
});
// ── large tables — count + shape + spot-checks (corruption guard) ─────────────
describe("migrationRunner/constants — large-table integrity", () => {
it("RENAMED_MIGRATION_COMPATIBILITY has 10 well-formed entries", () => {
assert.equal(RENAMED_MIGRATION_COMPATIBILITY.length, 10);
for (const e of RENAMED_MIGRATION_COMPATIBILITY) {
assert.equal(typeof e.fromVersion, "string");
assert.equal(typeof e.fromName, "string");
assert.equal(typeof e.toVersion, "string");
assert.equal(typeof e.toName, "string");
}
});
it("RENAMED_MIGRATION_COMPATIBILITY spot-checks the boundary renames", () => {
const first = RENAMED_MIGRATION_COMPATIBILITY[0];
assert.deepEqual(first, {
fromVersion: "022",
fromName: "call_logs_summary_storage",
toVersion: "025",
toName: "call_logs_summary_storage",
});
// both manifest_routing collisions (052→059 and 056→059) must survive
const manifest = RENAMED_MIGRATION_COMPATIBILITY.filter((e) => e.toName === "manifest_routing");
assert.deepEqual(manifest.map((e) => e.fromVersion).sort(), ["052", "056"]);
});
it("PHYSICAL_SCHEMA_SENTINELS has 15 well-formed entries incl. the newest 064", () => {
assert.equal(PHYSICAL_SCHEMA_SENTINELS.length, 15);
for (const e of PHYSICAL_SCHEMA_SENTINELS) {
assert.equal(typeof e.version, "string");
assert.equal(typeof e.tableName, "string");
assert.equal(typeof e.description, "string");
}
const byVersion = Object.fromEntries(
PHYSICAL_SCHEMA_SENTINELS.map((e) => [e.version, e.tableName])
);
assert.equal(byVersion["064"], "session_model_history");
assert.equal(byVersion["002"], "mcp_tool_audit");
assert.equal(byVersion["028"], "batches");
});
});