feat: Enhance specialty handling and navigation across doctor and specialty pages
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { render, screen } from "@testing-library/react";
|
||||
import specialtiesData from "@/data/specialties.json";
|
||||
import SpecialtyDetailPage from "@/components/specialties/detail";
|
||||
|
||||
const byName = (name) => specialtiesData.find((s) => s.name === name);
|
||||
|
||||
const GENERAL_SURGERY = byName("جراحی عمومی");
|
||||
const GI = byName("جراح گوارش");
|
||||
|
||||
const renderPage = (specialty) =>
|
||||
render(
|
||||
<SpecialtyDetailPage
|
||||
specialty={specialty}
|
||||
specialtyName={specialty.name}
|
||||
cityName="یاسوج"
|
||||
doctors={[]}
|
||||
intro="متن مقدمه"
|
||||
faq={[]}
|
||||
origin="https://yasuj-nobat.ir"
|
||||
slug={specialty.slug}
|
||||
/>
|
||||
);
|
||||
|
||||
/** حلقههای breadcrumd بهترتیب. */
|
||||
const crumbs = () =>
|
||||
Array.from(
|
||||
screen.getByRole("navigation", { name: "breadcrumb" }).querySelectorAll("li")
|
||||
).map((li) => li.textContent.replace(/>/g, "").trim());
|
||||
|
||||
describe("breadcrumb صفحهٔ تخصص", () => {
|
||||
it("صفحهٔ زیرتخصص حلقهٔ والد را دارد", () => {
|
||||
renderPage(GI);
|
||||
|
||||
expect(crumbs()).toEqual(["خانه", "تخصصها", GENERAL_SURGERY.name, GI.name]);
|
||||
});
|
||||
|
||||
it("حلقهٔ والد به صفحهٔ گروه لینک میدهد", () => {
|
||||
renderPage(GI);
|
||||
|
||||
expect(
|
||||
screen.getByRole("link", { name: GENERAL_SURGERY.name })
|
||||
).toHaveAttribute("href", `/specialties/${GENERAL_SURGERY.slug}`);
|
||||
});
|
||||
|
||||
it("صفحهٔ ریشه حلقهٔ والد اضافه نمیگیرد", () => {
|
||||
renderPage(GENERAL_SURGERY);
|
||||
|
||||
expect(crumbs()).toEqual(["خانه", "تخصصها", GENERAL_SURGERY.name]);
|
||||
});
|
||||
|
||||
it("JSON-LD همان حلقهها را دارد — نما و schema واگرا نمیشوند", () => {
|
||||
const { container } = renderPage(GI);
|
||||
|
||||
const script = container.querySelector('script[type="application/ld+json"]');
|
||||
const jsonLd = JSON.parse(script.innerHTML);
|
||||
|
||||
expect(jsonLd["@type"]).toBe("BreadcrumbList");
|
||||
expect(jsonLd.itemListElement.map((i) => i.name)).toEqual([
|
||||
"خانه",
|
||||
"تخصصها",
|
||||
GENERAL_SURGERY.name,
|
||||
GI.name,
|
||||
]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user