تستها
پیشنیاز: 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 و ن ه مرورگر واقعی.
پیششرطها:
- emulator جداگانه با
adbو پشتیبانیrun-as، همراه APK debug برنامه و APK تست؛python3برای fixture. - API آزمایشی روی
tdh-dev-01:5000با OTP آزمایشی (APP_ENV=developmentیاtest) و دیتابیس دورریختنیtaghvimam-test-pg/taghvimam_test؛ دسترسی SSH به آن میزبان. - اجازهٔ صریح پاکسازی همین DB و برنامهٔ emulator: rig بدون پرسش،
TRUNCATE … RESTART IDENTITY CASCADEوpm clearاجرا میکند. - 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 را نمیگیرد.