From 3f9d53eb5e6c21559fd08ada31d8312de77c3bb2 Mon Sep 17 00:00:00 2001 From: Eddi3_As Date: Sun, 30 Mar 2025 18:05:06 -0400 Subject: [PATCH] added admintable component test --- .../components/AdminTable/AdminTable.test.tsx | 77 +++++++++++++++++++ .../AdminTable/AdminTables.test.tsx | 1 - 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 client/src/__tests__/components/AdminTable/AdminTable.test.tsx delete mode 100644 client/src/__tests__/components/AdminTable/AdminTables.test.tsx diff --git a/client/src/__tests__/components/AdminTable/AdminTable.test.tsx b/client/src/__tests__/components/AdminTable/AdminTable.test.tsx new file mode 100644 index 0000000..68a28ab --- /dev/null +++ b/client/src/__tests__/components/AdminTable/AdminTable.test.tsx @@ -0,0 +1,77 @@ +import React from "react"; +import { render, screen, fireEvent, waitFor } from "@testing-library/react"; +import AdminTable from "../../../components/AdminTable/AdminTable"; +import { AdminTableType } from "../../../Types/AdminTableType"; +import "@testing-library/jest-dom"; + +const mockData: AdminTableType[] = [ + { _id: "1", name: "John Doe", email: "john@example.com", created_at: new Date("2024-01-01"), roles: ["Admin"] }, + { _id: "2", name: "Jane Doe", email: "jane@example.com", created_at: new Date("2024-02-01"), roles: ["User"] }, + { _id: "3", name: "Alice Smith", email: "alice@example.com", created_at: new Date("2024-03-01"), roles: ["Editor"] }, +]; + +const labelMap = { + name: "Name", + email: "Email", + created_at: "Created At", + roles: "Roles", +}; + +describe("AdminTable Component", () => { + let mockOnDelete: jest.Mock; + + beforeEach(() => { + mockOnDelete = jest.fn(); + }); + + test("render AdminTable", () => { + render(); + + expect(screen.getByText("Name")).toBeInTheDocument(); + expect(screen.getByText("Email")).toBeInTheDocument(); + expect(screen.getByText("Created At")).toBeInTheDocument(); + expect(screen.getByText("Roles")).toBeInTheDocument(); + expect(screen.getByText("John Doe")).toBeInTheDocument(); + expect(screen.getByText("jane@example.com")).toBeInTheDocument(); + }); + + test("filters data based on search input", () => { + render(); + const searchInput = screen.getByPlaceholderText("Recherche: Enseignant, Courriel..."); + + fireEvent.change(searchInput, { target: { value: "Alice" } }); + + expect(screen.getByText("Alice Smith")).toBeInTheDocument(); + expect(screen.queryByText("John Doe")).not.toBeInTheDocument(); + }); + + test("opens and closes confirmation dialog", async () => { + render(); + const deleteButton = screen.getAllByRole("button")[0]; + + fireEvent.click(deleteButton); + expect(screen.getByText("Confirm Deletion")).toBeInTheDocument(); + fireEvent.click(screen.getByRole("button", { name: /cancel/i })); + await waitFor(() => { + expect(screen.queryByText("Confirm Deletion")).not.toBeInTheDocument(); + }); + }); + + test("onDelete when confirming delete", () => { + render(); + const deleteButton = screen.getAllByRole("button")[0]; + fireEvent.click(deleteButton); + + fireEvent.click(screen.getByText("Delete")); + expect(mockOnDelete).toHaveBeenCalledWith(mockData[0]); + }); + + test("pagination buttons test click", () => { + render(); + + const nextButton = screen.getByLabelText("Go to next page"); + fireEvent.click(nextButton); + + expect(screen.getByText("Alice Smith")).toBeInTheDocument(); + }); +}); diff --git a/client/src/__tests__/components/AdminTable/AdminTables.test.tsx b/client/src/__tests__/components/AdminTable/AdminTables.test.tsx deleted file mode 100644 index e4091cf..0000000 --- a/client/src/__tests__/components/AdminTable/AdminTables.test.tsx +++ /dev/null @@ -1 +0,0 @@ -//TODO TESTS \ No newline at end of file