checkbox_test.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { assertEquals, cleanup, fireEvent, render, screen } from "./setup.ts";
  2. import Checkbox from "../../components/form/Checkbox.tsx";
  3. Deno.test({
  4. name: "Checkbox - renders bare checkbox without label",
  5. fn() {
  6. render(<Checkbox />);
  7. const checkbox = screen.getByRole("checkbox");
  8. assertEquals(checkbox.tagName, "INPUT");
  9. assertEquals((checkbox as HTMLInputElement).type, "checkbox");
  10. cleanup();
  11. },
  12. sanitizeResources: false,
  13. sanitizeOps: false,
  14. });
  15. Deno.test({
  16. name: "Checkbox - renders with label text",
  17. fn() {
  18. render(<Checkbox label="Accept terms" />);
  19. const label = screen.getByText("Accept terms");
  20. assertEquals(label.tagName, "SPAN");
  21. const checkbox = screen.getByRole("checkbox");
  22. assertEquals(checkbox.tagName, "INPUT");
  23. cleanup();
  24. },
  25. sanitizeResources: false,
  26. sanitizeOps: false,
  27. });
  28. Deno.test({
  29. name: "Checkbox - wraps in label element when label prop given",
  30. fn() {
  31. const { container } = render(<Checkbox label="Wrap" />);
  32. const labelEl = container.querySelector("label");
  33. assertEquals(labelEl !== null, true);
  34. assertEquals(labelEl!.className.includes("flex"), true);
  35. cleanup();
  36. },
  37. sanitizeResources: false,
  38. sanitizeOps: false,
  39. });
  40. Deno.test({
  41. name: "Checkbox - passes through checked attribute",
  42. fn() {
  43. render(<Checkbox checked />);
  44. const checkbox = screen.getByRole("checkbox") as HTMLInputElement;
  45. assertEquals(checkbox.checked, true);
  46. cleanup();
  47. },
  48. sanitizeResources: false,
  49. sanitizeOps: false,
  50. });
  51. Deno.test({
  52. name: "Checkbox - passes through disabled attribute",
  53. fn() {
  54. render(<Checkbox disabled />);
  55. const checkbox = screen.getByRole("checkbox") as HTMLInputElement;
  56. assertEquals(checkbox.disabled, true);
  57. cleanup();
  58. },
  59. sanitizeResources: false,
  60. sanitizeOps: false,
  61. });
  62. Deno.test({
  63. name: "Checkbox - fires onChange handler",
  64. fn() {
  65. let changed = false;
  66. render(
  67. <Checkbox
  68. onChange={() => {
  69. changed = true;
  70. }}
  71. />,
  72. );
  73. fireEvent.click(screen.getByRole("checkbox"));
  74. assertEquals(changed, true);
  75. cleanup();
  76. },
  77. sanitizeResources: false,
  78. sanitizeOps: false,
  79. });
  80. Deno.test({
  81. name: "Checkbox - appends custom className",
  82. fn() {
  83. render(<Checkbox className="my-check" />);
  84. const checkbox = screen.getByRole("checkbox");
  85. assertEquals(checkbox.className.includes("my-check"), true);
  86. cleanup();
  87. },
  88. sanitizeResources: false,
  89. sanitizeOps: false,
  90. });