checkbox_test.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { cleanup, assertEquals, render, screen, fireEvent } 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(<Checkbox onChange={() => { changed = true; }} />);
  67. fireEvent.click(screen.getByRole("checkbox"));
  68. assertEquals(changed, true);
  69. cleanup();
  70. },
  71. sanitizeResources: false,
  72. sanitizeOps: false,
  73. });
  74. Deno.test({
  75. name: "Checkbox - appends custom className",
  76. fn() {
  77. render(<Checkbox className="my-check" />);
  78. const checkbox = screen.getByRole("checkbox");
  79. assertEquals(checkbox.className.includes("my-check"), true);
  80. cleanup();
  81. },
  82. sanitizeResources: false,
  83. sanitizeOps: false,
  84. });