import { GlobalRegistrator } from "@happy-dom/global-registrator";
if (!GlobalRegistrator.isRegistered) GlobalRegistrator.register();
(globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true;
import { expect, test } from "bun:test";
import { act } from "react";
import { createRoot } from "react-dom/client";
import { CollapsibleSection } from "./Section.tsx";
test("sections collapse independently, preserve drafts and actions, and remember their state", () => {
const budgetKey = "budget2:test-expand-budget";
const purchasesKey = "budget2:test-expand-purchases";
localStorage.removeItem(budgetKey);
localStorage.removeItem(purchasesKey);
const container = document.createElement("div");
let root = createRoot(container);
const render = () => root.render(<>
Add purchase}>Purchase rows
>);
try {
act(render);
const input = container.querySelector("input")!;
input.value = "Unsaved draft";
const collapse = container.querySelector('button[aria-label="Collapse Budget"]') as HTMLButtonElement;
act(() => collapse.click());
expect(input.closest("[hidden]")).not.toBeNull();
expect(container.querySelector('button[aria-label="Collapse Purchases"]')).not.toBeNull();
act(() => (container.querySelector('button[aria-label="Expand Budget"]') as HTMLButtonElement).click());
expect(input.value).toBe("Unsaved draft");
expect(input.closest("[hidden]")).toBeNull();
act(() => (container.querySelector('button[aria-label="Collapse Purchases"]') as HTMLButtonElement).click());
const add = [...container.querySelectorAll("button")].find(button => button.textContent === "Add purchase")!;
expect(add.closest("[hidden]")).toBeNull();
act(() => root.unmount());
root = createRoot(container);
act(render);
expect(container.querySelector('button[aria-label="Collapse Budget"]')).not.toBeNull();
expect(container.querySelector('button[aria-label="Expand Purchases"]')).not.toBeNull();
} finally {
act(() => root.unmount());
localStorage.removeItem(budgetKey);
localStorage.removeItem(purchasesKey);
}
});