Files
pikasTech-unidesk/scripts/check-gh-contract-scope-contract-test.ts
T
2026-06-10 16:43:02 +00:00

39 lines
1.6 KiB
TypeScript

import { strict as assert } from "node:assert";
import { parseCheckOptions, runChecks } from "./src/check";
const scriptsOnly = parseCheckOptions(["--scripts-typecheck"]);
assert.equal(scriptsOnly.scriptsTypecheck, true);
assert.equal(scriptsOnly.ghContracts, false);
assert.equal(scriptsOnly.scriptsTypecheckTimeoutMs, 120_000);
assert.equal(scriptsOnly.checkHeartbeatMs, 15_000);
const full = parseCheckOptions(["--full"]);
assert.equal(full.scriptsTypecheck, true);
assert.equal(full.ghContracts, true);
const explicit = parseCheckOptions(["--gh-contracts"]);
assert.equal(explicit.scriptsTypecheck, false);
assert.equal(explicit.ghContracts, true);
const tunedVisibility = parseCheckOptions(["--scripts-typecheck", "--scripts-typecheck-timeout-ms", "1000", "--check-heartbeat-ms", "200"]);
assert.equal(tunedVisibility.scriptsTypecheck, true);
assert.equal(tunedVisibility.scriptsTypecheckTimeoutMs, 1000);
assert.equal(tunedVisibility.checkHeartbeatMs, 200);
const minimalConfig = {
project: { name: "contract" },
runtime: "contract",
} as never;
const result = await runChecks(minimalConfig, { ...scriptsOnly, scriptsTypecheck: false });
const issueGuard = result.items.find((item) => item.name === "gh:issue-guard-contract");
const prFiles = result.items.find((item) => item.name === "gh:pr-files-contract");
const pr = result.items.find((item) => item.name === "gh:pr-contract");
for (const item of [issueGuard, prFiles, pr]) {
assert.ok(item, "GitHub contract item should be visible in check output");
assert.equal(item?.ok, true);
assert.equal((item?.detail as { skipped?: boolean }).skipped, true);
}
console.log("check gh contract scope contract ok");