testSessionDirsGone

tcmts.cli.codebase.testSessionDirsGone · #qy3xh4ev · term

import { sessionDirFor, sessionDirsGone, unsavedIn } from "#codebase/tcmts/cli/codebase";
import assert from "node:assert/strict";
import fs from "node:fs";
import os from "node:os";
import path from "node:path";

export const testSessionDirsGone = () => {
  const root = fs.mkdtempSync(path.join(fs.realpathSync(os.tmpdir()), "tcm sessions "));
  for (const b of ["session/a", "agent/b", "gone"])
    fs.mkdirSync(sessionDirFor(root, b), { recursive: true });
  assert.deepEqual(
    sessionDirsGone(root, ["main", "session/a", "agent/b"]).map((d) => path.basename(d)),
    ["gone"],
  );
  const dir = sessionDirFor(root, "gone");
  fs.writeFileSync(path.join(dir, "empty.ts"), "\n");
  fs.writeFileSync(path.join(dir, "types.d.ts"), "export {};\n");
  assert.deepEqual(unsavedIn(dir), []);
  fs.writeFileSync(path.join(dir, "scratch.ts"), "export const x = 1;\n");
  assert.deepEqual(unsavedIn(dir), [path.join(dir, "scratch.ts")]);
  // a file kept as written, as `tcm edit` writes it there, is unsaved work too; the session's own files aren't
  for (const f of ["package.json", "tsconfig.json", "session.json"])
    fs.writeFileSync(path.join(dir, f), "{}\n");
  fs.mkdirSync(path.join(dir, "imports"));
  fs.writeFileSync(path.join(dir, "Dockerfile"), "FROM node\n");
  fs.writeFileSync(path.join(dir, ".gitignore"), "dist/\n");
  assert.deepEqual(
    unsavedIn(dir)
      .map((f) => path.basename(f))
      .sort(),
    [".gitignore", "Dockerfile", "scratch.ts"],
  );
  assert.deepEqual(unsavedIn(path.join(root, "nowhere")), []);
}

uses