تستها
نحو هٔ اجرا
# کلاینت وب (Vitest + Testing Library + fake-indexeddb)
npm test --workspace calendar-web
# بکاند (Jest + supertest، نیازمند DB)
npm test --workspace taghvimam-backend
# بکاند، فقط تستهای واحدِ بدون DB
npm run test:unit --workspace taghvimam-backend
تستهای بکاند روی یک PostgreSQL آزمایشی اجرا میشوند. URL پیشفرض
postgresql://postgres:password@localhost:5433/taghvimam_test است (با DATABASE_URL
در apps/api/.env.test قابل بازنویسی) و setup-db.ts خودش prisma migrate deploy
را روی آن میزند. متغیر SYNC_CURSOR_SECRET هم لازم است؛ در نبودِ .env.test یک
مقدار پیشفرض در setup.ts تعیین میشود.
پوشش بکاند
۱۱ suite در apps/api/tests/:
| Suite | پوشش |
|---|---|
auth.test.ts | OTP، JWT، refresh، logout |
deviceAuth.test.ts | احراز هویتِ مبتنی بر دستگاه + تشخیص replay |
endpoint.test.ts | integration کلیِ endpointها |
versionTrigger.test.ts | trigger دیتابیس (version + uid) |
cursorService.test.ts | امضا و اعتبارسنجیِ HMAC cursor |
syncPush.test.ts | push با LWW + banking تعارض؛ roundtrip و اعتبارسنجیِ rrule/exdate |
syncPull.test.ts | pull با cursor قفلشده |
syncTask.test.ts | push/pull وظیفه (آینهٔ رویداد) |
syncConflict.test.ts | لیست و حل تعارض |
syncEndpoint.test.ts | integration مسیرهای /api/sync/* |
colorCoercion.test.ts | تبدیل و اعتبارسنجی رنگ |
test:unit فقط colorCoercion را اجرا میکند (با SKIP_DB_SETUP=1 و بدون
دیتابیس).
پوشش کلاینت وب
حدود ۳۳ فایل تست (Vitest) که لایهٔ آفلایناولِ اپ وب را پوشش میدهند:
| دسته | وضعیت |
|---|---|
Auth: AuthContext، ProtectedRoute، LoginPage، api | ✅ |
| API client (refresh، error handling، 401 retry) + token store | ✅ |
| Dexie repository و schema دیتابیس محلی | ✅ |
| موتور همگامسازی: push/pull/hardening/conflicts + syncApi + leader election | ✅ |
Events: local (Dexie) + mappers + recurrence | ✅ |
Calendars: local (Dexie) + mappers | ✅ |
Tasks: local (Dexie) + mappers | ✅ |
Reminders: local (Dexie) + mappers | ✅ |
| Sync hooks | ✅ |
hookهای عمومی (useRepositoryQuery، useIsMobile، useWindowSizeClass) | ✅ |
| ابزارهای فارسی و جلالی (شامل سال کبیسه) | ✅ |
کامپوننتهای UI: states، Modal، NavigationRail، BottomNav | ✅ |
| تستهای یکپارچه و جریان کاربر در سطح صفحه | ❌ پوشش داده نشده |
دروازههای CI مرتبط با مستندات و کلاینت
علاوه بر تستها، سه workflow در .github/workflows/ مستندات و کدِ تولیدی را در
برابرِ drift قفل میکنند:
| Workflow | چه چیزی را قفل میکند |
|---|---|
docs.yml | تازگیِ apps/api/openapi.json — بازتولید از قراردادهای Zod و @swaggerِ مسیرها و مقایسه با نسخهٔ commitشده — پوششِ مستندسازیِ همهٔ routeها، و build سایت Docusaurus (لینکِ خراب = شکستِ PR). Redocly lint فقط advisory است. |
kotlin-client.yml | بازتولیدِ کلاینتِ Kotlin با ./scripts/gen-kotlin-client.sh و شکست روی اختلاف با نسخهٔ checked-in در apps/mobile/core/network. |
mobile-ci.yml | بیلدِ :android:assembleDebug و کامپایلِ :core:network:compileCommonMainKotlinMetadata؛ کامپایلِ wasmJs موقتاً غیرفعال است. |