setUp

tcmts.cli.test.e2e.packages.setUp · #zuuynvdi · term · runs on the server

uses node:assert/strict

A new codebase with no scratch file, and ways to work in it.

import { okIn, tcmIn, tempDir } from "#codebase/tcmts/cli/test/e2e/harness";
import assert from "node:assert/strict";
import fs from "node:fs";
import path from "node:path";
import { DatabaseSync } from "node:sqlite";

export function setUp() {
  const dir = tempDir("packages");
  const tcm = (...args: string[]) => okIn(dir, ...args);
  const fails = (...args: string[]) => {
    const r = tcmIn(dir, ...args);
    assert.notEqual(r.status, 0, `tcm ${args.join(" ")} should fail`);
    return r.out;
  };
  const write = (file: string, text: string) => fs.writeFileSync(path.join(dir, file), text);
  const sql = (q: string, ...p: string[]) => {
    const db = new DatabaseSync(path.join(dir, ".tcm", "codebase.sqlite"));
    try {
      return db.prepare(q).all(...p) as Record<string, string>[];
    } finally {
      db.close();
    }
  };
  const hashOf = (name: string) => sql("SELECT hash FROM names WHERE path = ?", name)[0]!.hash!;
  tcm("init");
  fs.rmSync(path.join(dir, "scratch.ts"));
  return { dir, tcm, fails, write, sql, hashOf };
}

uses

used by