generated-runtime.test.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import assert from "node:assert/strict";
  2. import { execFileSync, spawnSync } from "node:child_process";
  3. import { mkdtemp, mkdir, rm, writeFile } from "node:fs/promises";
  4. import { tmpdir } from "node:os";
  5. import { join } from "node:path";
  6. import test from "node:test";
  7. const verifier = new URL("../../scripts/verify-generated-runtime.mjs", import.meta.url);
  8. async function runtimeFixture() {
  9. const root = await mkdtemp(join(tmpdir(), "codex-chief-of-staff-runtime-test-"));
  10. await Promise.all([
  11. mkdir(join(root, "dist", "src"), { recursive: true }),
  12. mkdir(join(root, "scripts"), { recursive: true }),
  13. mkdir(join(root, "src"), { recursive: true }),
  14. ]);
  15. await writeFile(join(root, "package.json"), JSON.stringify({
  16. private: true,
  17. scripts: { compile: "node scripts/compile.mjs" },
  18. }));
  19. await writeFile(
  20. join(root, "scripts", "compile.mjs"),
  21. "import { copyFile } from 'node:fs/promises';\nawait copyFile('src/runtime.js', 'dist/src/runtime.js');\n",
  22. );
  23. await writeFile(join(root, "src", "runtime.js"), "export const version = 1;\n");
  24. await writeFile(join(root, "dist", "src", "runtime.js"), "export const version = 1;\n");
  25. execFileSync("git", ["init", "--quiet"], { cwd: root });
  26. execFileSync("git", ["add", "."], { cwd: root });
  27. return root;
  28. }
  29. test("generated-runtime verifier accepts a fresh staged baseline", async () => {
  30. const root = await runtimeFixture();
  31. try {
  32. const result = spawnSync(process.execPath, [verifier.pathname], {
  33. cwd: root,
  34. encoding: "utf8",
  35. });
  36. assert.equal(result.status, 0, result.stderr);
  37. assert.match(result.stdout, /Generated runtime is fresh/);
  38. } finally {
  39. await rm(root, { recursive: true, force: true });
  40. }
  41. });
  42. test("generated-runtime verifier rejects source and runtime drift", async () => {
  43. const root = await runtimeFixture();
  44. try {
  45. await writeFile(join(root, "src", "runtime.js"), "export const version = 2;\n");
  46. const result = spawnSync(process.execPath, [verifier.pathname], {
  47. cwd: root,
  48. encoding: "utf8",
  49. });
  50. assert.notEqual(result.status, 0);
  51. assert.match(result.stderr, /generated runtime drift detected in dist\/src/i);
  52. assert.match(result.stderr, /runtime\.js/);
  53. } finally {
  54. await rm(root, { recursive: true, force: true });
  55. }
  56. });