Files
ln-bi/src/server/routes/asset-assistant/gaps.test.ts
T

27 lines
1.3 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import pool from "../../db.js";
import { gapStore } from "./gaps.js";
test("demand storage reuses a precreated table, deduplicates, binds ownership and purges expired records", async (t) => {
const calls: { sql: string; params: unknown[] }[] = [];
t.mock.method(pool, "query", async (sql: string, params: unknown[] = []) => {
calls.push({ sql, params });
return [[], []];
});
await gapStore.record("user-A", "预测 库存", "unsupported");
await gapStore.record("user-A", "预测 库存", "unsupported");
const writes = calls.filter((c) => c.sql.includes("INSERT INTO"));
assert.equal(writes.length, 2);
assert.deepEqual(writes[0].params, writes[1].params);
assert.match(writes[0].sql, /ON DUPLICATE KEY UPDATE/);
assert.match(writes[0].sql, /status='resolved'/);
assert.ok(!calls.some((c) => c.sql.includes("CREATE TABLE")));
await gapStore.list("user-A");
const list = calls.find((c) => c.sql.includes("ORDER BY"))!;
assert.match(list.sql, /WHERE user_id = \?/);
assert.deepEqual(list.params, ["user-A"]);
assert.ok(calls.some((c) => c.sql.includes("INTERVAL 90 DAY")));
await gapStore.update(1, "planned");
assert.deepEqual(calls.at(-1)?.params, ["planned", 1]);
});