import { cleanup, render, screen } from "@testing-library/react";
import { afterEach, describe, expect, it } from "vitest";
import {
demoBeatLensForBeat,
type InterruptContractPresentation,
type OperationPresentation,
} from "./demo-workflow-model.js";
import { DemoOutcomePanel } from "./DemoOutcomePanel.js";
afterEach(() => cleanup());
const operation: OperationPresentation = {
operation: "workflow.runs.resume",
status: "completed",
durationMs: 42,
command: "uv run wf run resume run_recorded_lda_report",
deploymentId: "lda_report_workflow.default",
runId: "run_recorded_lda_report",
interruptKind: null,
};
const contract: InterruptContractPresentation = {
kind: "issue_review",
outcomes: ["submitted", "cancelled"],
requestSchema: { type: "object" },
resumeSchema: { type: "object" },
resumePayloadPreview: null,
resumeOutcome: null,
runId: "run_recorded_lda_report",
};
describe("DemoOutcomePanel", () => {
it("explains the approval beat as a schema-backed decision", () => {
render(
,
);
expect(screen.getByLabelText("demo outcome proof")).toHaveTextContent("schema-backed");
expect(screen.getByText("submitted / cancelled")).toBeInTheDocument();
expect(screen.getByText("run_recorded_lda_report")).toBeInTheDocument();
});
it("explains resume as same-run continuation", () => {
render(
,
);
expect(screen.getByText("Same persisted run")).toBeInTheDocument();
expect(screen.getByText("workflow.runs.resume")).toBeInTheDocument();
expect(screen.getByText("completed")).toBeInTheDocument();
});
it("explains output and trace without pretending to run live services", () => {
const { rerender } = render(
,
);
expect(screen.getByText("Report markdown")).toBeInTheDocument();
expect(screen.getByText("Issue board changes")).toBeInTheDocument();
rerender(
,
);
expect(screen.getByText("Trace frames")).toBeInTheDocument();
expect(screen.getByText("Protocol evidence")).toBeInTheDocument();
});
});