41 lines
2.2 KiB
TypeScript
41 lines
2.2 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { mkdtemp, writeFile, rm, symlink } from "node:fs/promises";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import { execFile as callback } from "node:child_process";
|
|
import { promisify } from "node:util";
|
|
import { inspectAuthoringRepository } from "../src/capability-language/authoring-inspect.js";
|
|
|
|
const execFile = promisify(callback);
|
|
test("inspection keeps current files and labels historical recovery without granting verification", async (context) => {
|
|
const root = await mkdtemp(path.join(os.tmpdir(), "qx-inspection-test-"));
|
|
context.after(() => rm(root, { recursive: true, force: true }));
|
|
const git = (...args: string[]) => execFile("git", ["-C", root, ...args]);
|
|
await git("init");
|
|
await writeFile(
|
|
path.join(root, "interface.qx"),
|
|
'interface Example id "interface:example" revision "interface:example@1" {}',
|
|
);
|
|
await git("add", ".");
|
|
await git("-c", "user.name=Test", "-c", "user.email=test@example.test", "commit", "-m", "contract");
|
|
const commit = (await git("rev-parse", "HEAD")).stdout.trim();
|
|
await writeFile(path.join(root, "interface.qx"), "interface broken {{{");
|
|
await writeFile(path.join(root, "new.qx"), 'interface New id "interface:new" revision "interface:new@1" {}');
|
|
const inspected = await inspectAuthoringRepository(root);
|
|
assert.equal(inspected.verificationEvidence, false);
|
|
assert.equal(inspected.resolutionChecked, false);
|
|
assert.equal(inspected.files[0].status, "historical");
|
|
assert.equal(inspected.files[0].revision, commit);
|
|
assert.ok(inspected.files[0].currentErrors.length);
|
|
assert.match(inspected.files[0].declarations[0].source, /Example/);
|
|
assert.equal(inspected.files[1].status, "current");
|
|
assert.match(inspected.files[1].declarations[0].source, /New/);
|
|
assert.equal((await git("rev-parse", "HEAD")).stdout.trim(), commit);
|
|
await symlink(path.join(root, "interface.qx"), path.join(root, "linked.qx"));
|
|
const linked = (await inspectAuthoringRepository(root)).files.find((file) => file.file === "linked.qx")!;
|
|
assert.equal(linked.status, "unavailable");
|
|
assert.deepEqual(linked.declarations, []);
|
|
assert.match(JSON.stringify(linked.currentErrors), /ordinary files/);
|
|
});
|