9352f10d0d
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
73 lines
3.1 KiB
TypeScript
73 lines
3.1 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
import { spawnSync } from "node:child_process";
|
|
import { resolve } from "node:path";
|
|
import { assertNoDuplicateYamlMappingKeys } from "./platform-infra-ops-library";
|
|
|
|
const repositoryRoot = resolve(import.meta.dir, "../..");
|
|
|
|
test("Gitea plan renders a single-writer durable inbox PVC from owning YAML", () => {
|
|
const result = cli(["platform-infra", "gitea", "plan", "--target", "NC01", "--raw"]);
|
|
expect(result.status).toBe(0);
|
|
const data = result.payload.data;
|
|
expect(data.ok).toBe(true);
|
|
expect(data.renderPlan.objects).toContainEqual({
|
|
kind: "PersistentVolumeClaim",
|
|
name: "gitea-github-sync-inbox",
|
|
namespace: "devops-infra",
|
|
});
|
|
expect(data.policy).toContainEqual(expect.objectContaining({ name: "durable-inbox-single-writer", ok: true }));
|
|
expect(data.policy).toContainEqual(expect.objectContaining({ name: "durable-inbox-pvc", ok: true }));
|
|
});
|
|
|
|
test("manual mirror sync and synthetic webhook delivery fail before remote capture", () => {
|
|
const sync = cli(["platform-infra", "gitea", "mirror", "sync", "--target", "NC01", "--confirm", "--raw"]);
|
|
expect(sync.status).not.toBe(0);
|
|
expect(sync.payload.data).toMatchObject({
|
|
ok: false,
|
|
mutation: false,
|
|
mode: "automatic-source-authority-manual-sync-disabled",
|
|
});
|
|
expect(sync.payload.data.remote).toBeUndefined();
|
|
|
|
const webhookTest = cli(["platform-infra", "gitea", "mirror", "webhook", "test", "--target", "NC01", "--repo", "unidesk-master-nc01", "--confirm", "--raw"]);
|
|
expect(webhookTest.status).not.toBe(0);
|
|
expect(webhookTest.payload.data).toMatchObject({
|
|
ok: false,
|
|
mutation: false,
|
|
mode: "manual-source-delivery-test-disabled",
|
|
});
|
|
expect(webhookTest.payload.data.remote).toBeUndefined();
|
|
});
|
|
|
|
test("YAML parser rejects duplicate mapping keys before silent overwrite", () => {
|
|
expect(() => assertNoDuplicateYamlMappingKeys(`sourceAuthority:
|
|
repositories:
|
|
- key: agentrun-jd01-v02
|
|
legacyGitMirror:
|
|
configRef: first
|
|
configRef: second
|
|
`, "duplicate.yaml")).toThrow(/duplicate YAML mapping key configRef.*first declared at line 5/);
|
|
});
|
|
|
|
test("default platform-infra help exposes only read-only Gitea authority commands", () => {
|
|
const result = cli(["platform-infra", "gitea", "--help"]);
|
|
expect(result.status).toBe(0);
|
|
const giteaUsage = (result.payload.data.usage as string[]).filter((line) => line.includes("platform-infra gitea "));
|
|
expect(giteaUsage).toEqual([
|
|
"bun scripts/cli.ts platform-infra gitea status --target NC01",
|
|
"bun scripts/cli.ts platform-infra gitea validate --target NC01",
|
|
"bun scripts/cli.ts platform-infra gitea mirror status --target NC01",
|
|
"bun scripts/cli.ts platform-infra gitea mirror webhook status --target NC01",
|
|
]);
|
|
});
|
|
|
|
function cli(args: string[]): { status: number | null; payload: Record<string, any> } {
|
|
const result = spawnSync("bun", ["scripts/cli.ts", ...args], {
|
|
cwd: repositoryRoot,
|
|
encoding: "utf8",
|
|
env: { ...process.env, NO_COLOR: "1" },
|
|
});
|
|
expect(result.stdout).not.toBe("");
|
|
return { status: result.status, payload: JSON.parse(result.stdout) };
|
|
}
|