import { describe, expect, test } from "bun:test"; import { buildMirrorWebhookStatusDisclosure, rawMirrorWebhookStatus } from "./platform-infra-gitea-disclosure"; describe("Gitea webhook status progressive disclosure", () => { test("keeps --full as a bounded domain aggregate with repository drill-down commands", () => { const view = buildMirrorWebhookStatusDisclosure(fixture(), { repoKey: null, deliveryId: null }); const serialized = JSON.stringify({ ok: true, command: "status --full", data: view }, null, 2); expect(view.ok).toBe(true); expect(view.view).toBe("domain-aggregate"); expect((view.repositories as unknown[]).length).toBe(2); expect((view.deliveries as unknown[]).length).toBe(2); expect((view.bridge as { durableInbox: { retainedDeliveryCount: number } }).durableInbox.retainedDeliveryCount).toBe(82); expect(Object.prototype.hasOwnProperty.call(view, "raw")).toBe(false); expect(serialized).not.toContain('"payloadSha"'); expect(serialized).not.toContain("outputTruncated"); expect(Buffer.byteLength(serialized, "utf8")).toBeLessThan(10_240); expect((view.next as { repositories: Array<{ command: string }> }).repositories[0]?.command).toContain("--repo repo-a"); }); test("repository and deliveryId drill-down expose one inbox record, retry, logs and first error", () => { const repository = buildMirrorWebhookStatusDisclosure(fixture(), { repoKey: "repo-a", deliveryId: null }); expect(repository.view).toBe("repository-drill-down"); expect((repository.deliveries as unknown[]).length).toBe(1); expect((repository.selection as { effectiveDeliveryId: string }).effectiveDeliveryId).toBe("delivery-current-a"); expect((repository.retry as { totalAttempts: number }).totalAttempts).toBe(1); const delivery = buildMirrorWebhookStatusDisclosure(fixture(), { repoKey: null, deliveryId: "delivery-5" }); expect(delivery.ok).toBe(true); expect(delivery.view).toBe("delivery-drill-down"); expect((delivery.selection as { selectedRepoKey: string }).selectedRepoKey).toBe("repo-a"); expect((delivery.deliveries as Array<{ deliveryId: string }>)[0]?.deliveryId).toBe("delivery-5"); expect((delivery.retry as { totalAttempts: number; lastError: string }).totalAttempts).toBe(3); expect((delivery.retry as { lastError: string }).lastError).toContain("authentication-failed"); expect((delivery.logs as { matched: number; events: unknown[] }).matched).toBe(1); expect((delivery.diagnostics as { firstError: { domain: string } }).firstError.domain).toBe("durable-inbox-record"); }); test("reports missing retained delivery without hiding the operational payload", () => { const view = buildMirrorWebhookStatusDisclosure(fixture(), { repoKey: "repo-a", deliveryId: "not-retained" }); expect(view.ok).toBe(false); expect((view.selection as { error: string }).error).toBe("delivery-not-observed-in-retained-evidence"); const raw = rawMirrorWebhookStatus(fixture()); expect(raw.view).toBe("raw"); expect(raw.raw).toBeDefined(); expect((raw.safety as { explicitRawRequired: boolean; valuesPrinted: boolean }).explicitRawRequired).toBe(true); expect((raw.safety as { valuesPrinted: boolean }).valuesPrinted).toBe(false); }); }); function fixture(): Record { const retained = Array.from({ length: 80 }, (_, index) => deliveryRecord(`delivery-${index}`, index === 5 || index % 2 === 0 ? "repo-a" : "repo-b", { totalAttempts: index === 5 ? 3 : 1, lastError: index === 5 ? { type: "authentication-failed", message: "authentication-failed" } : null, })); const currentA = deliveryRecord("delivery-current-a", "repo-a"); const currentB = deliveryRecord("delivery-current-b", "repo-b"); const bridge = { deployment: "gitea-github-sync", ready: true, readyReplicas: "1/1", serviceExists: true, durableInbox: { ready: true, storageReady: true, capacityAvailable: true, counts: { committed: 81, retryWait: 1 }, deliveries: [...retained, currentA, currentB], totalBytes: 2048, maxBytes: 1_048_576, errorType: null, journal: { version: 1, kind: "GiteaGithubSyncDurableInbox", createdAt: "2026-07-11T00:00:00Z" }, }, }; return { ok: true, action: "platform-infra-gitea-mirror-webhook-status", mutation: false, target: { id: "NC01", route: "NC01:k3s", namespace: "devops-infra" }, webhook: { enabled: true, direction: "github-to-gitea", publicUrl: "https://gitea.example/_unidesk/github-to-gitea/nc01", events: ["push"], responseBudgetMs: 8_000, ingressAttemptBudgetMs: 2_000, ingressResponseHeaderTimeoutMs: 3_000, ingressRetry: { enabled: true, maxAttempts: 3, initialDelayMs: 1_000, maxDelayMs: 30_000 }, bridge: { deploymentName: "gitea-github-sync", serviceName: "gitea-github-sync" }, }, bridge, repositories: [repository("repo-a", currentA), repository("repo-b", currentB)], bridgeLogs: { exitCode: 0, events: [ { event: "github-to-gitea-sync", repo: "repo-a", deliveryId: "delivery-current-a", ok: true, terminal: true, syncAttempt: 1, disposition: "committed", elapsedMs: 90 }, { event: "github-to-gitea-sync", repo: "repo-a", deliveryId: "delivery-5", ok: false, terminal: true, syncAttempt: 3, errorType: "authentication-failed", error: "authentication-failed", elapsedMs: 120 }, ], errorTail: "", }, mirrorStatus: { exitCode: 0, errorTail: "" }, remote: { ok: true, bridge, repositories: [repository("repo-a", currentA), repository("repo-b", currentB)] }, }; } function repository(key: string, delivery: Record): Record { return { key, repository: `pikasTech/${key}`, branch: "master", hookReady: true, githubHead: "a".repeat(40), branchCommit: "a".repeat(40), snapshotCommit: "a".repeat(40), authorityMatches: true, bridgeEventStale: false, staleReason: null, deliveryId: delivery.deliveryId, deliveryAccepted: true, durableInboxState: "committed", durableInboxCommitted: true, durableInboxRecord: delivery, error: null, }; } function deliveryRecord(deliveryId: string, repo: string, overrides: Record = {}): Record { return { deliveryId, repo, repository: `pikasTech/${repo}`, ref: "refs/heads/master", requestedCommit: "a".repeat(40), payloadSha: "b".repeat(64), state: "committed", acceptedSequence: 1, totalAttempts: 1, cycleAttempt: 1, nextAttemptAt: null, updatedAt: "2026-07-11T00:00:00Z", result: { sourceCommit: "a".repeat(40), authorityCommit: "a".repeat(40), snapshotRef: `refs/unidesk/snapshots/${repo}/${"a".repeat(40)}`, disposition: "atomic-source-authority-committed", }, lastError: null, ...overrides, }; }