import { assertEquals, cleanup, fireEvent, render, screen } from "./setup.ts"; import Checkbox from "../../components/form/Checkbox.tsx"; Deno.test({ name: "Checkbox - renders bare checkbox without label", fn() { render(); const checkbox = screen.getByRole("checkbox"); assertEquals(checkbox.tagName, "INPUT"); assertEquals((checkbox as HTMLInputElement).type, "checkbox"); cleanup(); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "Checkbox - renders with label text", fn() { render(); const label = screen.getByText("Accept terms"); assertEquals(label.tagName, "SPAN"); const checkbox = screen.getByRole("checkbox"); assertEquals(checkbox.tagName, "INPUT"); cleanup(); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "Checkbox - wraps in label element when label prop given", fn() { const { container } = render(); const labelEl = container.querySelector("label"); assertEquals(labelEl !== null, true); assertEquals(labelEl!.className.includes("flex"), true); cleanup(); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "Checkbox - passes through checked attribute", fn() { render(); const checkbox = screen.getByRole("checkbox") as HTMLInputElement; assertEquals(checkbox.checked, true); cleanup(); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "Checkbox - passes through disabled attribute", fn() { render(); const checkbox = screen.getByRole("checkbox") as HTMLInputElement; assertEquals(checkbox.disabled, true); cleanup(); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "Checkbox - fires onChange handler", fn() { let changed = false; render( { changed = true; }} />, ); fireEvent.click(screen.getByRole("checkbox")); assertEquals(changed, true); cleanup(); }, sanitizeResources: false, sanitizeOps: false, }); Deno.test({ name: "Checkbox - appends custom className", fn() { render(); const checkbox = screen.getByRole("checkbox"); assertEquals(checkbox.className.includes("my-check"), true); cleanup(); }, sanitizeResources: false, sanitizeOps: false, });