import { describe, expect, it } from "vitest"; import { buildSpecialtyFaq, buildSpecialtyIntro } from "@/lib/specialtyContent"; import { buildClinicsIntro, buildDoctorsIntro } from "@/lib/listingIntro"; const words = (text) => text.trim().split(/\s+/).length; const CITIES = ["تهران", "یاسوج", "یزد", "تبریز", "اصفهان", "مشهد", "ایران"]; const SPECIALTIES = ["پوست و مو", "قلب و عروق", "داخلی", "اطفال"]; describe("متن مقدمهٔ تخصص (M2)", () => { it("هر ترکیب تخصص/شهر بین ۱۵۰ تا ۳۰۰ کلمه است", () => { for (const specialty of SPECIALTIES) { for (const city of CITIES) { const count = words(buildSpecialtyIntro(specialty, city, 12)); expect(count, `${specialty}/${city} = ${count}`).toBeGreaterThanOrEqual(150); expect(count, `${specialty}/${city} = ${count}`).toBeLessThanOrEqual(300); } } }); it("متن شهرهای مختلف یکسان نیست", () => { const texts = CITIES.map((city) => buildSpecialtyIntro("پوست و مو", city, 5)); expect(new Set(texts).size).toBe(CITIES.length); }); it("خروجی پایدار است (بین دو فراخوانی تغییر نمی‌کند)", () => { expect(buildSpecialtyIntro("داخلی", "یزد", 3)).toBe(buildSpecialtyIntro("داخلی", "یزد", 3)); }); }); describe("متن مقدمهٔ صفحات لیست (M2)", () => { it("بین ۱۵۰ تا ۳۰۰ کلمه", () => { for (const city of CITIES) { for (const text of [buildDoctorsIntro(city), buildClinicsIntro(city)]) { expect(words(text), `${city} = ${words(text)}`).toBeGreaterThanOrEqual(100); expect(words(text), `${city} = ${words(text)}`).toBeLessThanOrEqual(300); } } }); it("ساختار متن بین شهرها متفاوت است", () => { const texts = CITIES.map(buildDoctorsIntro); expect(new Set(texts).size).toBe(CITIES.length); }); }); describe("سوالات متداول تخصص (M1)", () => { it("هر سوال متن پاسخ دارد", () => { const faq = buildSpecialtyFaq("قلب و عروق", "تهران", 7); expect(faq.length).toBeGreaterThanOrEqual(4); for (const item of faq) { expect(item.question).toBeTruthy(); expect(item.answer.length).toBeGreaterThan(30); } }); it("تعداد پزشک صفر، جملهٔ متفاوت می‌سازد", () => { const withCount = buildSpecialtyFaq("داخلی", "یزد", 9)[1].answer; const without = buildSpecialtyFaq("داخلی", "یزد", 0)[1].answer; expect(withCount).not.toBe(without); expect(withCount).toContain("9"); }); });