توثيق الموديولز
حالات اختبار الجودة
حالات اختبار وظيفية، واجهة، تجاوب، RTL، SEO.
مكتمل
الـ QC للتقويم يغطّي 6 أسطح × 16 دولة × 17 فئة. حالات الاختبار تتجَمَّع في: التوجيه (كل الـ 14 مسار تُرجع 200)، الرسم (شارات الحالة تُحتسَب صحيحاً)، سلامة البيانات (IDs cross-module تُحلّ)، دقّة الـ schema (JSON-LD يتحقّق مقابل schema.org)، تكافؤ اللغة (EN + AR يُرسَمان عند تغطية كاملة)، وإمكانية الوصول (تنقّل لوحة المفاتيح + تسميات قارئ الشاشة).
اختبارات التوجيه
- /calendar يُرجع 200 في EN + AR.
- /calendar/events يُرجع 200 مع كل الفعاليات مرئية.
- كل واحد من الـ 16 مسار /calendar/events/countries/:slug يُرجع 200.
- كل واحد من الـ 17 مسار /calendar/events/categories/:slug يُرجع 200.
- slug مجهول تحت /calendar/events/:slug يُرجع 404 (ليس 500) ويُرسم تخطيط not-found.
- /calendar/submit يُرجع 200 مع النموذج تفاعلي.
اختبارات شارة الحالة
- فعالية بـ startDate في المستقبل + لا موعد → badge="upcoming".
- فعالية بـ applicationDeadline خلال 3 أيام → badge="closing-soon" مع صبغة warning.
- فعالية بـ startDate=now-1h، endDate=now+2h → badge="live" مع حركة نبضة.
- فعالية بـ endDate=أمس → badge="completed" مع صبغة فاقدة التشبّع.
- محرّر يضبط status="cancelled" → الشارة تعرض "cancelled" + الـ CTAs مُعطَّلة + JSON-LD eventStatus=EventCancelled.
اختبارات سلامة البيانات
- كل relatedFounderId يُحلّ لمؤسّس موجود في mock-founders. الـ IDs المكسورة تُجرَّد بصمت.
- تفرّد الـ slug: لا فعالييتان تشاركان slug عبر مجموعة البيانات.
- الحقول المطلوبة لكل نموذج: غياب أيّ حقل مطلوب يُفشل البناء (TypeScript يلتقط عند الترجمة).
- mode='online' بدون onlineUrl، أو mode='physical' بدون venue/city: المحرّر يُعلِّم عند حفظ admin.
اختبارات دقّة الـ schema
- JSON-LD صفحة التفاصيل يتحقّق مقابل Google Rich Results Test for Event.
- eventAttendanceMode يطابق حقل mode (offline/online/mixed).
- organizer.@type=Organization مع name + url موجودَيْن.
- location هو Place (physical) أو VirtualLocation (online) — لا غائب.
