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