Files
salona/tests/CustomerCards.test.tsx
farnoosh-krm cf568fd39b test: add comprehensive test coverage for multiple
components

(fix) - Add new test files for:
  • ActiveAccounts
  • AddService
  • CreateGiftCard
  • CustomerCard
  • CustomerCards
  • DeleteButton
  • EditButton
  • LoyaltyCardListItem
  • MapPicker
  • Services
  • ServicesQA
(fix) - Add axios interceptor mock
(fix) - Add importMetaEnv mock
(fix) - Add environment setup file for test environment
2026-04-12 19:13:00 +03:30

138 lines
3.7 KiB
TypeScript

import { render, screen, fireEvent } from "@testing-library/react";
import { useDeleteCustomer } from "@/apps/new-ui/services/Customer";
import { showWarningAlert } from "@/apps/new-ui/components/CustomAlert";
import { useNavigate } from "react-router-dom";
import CustomerCards from "@/apps/new-ui/pages/CustomerClub/+components/CustomerCards";
jest.mock("../src/apps/new-ui/Utils/env.ts", () => ({
ENV: {
API_URL: "https://api.test",
},
}));
// Mock کردن وابستگی‌ها
jest.mock("@/apps/new-ui/services/Customer", () => ({
useDeleteCustomer: jest.fn(() => ({ mutate: jest.fn() })),
}));
jest.mock("@/apps/new-ui/components/CustomAlert", () => ({
showWarningAlert: jest.fn(),
}));
jest.mock("react-router-dom", () => ({
...jest.requireActual("react-router-dom"),
useNavigate: jest.fn(),
}));
// Mock کردن import.meta.env
beforeAll(() => {
(global as any).import = {
meta: { env: { VITE_APP_API_URL: "https://api.test" } },
};
});
describe("CustomerCards Component", () => {
const navigateMock = jest.fn();
const deleteMock = jest.fn();
beforeEach(() => {
jest.clearAllMocks();
(useNavigate as jest.Mock).mockReturnValue(navigateMock);
(useDeleteCustomer as jest.Mock).mockReturnValue({ mutate: deleteMock });
});
// تابع کمکی برای پیدا کردن دکمه سه‌نقطه
const getToggleBtn = (container: HTMLElement) => {
return container.querySelector("button svg.lucide-ellipsis-vertical")
?.parentElement as HTMLButtonElement;
};
it("renders skeleton loaders when loading", () => {
const { container } = render(<CustomerCards isLoading={true} />);
const skeletons = container.querySelectorAll(".animate-pulse");
expect(skeletons.length).toBeGreaterThan(0);
});
it("renders customer list", () => {
render(
<CustomerCards
data={[
{
id: 1,
name: "سارا",
phone_number: "09350000000",
customer_type: "Silver",
profile_picture: "",
score: 40,
},
]}
/>,
);
expect(screen.getByText("سارا")).toBeInTheDocument();
});
it("opens and closes dropdown menu", () => {
const { container } = render(
<CustomerCards
data={[
{
id: 3,
name: "سارا",
phone_number: "09350000000",
customer_type: "Silver",
profile_picture: "",
score: 40,
},
]}
/>,
);
const toggleBtn = getToggleBtn(container);
fireEvent.click(toggleBtn);
expect(screen.getByText("ویرایش")).toBeInTheDocument();
fireEvent.click(toggleBtn);
expect(screen.queryByText("ویرایش")).not.toBeInTheDocument();
});
it("calls delete flow when clicking delete", () => {
const { container } = render(
<CustomerCards
data={[
{
id: 4,
name: "رضا",
phone_number: "09120000000",
customer_type: "Silver",
profile_picture: "",
score: 50,
},
]}
/>,
);
fireEvent.click(getToggleBtn(container));
fireEvent.click(screen.getByText("حذف"));
expect(showWarningAlert).toHaveBeenCalled();
});
it("navigates when clicking edit", () => {
const { container } = render(
<CustomerCards
data={[
{
id: 5,
name: "امیر",
phone_number: "09121234567",
customer_type: "Silver",
profile_picture: "",
score: 70,
},
]}
/>,
);
fireEvent.click(getToggleBtn(container));
fireEvent.click(screen.getByText("ویرایش"));
expect(navigateMock).toHaveBeenCalled();
});
});