import React, { act } from "react"; (globalThis as Record).React = React; import assert from "node:assert/strict"; import { afterEach, test } from "node:test"; import { createRoot, type Root } from "react-dom/client"; import { renderToStaticMarkup } from "react-dom/server"; import { parseHTML } from "linkedom"; import { ClaudeCodeInstallationStatus, claudeCodeStatusLabel } from "../components/settings/claude-code-status.tsx"; import { ConnectionRow } from "../components/settings/connection-controls.tsx"; import { useModelCatalog } from "../components/model-catalog.ts"; import type { ClaudeCodeStatus } from "../src/core/contracts/claude-code.ts"; const dom = parseHTML(""); Object.assign(globalThis, { window: dom.window, document: dom.document, Element: dom.window.Element, HTMLElement: dom.window.HTMLElement, CustomEvent: dom.window.CustomEvent, IS_REACT_ACT_ENVIRONMENT: true }); const originalFetch = globalThis.fetch; let root: Root | undefined, host: HTMLDivElement | undefined; const status = (state: ClaudeCodeStatus["state"], version: string | null = null): ClaudeCodeStatus => ({ state, version, minimumVersion: "2.1.259" }); const button = () => document.querySelector('[data-testid="claude-code-check-again"]')!; const toggle = () => document.querySelector('[role="switch"]')!; const label = () => document.querySelector('[role="status"]')?.textContent; function fixture(probe: (init?: RequestInit) => Promise, enabled = true, failSave = false) { const calls: string[] = []; let on = enabled; globalThis.fetch = (async (url, init) => { calls.push(`${init?.method ?? "GET"} ${url}`); if (url === "/api/settings") return Response.json({ settings: { version: 1, claudeCode: { enabled: on } } }); if (url === "/api/settings/claudeCode") { assert.equal(init?.method, "PUT"); assert.equal(new Headers(init.headers).get("Content-Type"), "application/json"); if (failSave) return new Response(null, { status: 500 }); on = JSON.parse(String(init.body)).enabled; return Response.json({ settings: { version: 1, claudeCode: { enabled: on } } }); } if (url === "/api/models") return Response.json({ models: on ? [{ provider: "claude-code", id: "sonnet" }] : [] }); assert.equal(url, "/api/claude-code"); assert.equal(init?.cache, "no-store"); assert.equal(new Headers(init?.headers).get("x-learnharness-claude-code"), "1"); return probe(init); }) as typeof fetch; return calls; } async function mount(extra?: React.ReactNode) { host = document.createElement("div"); document.body.append(host); root = createRoot(host); await act(async () => root!.render(<>{extra})); } afterEach(async () => { await act(async () => root?.unmount()); host?.remove(); root = undefined; host = undefined; globalThis.fetch = originalFetch; }); test("initial render is collapsed and off, with no setup prose or version probe action", () => { const html = renderToStaticMarkup(); assert.match(html, /Claude Code/); assert.match(html, /aria-checked="false"/); assert.equal((html.match(/