import { describe, expect, it } from "vitest"; import { render, screen } from "@testing-library/react"; import Head from "@/components/blog/head"; const BLOG = { title: "آلرژی دارویی", author: "دکتر رضایی", created: 1750000000, reading_time: 5, tag: [{ name: "آلرژی" }, { name: "قلب و عروق" }], }; describe("سربرگ مقاله", () => { it("برچسب «مخصوص شهر» را نشان نمی‌دهد", () => { render(); expect(screen.queryByText("مخصوص شهر:")).toBeNull(); }); it("نویسنده و تاریخ انتشار سر جایشان می‌مانند", () => { render(); expect(screen.getByText("نویسنده:")).toBeInTheDocument(); expect(screen.getByText("تاریخ انتشار:")).toBeInTheDocument(); }); it("هر تگ به لیست مقاله‌های همان تگ لینک می‌شود", () => { render(); const links = screen.getAllByRole("link", { name: "قلب و عروق" }); const url = new URL(links[0].getAttribute("href"), "https://yasuj-nobat.ir"); expect(links).toHaveLength(1); expect(url.pathname).toBe("/blogs"); // قرارداد واقعی همان چیزی است که `searchParams.get("tag")` می‌خواند، // نه شکل دقیق encode — شکل شیئیِ href فاصله را `+` می‌کند و بردکرامب `%20`. expect(url.searchParams.get("tag")).toBe("قلب و عروق"); }); it("تگ حاوی & با پارامتر دوم اشتباه گرفته نمی‌شود", () => { render(); const links = screen.getAllByRole("link", { name: "قلب & عروق" }); const url = new URL(links[0].getAttribute("href"), "https://yasuj-nobat.ir"); expect(url.searchParams.get("tag")).toBe("قلب & عروق"); expect(Array.from(url.searchParams.keys())).toEqual(["tag"]); }); it("مقالهٔ بدون تگ هیچ فهرست تگی رندر نمی‌کند", () => { const { container } = render(); expect(container.querySelector("ul")).toBeNull(); }); });