feedback-form.test.tsx 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { screen } from "@testing-library/react";
  2. import userEvent from "@testing-library/user-event";
  3. import { afterEach, describe, expect, it, vi } from "vitest";
  4. import { renderWithProviders } from "test-utils";
  5. import { FeedbackForm } from "#/components/features/feedback/feedback-form";
  6. describe("FeedbackForm", () => {
  7. const user = userEvent.setup();
  8. const onCloseMock = vi.fn();
  9. afterEach(() => {
  10. vi.clearAllMocks();
  11. });
  12. it("should render correctly", () => {
  13. renderWithProviders(
  14. <FeedbackForm polarity="positive" onClose={onCloseMock} />,
  15. );
  16. screen.getByLabelText("Email");
  17. screen.getByLabelText("Private");
  18. screen.getByLabelText("Public");
  19. screen.getByRole("button", { name: "Submit" });
  20. screen.getByRole("button", { name: "Cancel" });
  21. });
  22. it("should switch between private and public permissions", async () => {
  23. renderWithProviders(
  24. <FeedbackForm polarity="positive" onClose={onCloseMock} />,
  25. );
  26. const privateRadio = screen.getByLabelText("Private");
  27. const publicRadio = screen.getByLabelText("Public");
  28. expect(privateRadio).toBeChecked(); // private is the default value
  29. expect(publicRadio).not.toBeChecked();
  30. await user.click(publicRadio);
  31. expect(publicRadio).toBeChecked();
  32. expect(privateRadio).not.toBeChecked();
  33. await user.click(privateRadio);
  34. expect(privateRadio).toBeChecked();
  35. expect(publicRadio).not.toBeChecked();
  36. });
  37. it("should call onClose when the close button is clicked", async () => {
  38. renderWithProviders(
  39. <FeedbackForm polarity="positive" onClose={onCloseMock} />,
  40. );
  41. await user.click(screen.getByRole("button", { name: "Cancel" }));
  42. expect(onCloseMock).toHaveBeenCalled();
  43. });
  44. });