Commit Graph
4 Commits
Author SHA1 Message Date
Hamza-AyedandClaude Opus 4.8 2045896b95 fix(test): expect fixed to be rejected + flush tariff cache before testing
الدورة السابقة أعلنت الفشل والنظام سليم — العطل كان في السكربت:

1. **`fixed` تُرفض بـ400 وهذا هو المطلوب** (أُخرجت من الزرع عمداً)، لكن
   السكربت كان يعدّها فئة متوقَّعة فأسقط التغطية إلى 72/81. صارت في
   `REJECTED_CLASSES`: الرفض يُتحقَّق منه صراحةً، وغيابه هو الفشل.

2. **429 على `send-otp`** (10 لكل 5 دقائق) عند تشغيلتين متتاليتين — يُنتظر
   ويُعاد بدل الإبلاغ عن فشل ليس في النظام.

3. **إبطال كاش التعرفة صار خطوة في الدورة.** `getActive` تكاشي 900 ثانية،
   و**Redis حاوية منفصلة لا تتأثر بإعادة تشغيل الـapi** — وتطبيق
   `tariffs.sql` مباشرةً على القاعدة يتجاوز التطبيق فلا يُبطل شيئاً. النتيجة
   أن النظام خدم أسعاراً قديمة عبر دورتَي نشر كاملتين وهو يعلن النجاح.
   المسح الآن مبنيّ في السكربت لا متروك للتذكّر.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 02:09:05 +03:00
Hamza-AyedandClaude Opus 4.8 5838e92980 fix(test): read OTP from Redis instead of requiring OTP_DEV_MODE
نصيحتي السابقة بتفعيل `OTP_DEV_MODE=true` على السيرفر كانت خاطئة: حارس في
`main.ts` يرفض الإقلاع عند `OTP_DEV_MODE=true` مع `NODE_ENV=production`،
فسقطت حاوية الـapi في حلقة إعادة تشغيل وظهر الفشل كـ`EAI_AGAIN` في السكربت.

الحارس صحيح ولا يُضعَف لأجل اختبار: رمز ثابت على سيرفر متاح للإنترنت يعني
أن معرفة رقم هاتف تكفي لدخول أي حساب.

السكربت صار يقرأ الرمز الحقيقي من Redis (`send-otp` يخزّنه قبل محاولة
الإرسال، فيبقى محفوظاً حتى حين يفشل الإرسال لرقم وهمي). عميل RESP أدنى على
`node:net` بلا تبعيات — الحاوية عابرة بلا `node_modules`. المفتاح يستعمل
UUID المستأجر لا الـslug، فتُجلب خريطة الـslug→UUID من `/admin/tenants`.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 01:01:51 +03:00
Hamza-AyedandClaude Opus 4.8 7501b0bb33 fix(test): pricing script declared success after doing nothing
عطلان في سكربت التسعير، كشفهما أول تشغيل حقيقي:

1. **إعلان نجاح على العدم** — الأخطر. فشل تسجيل الدخول فجُمع صفر صفّ، فمرّ
   كل تحقّق فراغاً وطبع «الاختبار ناجح». اختبار يعلن النجاح وهو لم ينفّذ
   شيئاً أسوأ من اختبار يفشل: الفشل يُرى. أُضيف حارس عدم + تحقّق تغطية
   (المنفَّذ مقابل المتوقَّع)، وكلاهما يُخرج برمز فشل.

2. **تسجيل الدخول تجاوز `send-otp`** — تجاوز التطوير في `verifyOtp` مشروط
   بـ`OTP_DEV_MODE=true`، وبدونه لا رمز في Redis فيُرفض الثابت 1234 بـ401.
   صار يمرّ بـ`send-otp` ويأخذ `dev_code` من استجابتها، ويقول صراحةً حين
   يكون الوضع التطويري مطفأً بدل أن يفشل بلا تفسير.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 00:54:13 +03:00
Hamza-AyedandClaude Opus 4.8 90c3f71430 test: add live pricing script across all service classes and countries
يطلب رحلة حقيقية لكل فئة خدمة (9) × 3 مسافات × 3 بلدان عبر الـAPI الحي،
فالمسافة والزمن يأتيان من محرّك المسارات (انطلق) لا من افتراض.

يتحقّق آلياً من أمرين كانا عطلين حقيقيين قبل المجموعة M:
- ولا طلب يرجع بلا سعر (التعرفة المفقودة كانت تنتج رحلة مجانية بعمولة صفر).
- الفان أغلى من الاقتصادي في كل بلد (الأرقام الخام السابقة عكست الترتيب).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 00:40:30 +03:00