file_input_test.tsx 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { assertEquals, cleanup, render } from "./setup.ts";
  2. import FileInput from "../../components/form/FileInput.tsx";
  3. Deno.test({
  4. name: "FileInput - renders bare input without label",
  5. fn() {
  6. const { container } = render(<FileInput />);
  7. const fileInput = container.querySelector(
  8. 'input[type="file"]',
  9. ) as HTMLInputElement;
  10. assertEquals(fileInput !== null, true);
  11. assertEquals(fileInput.type, "file");
  12. const labelEl = container.querySelector("label");
  13. assertEquals(labelEl, null);
  14. cleanup();
  15. },
  16. sanitizeResources: false,
  17. sanitizeOps: false,
  18. });
  19. Deno.test({
  20. name: "FileInput - renders with label wrapper",
  21. fn() {
  22. const { container } = render(<FileInput label="Import file" />);
  23. const labelEl = container.querySelector("label");
  24. assertEquals(labelEl !== null, true);
  25. assertEquals(labelEl?.textContent?.includes("Import file"), true);
  26. const fileInput = container.querySelector(
  27. 'input[type="file"]',
  28. ) as HTMLInputElement;
  29. assertEquals(fileInput !== null, true);
  30. cleanup();
  31. },
  32. sanitizeResources: false,
  33. sanitizeOps: false,
  34. });
  35. Deno.test({
  36. name: "FileInput - passes through accept attribute",
  37. fn() {
  38. const { container } = render(<FileInput accept=".md,.txt" />);
  39. const fileInput = container.querySelector(
  40. 'input[type="file"]',
  41. ) as HTMLInputElement;
  42. assertEquals(fileInput.getAttribute("accept"), ".md,.txt");
  43. cleanup();
  44. },
  45. sanitizeResources: false,
  46. sanitizeOps: false,
  47. });
  48. Deno.test({
  49. name: "FileInput - passes through disabled attribute",
  50. fn() {
  51. const { container } = render(<FileInput disabled />);
  52. const fileInput = container.querySelector(
  53. 'input[type="file"]',
  54. ) as HTMLInputElement;
  55. assertEquals(fileInput.hasAttribute("disabled"), true);
  56. cleanup();
  57. },
  58. sanitizeResources: false,
  59. sanitizeOps: false,
  60. });
  61. Deno.test({
  62. name: "FileInput - appends custom className",
  63. fn() {
  64. const { container } = render(<FileInput className="my-file" />);
  65. const fileInput = container.querySelector(
  66. 'input[type="file"]',
  67. ) as HTMLInputElement;
  68. assertEquals(fileInput.classList.contains("my-file"), true);
  69. cleanup();
  70. },
  71. sanitizeResources: false,
  72. sanitizeOps: false,
  73. });
  74. Deno.test({
  75. name: "FileInput - includes dark mode file button styles",
  76. fn() {
  77. const { container } = render(<FileInput />);
  78. const fileInput = container.querySelector(
  79. 'input[type="file"]',
  80. ) as HTMLInputElement;
  81. assertEquals(fileInput.classList.contains("file:dark:bg-gray-600"), true);
  82. assertEquals(
  83. fileInput.classList.contains("file:dark:hover:bg-gray-500"),
  84. true,
  85. );
  86. assertEquals(fileInput.classList.contains("file:dark:text-gray-100"), true);
  87. cleanup();
  88. },
  89. sanitizeResources: false,
  90. sanitizeOps: false,
  91. });