fix: أخطاء «الصفر الصادق» + عزل حالة ioredis-mock في الاختبارات

أول تشغيل فعلي للاختبارات على السيرفر كشف خطأين حقيقيين في الكود، لا في
الاختبارات:

- RatingAggregateService.get: البذر يكتب count='0' لهدف بلا تقييمات، و'0'
  نصٌّ صادق في JS — ففحص !h.count لا يمسكه وكانت ترجع {avg:0,count:0} بدل
  null. صارت مقارنة رقمية.
- DriverLocationService.readHash: نفس الفخ — خط عرض '0' إحداثي صالح لكنه
  نصٌّ صادق؛ صار الفحص == null.

الاختبارات:
- ioredis-mock يشارك مخزناً واحداً بين النسخ رغم new RedisMock() — أُضيف
  flushall في كل beforeEach (تسرّبت مفاتيح بين الاختبارات).
- ioredis-mock لا ينفّذ geoadd داخل multi() ولا redis.call، فلا يمكن اختبار
  فهرس GEO به: صار MatchingService ضعفاً مزيّفاً في اختبارات المواقع،
  والتحقق ينصبّ على منطق العتبات. سلوك GEO الحقيقي يُتحقَّق على السيرفر.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Hamza-Ayed
2026-07-17 02:56:50 +03:00
co-authored by Claude Opus 4.8
parent 17c111a8f9
commit da37dffa44
6 changed files with 69 additions and 34 deletions
@@ -32,8 +32,10 @@ describe('TripStateService', () => {
let redis: any;
let state: TripStateService;
beforeEach(() => {
// ioredis-mock يشارك مخزناً واحداً بين النسخ — flushall يعزل كل اختبار.
beforeEach(async () => {
redis = new RedisMock({ keyPrefix: 'tripz:' });
await redis.flushall();
state = new TripStateService(redis);
});