import assert from "node:assert/strict"; import { execFileSync, spawnSync } from "node:child_process"; import { mkdtemp, mkdir, rm, writeFile } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import test from "node:test"; const verifier = new URL("../scripts/verify-generated-runtime.mjs", import.meta.url); const gitEnvironment = { ...process.env }; delete gitEnvironment.GIT_INDEX_FILE; async function runtimeFixture() { const root = await mkdtemp(join(tmpdir(), "codex-app-server-bridge-runtime-test-")); await Promise.all([ mkdir(join(root, "dist"), { recursive: true }), mkdir(join(root, "scripts"), { recursive: true }), mkdir(join(root, "src"), { recursive: true }), ]); await writeFile(join(root, "package.json"), JSON.stringify({ private: true, scripts: { compile: "node scripts/compile.mjs" }, })); await writeFile( join(root, "scripts", "compile.mjs"), "import { copyFile } from 'node:fs/promises';\nawait Promise.all([copyFile('src/cli.js', 'dist/cli.js'), copyFile('src/config.js', 'dist/config.js')]);\n", ); await writeFile(join(root, "src", "cli.js"), "export const version = 1;\n"); await writeFile(join(root, "src", "config.js"), "export const configured = true;\n"); await writeFile(join(root, "dist", "cli.js"), "export const version = 1;\n"); await writeFile(join(root, "dist", "config.js"), "export const configured = true;\n"); execFileSync("git", ["init", "--quiet"], { cwd: root, env: gitEnvironment }); execFileSync("git", ["add", "."], { cwd: root, env: gitEnvironment }); return root; } test("generated-runtime verifier accepts a fresh staged baseline", async () => { const root = await runtimeFixture(); try { const result = spawnSync(process.execPath, [verifier.pathname], { cwd: root, encoding: "utf8", env: gitEnvironment, }); assert.equal(result.status, 0, result.stderr); assert.match(result.stdout, /Generated runtime is fresh/); } finally { await rm(root, { recursive: true, force: true }); } }); test("generated-runtime verifier rejects source and runtime drift", async () => { const root = await runtimeFixture(); try { await writeFile(join(root, "src", "cli.js"), "export const version = 2;\n"); const result = spawnSync(process.execPath, [verifier.pathname], { cwd: root, encoding: "utf8", env: gitEnvironment, }); assert.notEqual(result.status, 0); assert.match(result.stderr, /generated runtime drift detected/i); assert.match(result.stderr, /cli\.js/); } finally { await rm(root, { recursive: true, force: true }); } });