Skip to main content

تست‌ها

پیش‌نیاز: Node 22، pnpm مخزن (11.10.0) و pnpm install --frozen-lockfile از ریشه. فرمان‌های این صفحه از manifest و workflow فعلی برداشته شده‌اند؛ اجرای موفق‌شان تضمین نشده و به محیط بستگی دارد.

قرارداد، وب و API​

از ریشه:

pnpm --filter @taghvimam/contracts test
pnpm --filter calendar-web test
pnpm --filter calendar-web test src/lib/sync # فقط موتور sync وب
pnpm --filter taghvimam-backend test:unit # فقط colorCoercion، بدون setup دیتابیس

هشدار: تست کامل API مخرب است و دادهٔ دیتابیس هدف را پاک می‌کند. فقط با مجوز صریحِ پاک‌سازی یک PostgreSQL دورریختنی اجرایش کنید. پیش از اجرا، .env.test و DATABASE_URL محیط را (بدون چاپ رمز) بررسی کنید — guard موجود فقط «اسم دیتابیس taghvimam_test» را می‌سنجد، نه آزمایشی‌بودن میزبان را. setup تست، migration نصب و cleanup حذف داده اجرا می‌کند.

پس از تأیید این پیش‌شرط‌ها:

pnpm --filter taghvimam-backend db:generate
pnpm --filter taghvimam-backend test

test از .env.test می‌خواند؛ test:ci از محیط workflow. مرجع تنظیم PostgreSQL: .github/workflows/api-ci.yml؛ تست‌های sync/receipt/providerId و apiContract در apps/api/tests/.

اندروید​

پیش‌نیاز: JDK 21 و Android SDK مطابق apps/mobile/gradle/libs.versions.toml (اکنون compile/target 37). از apps/mobile:

./gradlew testDebugUnitTest testAndroidHostTest
./gradlew :android:assembleDebug
./gradlew :core:network:compileCommonMainKotlinMetadata

محل تست‌ها: Room/نشست/موتور در core/{database,data}/src/androidHostTest و UI در feature/home/src/androidHostTest. خروجی Wasm آزمایشی است و در mobile-ci نیست.

journey با emulator​

مرجع کامل: apps/mobile/scripts/run-journey.sh. کلاس SyncJourneyTest را یک‌جا اجرا نکنید؛ rig به‌صورت مرحله‌به‌مرحله با قطع/وصل شبکه، force-stop و fixture ارتقای v1 کار می‌کند. این rig گراف واقعی برنامه را می‌آزماید — نه تعامل UI و نه مرورگر واقعی.

پیش‌شرط‌ها:

  1. emulator جداگانه با adb و پشتیبانی run-as، همراه APK debug برنامه و APK تست؛ python3 برای fixture.
  2. API آزمایشی روی tdh-dev-01:5000 با OTP آزمایشی (APP_ENV=development یا test) و دیتابیس دورریختنی taghvimam-test-pg / taghvimam_test؛ دسترسی SSH به آن میزبان.
  3. اجازهٔ صریح پاک‌سازی همین DB و برنامهٔ emulator: rig بدون پرسش، TRUNCATE … RESTART IDENTITY CASCADE و pm clear اجرا می‌کند.
  4. tunnel سالم؛ در ترمینال جدا:
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -N -L 5000:localhost:5000 tdh-dev-01

در ترمینال اجرا، ابتدا override اندروید را تنظیم و بررسی کنید:

adb shell setprop debug.taghvimam.sync.host http://10.0.2.2:5000
adb shell getprop debug.taghvimam.sync.host
curl -fsS -m 5 http://localhost:5000/health
# فقط بعد از تأیید مقصد آزمایشی و اخذ اجازهٔ پاک‌سازی، از ریشه:
./apps/mobile/scripts/run-journey.sh

قاعدهٔ حیاتی: خروجی getprop باید دقیقاً http://10.0.2.2:5000 باشد؛ خالی یعنی برنامه به API تولید وصل می‌شود. بعد از هر reboot مقدار را دوباره تنظیم و پیش از هر instrumentation چک کنید (خود rig هم چک می‌کند). متغیرهای override: ANDROID_SERIAL و SSH_HOST. اجرای تک‌مرحله‌ای فقط وقتی معتبر است که state و قدم‌های میزبانِ مراحل قبل انجام شده باشند.

مستندات و CI​

پوشهٔ docs/ پروژهٔ مستقل npm است:

npm ci --prefix docs
npm test --prefix docs
npm run check:governance --prefix docs
npm run build --prefix docs

نقش workflowها: api-ci قرارداد و API؛ web-ci وب و Storybook؛ mobile-ci host test و Android؛ kotlin-client drift؛ docs لینک و ساخت. توجه: تست واحد، جای اجرای مسیر واقعی روی API آزمایشی یا دیدن UI را نمی‌گیرد.