42 lines
1.7 KiB
JavaScript
42 lines
1.7 KiB
JavaScript
const test = require("node:test");
|
|
const assert = require("node:assert");
|
|
const cp = require("node:child_process");
|
|
const { createRequire } = require("node:module");
|
|
const path = require("node:path");
|
|
|
|
const GATE = path.join(__dirname, "..", "..", "tht-gate.js");
|
|
if (typeof globalThis.require === "undefined") globalThis.require = createRequire(GATE);
|
|
|
|
test("repository write tools persist CTE and final SQL through deterministic tht commands", async () => {
|
|
const calls = [];
|
|
const original = cp.execFileSync;
|
|
cp.execFileSync = (file, args, options) => {
|
|
calls.push({ args, input: options?.input });
|
|
return "";
|
|
};
|
|
try {
|
|
const gate = require(GATE);
|
|
const { createFakePi } = require("./fake_pi_runtime.js");
|
|
const { pi, ctx, tools } = createFakePi();
|
|
ctx.cwd = "/nonexistent-thothii-test-cwd";
|
|
gate.default(pi);
|
|
|
|
const cte = tools.get("write_cte_sql");
|
|
const final = tools.get("write_final_sql");
|
|
assert.ok(cte, "write_cte_sql must be registered");
|
|
assert.ok(final, "write_final_sql must be registered");
|
|
|
|
await cte.def.execute("cte", { session: "s1", name: "base", sql: "WITH base AS (SELECT 1)" }, null, null, ctx);
|
|
await final.def.execute("sql", { session: "s1", sql: "SELECT * FROM base" }, null, null, ctx);
|
|
|
|
assert.deepEqual(calls.map((call) => call.args), [
|
|
["cte", "save", "--session", "s1", "--name", "base", "--file", "-"],
|
|
["sql", "set-final", "--session", "s1", "--file", "-"],
|
|
]);
|
|
assert.deepEqual(calls.map((call) => call.input), ["WITH base AS (SELECT 1)", "SELECT * FROM base"]);
|
|
assert.equal(JSON.stringify(calls).includes("sessions/s1"), false);
|
|
} finally {
|
|
cp.execFileSync = original;
|
|
}
|
|
});
|