Skip to main content

تست‌ها

نحوهٔ اجرا

# کلاینت وب (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.tsOTP، JWT، refresh، logout
deviceAuth.test.tsاحراز هویتِ مبتنی بر دستگاه + تشخیص replay
endpoint.test.tsintegration کلیِ endpoint‌ها
versionTrigger.test.tstrigger دیتابیس (version + uid)
cursorService.test.tsامضا و اعتبارسنجیِ HMAC cursor
syncPush.test.tspush با LWW + banking تعارض؛ roundtrip و اعتبارسنجیِ rrule/exdate
syncPull.test.tspull با cursor قفل‌شده
syncTask.test.tspush/pull وظیفه (آینهٔ رویداد)
syncConflict.test.tsلیست و حل تعارض
syncEndpoint.test.tsintegration مسیرهای /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 موقتاً غیرفعال است.