import { afterEach, expect, test } from "bun:test"; import { act, useState } from "react"; import { createDomTestHarness } from "../../renderers/electrobun/view/test-utils"; import { syncTheme } from "../../theme/colors"; import { ThemeProvider } from "../../theme/theme-context"; import { DEFAULT_THEME } from "../../theme/themes"; import { Button } from "./button"; import { Badge, Divider, SectionHeading } from "./display"; import { PaneStatusBody } from "./status"; const { render, window } = createDomTestHarness(); afterEach(() => syncTheme(DEFAULT_THEME)); test("stable display content follows theme changes and status transitions expose only the active state", async () => { let updateTheme!: (theme: string) => void; let updateState!: (state: "loading" | "error" | "ready") => void; let retries = 0; const display = <>; function View() { const [theme, setTheme] = useState(DEFAULT_THEME); const [state, setState] = useState<"loading" | "error" | "ready">("loading"); updateTheme = setTheme; updateState = setState; return ( {display} { retries += 1; }} />} > Loaded history ); } const container = await render(); const headingColor = () => (container.querySelector('[data-gloom-ui="section-heading"] span') as HTMLElement).style.color; const original = headingColor(); expect(container.querySelector('[data-gloom-status="loading"]')).not.toBeNull(); await act(async () => { updateTheme("midnight"); updateState("error"); }); expect(headingColor()).not.toBe(original); expect(container.querySelector('[data-gloom-status="loading"]')).toBeNull(); expect(container.querySelector('[data-gloom-status="empty"]')).toBeNull(); expect(container.querySelector('[data-gloom-status="error"]')?.textContent).toContain("Please retry this request."); await act(async () => { container.querySelector("button")!.dispatchEvent(new window.MouseEvent("click", { bubbles: true }) as unknown as Event); updateState("ready"); }); expect(retries).toBe(1); expect(container.querySelector('[data-gloom-status]')).toBeNull(); expect(container.textContent).toContain("Loaded history"); expect(container.querySelector('[data-gloom-ui="divider"]')?.textContent).toBe(""); });