import { expect, test } from "bun:test"; import { createElement } from "react"; import { renderToStaticMarkup } from "react-dom/server"; import { QuestionnaireCard } from "./questionnaire"; import { DECIDED, META } from "./questionnaire-metadata.test-fixtures"; test("evidence inspection is available only on an open inline conversation card", () => { let open = { ...DECIDED, questions: [{ ...DECIDED.questions[0]!, answer: undefined, choices: undefined }], }; let evidence = createElement("p", null, "Evidence"); let render = (value: typeof open, status: "open" | "decided", presentation?: "inline" | "list") => renderToStaticMarkup(createElement(QuestionnaireCard, { evidence, meta: { ...META, status }, presentation, value, })); let eligible = render(open, "open"); let noThread = render({ ...open, thread: undefined } as never, "open"); let settled = render(open, "decided"); let list = render(open, "open", "list"); let noEvidence = renderToStaticMarkup(createElement(QuestionnaireCard, { meta: { ...META, status: "open" }, value: open, })); for (let markup of [eligible, noThread, settled, noEvidence]) { expect(markup).toContain("plan-evidence-host"); } expect(eligible).toContain('aria-label="Inspect decision evidence"'); for (let markup of [noThread, settled, list, noEvidence]) { expect(markup).not.toContain('aria-label="Inspect decision evidence"'); } }); test("a delayed decided projection stays non-editable in the Decisions list", () => { let markup = renderToStaticMarkup(createElement(QuestionnaireCard, { canEdit: true, connected: true, meta: META, presentation: "list", value: { ...DECIDED, questions: [{ ...DECIDED.questions[0]!, answer: undefined, choices: undefined }], }, wire: { ask: async () => ({ ok: true }) } as never, })); expect(markup).toContain("Saved decision"); expect(markup).not.toContain("Save<"); }); test("resolved card actions require an editable connected viewer", () => { let editable = renderToStaticMarkup(createElement(QuestionnaireCard, { canEdit: true, connected: true, meta: META, presentation: "list", value: DECIDED, wire: { ask: async () => ({ ok: true }) } as never, })); let reader = renderToStaticMarkup(createElement(QuestionnaireCard, { canEdit: false, connected: true, meta: META, presentation: "list", value: DECIDED, wire: { ask: async () => ({ ok: true }) } as never, })); expect(editable).toContain(">Reopen<"); expect(editable).toContain(">Discard<"); expect(editable).not.toMatch(/]*disabled=""[^>]*>ReopenReopen<"); expect(reader).not.toContain(">Discard<"); });