Files
nobat724_front/lib/specialtyContent.test.js
T

80 lines
3.6 KiB
JavaScript

import { describe, expect, it } from "vitest";
import { buildSpecialtyFaq, buildSpecialtyIntro } from "@/lib/specialtyContent";
import { buildClinicsIntro } 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));
});
});
// متن /doctors حذف شد — آن صفحه فقط کارت پزشک‌ها را نشان می‌دهد، پس
// buildDoctorsIntro و مخزن متنش هم برداشته شدند. اینجا فقط /clinics می‌ماند.
describe("متن مقدمهٔ صفحهٔ کلینیک‌ها (M2)", () => {
it("بین ۱۰۰ تا ۳۰۰ کلمه", () => {
for (const city of CITIES) {
const text = buildClinicsIntro(city);
expect(words(text), `${city} = ${words(text)}`).toBeGreaterThanOrEqual(100);
expect(words(text), `${city} = ${words(text)}`).toBeLessThanOrEqual(300);
}
});
it("ساختار متن بین شهرها متفاوت است", () => {
const texts = CITIES.map((city) => buildClinicsIntro(city));
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");
});
it("روی دامنهٔ شهری نام شهر در سوال می‌نشیند", () => {
const question = buildSpecialtyFaq("اندویورولوژی", "یاسوج", 3)[0].question;
expect(question).toBe("چطور می‌توان از متخصص اندویورولوژی در یاسوج نوبت گرفت؟");
});
it("روی دامنهٔ ریشه به‌جای «ایران» برند می‌نشیند", () => {
const question = buildSpecialtyFaq("اینترونشنال کاردیولوژی", "ایران", 3, {
isRoot: true,
})[0].question;
expect(question).toBe(
"چطور می‌توان از متخصص اینترونشنال کاردیولوژی در نوبت724 نوبت گرفت؟"
);
expect(question).not.toContain("ایران");
});
});