Merge pull request 'Answer what the mesh's checks said of a pull request: mesh-delivery's checks verb (hq ADR 0239)' (#109) from feat/delivery-checks-verb into main

This commit was merged in pull request #109.
This commit is contained in:
2026-10-07 19:04:10 +00:00
14 changed files with 919 additions and 15 deletions
+48
View File
@@ -0,0 +1,48 @@
import assert from "node:assert/strict";
import { test } from "node:test";
// What the forge says of a commit's checks (novox/hq ADR 0239): read by mesh-delivery's `checks` verb.
test("the newest status of each context is kept, with what it said, when and by whom", async () => {
const { newestByContext } = await import("../checks.ts");
const read = newestByContext([
{ context: "mesh/merge-gate", status: "success", description: "pass: every machine composes", updated_at: "2026-10-07T10:00:00Z",
creator: { login: "mesh-admin" }, target_url: "https://forge.example/o/r/pulls/1" },
{ context: "mesh/merge-gate", status: "failure", description: "fail: 0 of 4 compose", updated_at: "2026-10-07T09:00:00Z" },
{ context: "mesh/repo-check", state: "error", description: "error: the toolchain was not there", created_at: "2026-10-07T10:01:00Z" },
{ status: "success", description: "a status with no context" },
]);
assert.deepEqual(read.map((s) => [s.context, s.state]), [["mesh/merge-gate", "success"], ["mesh/repo-check", "error"]]);
assert.equal(read[0].creator, "mesh-admin");
assert.equal(read[0].description, "pass: every machine composes");
assert.equal(read[1].created_at, "2026-10-07T10:01:00Z");
});
test("a commit merges only when every required status is a success; a warning blocks", async () => {
const { mergeableUnder } = await import("../checks.ts");
const rule = { rule_name: "main", enable_status_check: true, status_check_contexts: ["mesh/merge-gate", "mesh/repo-check"] };
const ok = mergeableUnder("main", rule, [
{ context: "mesh/merge-gate", state: "success", description: "" },
{ context: "mesh/repo-check", state: "success", description: "" },
]);
assert.equal(ok.mergeable, true);
assert.deepEqual(ok.blocking, []);
const not = mergeableUnder("main", rule, [{ context: "mesh/merge-gate", state: "warning", description: "" }]);
assert.equal(not.mergeable, false);
assert.deepEqual(not.blocking, [{ context: "mesh/merge-gate", state: "warning" }, { context: "mesh/repo-check", state: "missing" }]);
assert.match(not.says, /mesh\/repo-check \(missing\)/);
});
test("no rule requires nothing; a rule that cannot be read says nothing, never yes", async () => {
const { mergeableUnder } = await import("../checks.ts");
const none = mergeableUnder("main", null, []);
assert.equal(none.mergeable, true);
assert.equal(none.protected, false);
const off = mergeableUnder("main", { rule_name: "main", enable_status_check: false, status_check_contexts: ["mesh/merge-gate"] }, []);
assert.equal(off.mergeable, true);
assert.deepEqual(off.required, []);
const unread = mergeableUnder("main", undefined, [], "Gitea API: 500");
assert.equal(unread.mergeable, null);
assert.match(unread.says, /could not be read/);
});