import { describe, expect, it, vi } from "vitest"; import { render, screen } from "@testing-library/react"; import DoctorPage from "@/components/doctor"; vi.mock("@/components/doctor/appointmentList", () => ({ default: () => null })); vi.mock("@/components/doctor/detailDoctor", () => ({ default: () => null })); vi.mock("@/components/doctor/claim", () => ({ default: () => null })); vi.mock("@/components/doctor/detailDoctor/Share", () => ({ default: () => null })); vi.mock("@/components/specialties/detail/Faq", () => ({ default: () => null })); // همان شش تخصص دکتر محمدباقر جهانتاب. const JAHANTAB = { name: "محمدباقر جهانتاب", specialties: [ { id: "13", name: "جراحی عمومی", parent_id: null }, { id: "14", name: "جراحی پلاستیک و زیبایی", parent_id: "13" }, { id: "167", name: "جراحی لاپاراسکوپی", parent_id: "13" }, { id: "168", name: "جراح تیروئید", parent_id: "13" }, { id: "169", name: "جراح گوارش", parent_id: "13" }, { id: "170", name: "جراحی سرطانها", parent_id: "13" }, ], }; describe("سربرگ صفحهٔ پزشک", () => { it("فقط تخصص اصلی را نشان می‌دهد، نه هر شش تا", () => { render(); expect(screen.getByRole("link", { name: "جراحی عمومی" })).toBeInTheDocument(); // بقیه اینجا نمی‌آیند؛ فهرست کامل در بدنهٔ صفحه است و آنجا می‌شکند. expect(screen.queryByText("جراح گوارش")).not.toBeInTheDocument(); expect(screen.queryByText("جراحی سرطانها")).not.toBeInTheDocument(); }); it("تخصص اصلی به صفحهٔ فرود همان تخصص لینک می‌دهد", () => { render(); expect(screen.getByRole("link", { name: "جراحی عمومی" })).toHaveAttribute( "href", "/specialties/general-surgery" ); }); it("نام پزشک با عنوان نمایش داده می‌شود", () => { render(); expect(screen.getByText(/محمدباقر جهانتاب/)).toBeInTheDocument(); }); it("پزشکِ فقط-زیرتخصص، همان زیرتخصص را در سربرگ می‌گیرد", () => { render( ); expect(screen.getByRole("link", { name: "جراح گوارش" })).toBeInTheDocument(); }); it("پزشک بدون تخصص سربرگ خالی می‌گیرد و کرش نمی‌کند", () => { expect(() => render() ).not.toThrow(); expect(screen.getByText(/محمدباقر جهانتاب/)).toBeInTheDocument(); }); });