ifnex/UAT-3.11.md
Kazem Alghasi 8d61eb19d5 feat(uat): implement smoke test command and UAT documentation
Add `ifnex:smoke-test` console command to perform automated end-to-end
checks post-deployment, including database connectivity, essential
data presence, and API endpoint availability.

- Implement `IfnexSmokeTest` command for automated system verification
- Add feature tests for the smoke test command
- Create `UAT-3.11.md` containing the client acceptance checklist
- Update `CLIENT_DELIVERY.md` to reflect phase 3.10 and 3.11 completion
- Register the new command in `bootstrap/app.php`
- Add project documentation directory
2026-11-01 11:36:25 +03:30

259 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 📋 چک‌لیست تست پذیرش نهایی کارفرما (UAT) — فاز ۳.۱۱
> **پروژه:** IFNEX — سیستم بین‌المللی حمل‌ونقل و باربری
> **فاز:** ۳.۱۱ — User Acceptance Testing (UAT)
> **تاریخ:** ۱۴۰۴/۰۸/۱۱
> **نسخه کد:** phase-3.10.1 + phase-3.11
> **مخزن:** [git.vernahost.ir/gitmodir110/ifnex](https://www.git.vernahost.ir/gitmodir110/ifnex)
---
## 🎯 هدف
این سند چک‌لیست رسمی تست پذیرش نهایی (UAT) پروژه IFNEX است. پس از تکمیل
دیپلوی روی سرور Production، کارفرما باید این ۴۳ مورد را به‌ترتیب تست و
تأیید کند. هر مورد باید با یک ✓ ثبت شود. در صورت شکست هر مورد، آن را با ✗
علامت بزنید و در بخش «اشکالات یافت‌شده» در انتهای سند ثبت کنید.
**معیار قبولی نهایی:** همهٔ ۴۳ مورد باید ✓ شوند (یا به‌صورت رسمی به‌عنوان
«تأخیری» علامت‌گذاری شوند).
---
## 🔧 پیش‌نیازها (پیش از شروع UAT)
این موارد باید توسط تیم فنی قبل از شروع UAT تکمیل شده باشند:
- [ ] سرور Laravel روی `https://system.ifnex.ir` در دسترس است
- [ ] سرور WordPress روی `https://ifnex.ir` در دسترس است
- [ ] گواهی SSL برای هر دو دامنه فعال است
- [ ] `php artisan ifnex:preflight` سبز است
- [ ] `php artisan ifnex:smoke-test` سبز است (تست خودکار E2E)
- [ ] `php artisan test` سبز است (۷۳+ تست)
- [ ] نرخ ارز واقعی import شده (`currencies` جدول)
- [ ] حساب ادمین Filament ساخته شده و نقش `super_admin` دارد
- [ ] کاربر مشتری تستی در وردپرس ساخته شده
- [ ] درگاه پرداخت Zarinpal واقعی تنظیم شده (`SANDBOX=false`)
- [ ] سرویس پیامک Kavenegar تنظیم شده (در صورت موجود بودن کلید)
- [ ] کرون روزانه نرخ ارز فعال است
---
## 📊 خلاصهٔ چک‌لیست
| بخش | تعداد موارد | صفحه |
|------|------------|------|
| ۱. دسترسی و SSL | ۳ | ۳ |
| ۲. احراز هویت مشتری | ۴ | ۳ |
| ۳. فرم سفارش Export | ۵ | ۴ |
| ۴. فرم سفارش Import | ۴ | ۴ |
| ۵. دفترچه آدرس (فاز ۳.۹) | ۳ | ۵ |
| ۶. اسناد PDF | ۴ | ۵ |
| ۷. تأیید سفارش توسط کارمند | ۳ | ۶ |
| ۸. چک‌لیست کارمند | ۲ | ۶ |
| ۹. پرداخت با کیف پول | ۲ | ۷ |
| ۱۰. پرداخت آنلاین (Zarinpal) | ۲ | ۷ |
| ۱۱. کد تخفیف | ۲ | ۷ |
| ۱۲. داشبورد و وضعیت مالی | ۳ | ۸ |
| ۱۳. اعتبار چندارزی | ۲ | ۸ |
| ۱۴. رهگیری مرسوله | ۲ | ۹ |
| ۱۵. پنل مدیریت Filament | ۲ | ۹ |
| **مجموع** | **۴۳** | |
---
## ۱. دسترسی و SSL (۳ مورد)
- [ ] **۱.۱** باز کردن `https://ifnex.ir` — صفحهٔ اصلی وردپرس بدون خطا باز می‌شود
- [ ] **۱.۲** باز کردن `https://system.ifnex.ir/up` — پاسخ `200 OK` با کلمهٔ `OK`
- [ ] **۱.۳** باز کردن `https://system.ifnex.ir/panel/login` — صفحهٔ ورود Filament باز می‌شود
## ۲. احراز هویت مشتری (۴ مورد)
- [ ] **۲.۱** ثبت‌نام مشتری جدید از طریق وردپرس — کاربر در دیتابیس لاراول هم ساخته می‌شود
- [ ] **۲.۲** ورود مشتری از طریق وردپرس — توکن Sanctum صادر می‌شود و در localStorage ذخیره
- [ ] **۲.۳** ورود ناموفق با رمز اشتباه — پیام خطای واضح نمایش داده می‌شود
- [ ] **۲.۴** خروج (Logout) — توکن باطل می‌شود و کاربر به صفحهٔ اصلی هدایت می‌شود
## ۳. فرم سفارش Export (۵ مورد)
- [ ] **۳.۱** باز کردن فرم سفارش — قدم ۱ (اطلاعات کلی) بدون خطا Load می‌شود
- [ ] **۳.۲** حرکت به قدم ۲ — پس از تکمیل قدم ۱، قدم ۲ (فرستنده/گیرنده) باز می‌شود
- [ ] **۳.۳** انتخاب کشور از dropdown — لیست کشورها از API لاراول می‌آید (حداقل ۱۰۰ کشور)
- [ ] **۳.۴** محاسبه قیمت آنلاین — دکمهٔ «استعلام قیمت» مبلغ ریالی را برمی‌گرداند
- [ ] **۳.۵** ثبت سفارش — سفارش با وضعیت `pending_approval` در دیتابیس ثبت می‌شود
## ۴. فرم سفارش Import (۴ مورد)
- [ ] **۴.۱** انتخاب نوع Import در قدم ۱ — فرم برای Import سازگار است
- [ ] **۴.۲** پر کردن فرستنده/گیرنده در Import — فیلدها با موفقیت ذخیره می‌شوند
- [ ] **۴.۳** استعلام قیمت Import — مبلغ صحیح برمی‌گردد (۴ ربع: Export/Import × Doc/Parcel)
- [ ] **۴.۴** ثبت سفارش Import — سفارش با وضعیت `pending_approval` ثبت می‌شود
## ۵. دفترچه آدرس (فاز ۳.۹) (۳ مورد)
- [ ] **۵.۱** افزودن آدرس به دفترچه — از پنل کاربری وردپرس، تب «دفترچه آدرس» → افزودن آدرس جدید
- [ ] **۵.۲** انتخاب آدرس از dropdown در فرم سفارش — فیلدها با یک کلیک پر می‌شوند
- [ ] **۵.۳** چک‌باکس «ذخیره این آدرس» — پس از ثبت سفارش، آدرس در دفترچه ذخیره شده (بدون رکورد تکراری)
## ۶. اسناد PDF (۴ مورد)
- [ ] **۶.۱** دانلود AWB — PDF با بارکد قابل اسکن تولید می‌شود
- [ ] **۶.۲** دانلود Invoice — PDF با اطلاعات صحیح مشتری و مبلغ
- [ ] **۶.۳** دانلود Label — PDF A5 افقی با بارکد بزرگ (بدون برند IFNEX)
- [ ] **۶.۴** دانلود Import Invoice — PDF با شیت ENG Invoice
## ۷. تأیید سفارش توسط کارمند (۳ مورد)
- [ ] **۷.۱** مشاهدهٔ سفارش در پنل Filament — سفارش در لیست `pending_approval` دیده می‌شود
- [ ] **۷.۲** تأیید سفارش — سفارش به `approved` تغییر وضعیت می‌دهد و چک‌لیست خودکار ساخته می‌شود
- [ ] **۷.۳** رد سفارش — با دلیل، سفارش به `rejected` تغییر وضعیت می‌دهد و به مشتری اعلان می‌رود
## ۸. چک‌لیست کارمند (۲ مورد)
- [ ] **۸.۱** مشاهدهٔ چک‌لیست — آیتم‌های چک‌لیست پس از تأیید سفارش به‌صورت خودکار ساخته می‌شوند
- [ ] **۸.۲** تکمیل یک آیتم — کارمند می‌تواند با یادداشت و پیوست، آیتم را کامل کند
## ۹. پرداخت با کیف پول (۲ مورد)
- [ ] **۹.۱** پرداخت سفارش از کیف پول — مبلغ از موجودی کم می‌شود و سفارش `paid` می‌شود
- [ ] **۹.۲** پرداخت با موجودی ناکافی — پیام خطای واضح (بدون کسر از کیف پول)
## ۱۰. پرداخت آنلاین Zarinpal (۲ مورد)
- [ ] **۱۰.۱** شارژ کیف پول از درگاه — redirect به Zarinpal، بازگشت با تراکنش `completed`
- [ ] **۱۰.۲** پرداخت سفارش از درگاه — فلوی کامل: سفارش → redirect → بازگشت → `paid`
## ۱۱. کد تخفیف (۲ مورد)
- [ ] **۱۱.۱** اعمال کد تخفیف معتبر — مبلغ استعلام قیمت با تخفیف صحیح محاسبه می‌شود
- [ ] **۱۱.۲** رد کد تخفیف منقضی — پیام خطای واضح و `used_count` افزایش نمی‌یابد
## ۱۲. داشبورد و وضعیت مالی (۳ مورد)
- [ ] **۱۲.۱** داشبورد مشتری — موجودی کیف پول، سفارش‌های اخیر، اعلان‌ها نمایش داده می‌شود
- [ ] **۱۲.۲** تب تراکنش‌ها — لیست تراکنش‌ها با نوع و مبلغ و تاریخ
- [ ] **۱۲.۳** مانده حساب — `Wallet Balance − Outstanding Approved Obligations` صحیح محاسبه می‌شود
## ۱۳. اعتبار چندارزی (۲ مورد)
- [ ] **۱۳.۱** اعطای اعتبار توسط super_admin — بدهی به همان ارز ثبت می‌شود (نه معادل ریالی)
- [ ] **۱۳.۲** تسویهٔ ریالی اعتبار — با نرخ روز، بدهی ارزی به ریال تبدیل و از کیف پول کم می‌شود
## ۱۴. رهگیری مرسوله (۲ مورد)
- [ ] **۱۴.۱** صفحهٔ `/tracking/` با AWB معتبر — وضعیت و تاریخچه نمایش داده می‌شود
- [ ] **۱۴.۲** صفحهٔ `/tracking/` با AWB نامعتبر — پیام ۴۰۴/۴۲۲ (نه ۵۰۰)
## ۱۵. پنل مدیریت Filament (۲ مورد)
- [ ] **۱۵.۱** ورود به پنل با `super_admin` — دسترسی به همهٔ منوها
- [ ] **۱۵.۲** صفحهٔ «وضعیت مالی مشتری» — ۴ کارت KPI + بدهی‌های ارزی + سفارش‌های اخیر
---
## 🐛 اشکالات یافت‌شده
هر موردی که ✗ خورد را اینجا با جزئیات ثبت کنید:
| # | مورد | شرح اشکال | شدت | وضعیت |
|---|------|-----------|------|------|
| ۱ | | | 🔴 بحرانی / 🟡 متوسط / 🟢 خفیف | باز / در حال بررسی / رفع شده |
| ۲ | | | | |
| ۳ | | | | |
| ۴ | | | | |
| ۵ | | | | |
---
## ✍️ فرم امضای تحویل
پس از تکمیل همهٔ ۴۳ مورد:
```
═══════════════════════════════════════════════════════════════════
فرم امضای تحویل نهایی
═══════════════════════════════════════════════════════════════════
پروژه: IFNEX — سیستم بین‌المللی حمل‌ونقل و باربری
نسخه: phase-3.11
تاریخ تحویل: ۱۴۰۴/۰۸/۱۱
تاریخ تست: ____/____/۱۴۰۴
تعداد موارد تست‌شده: ____ از ۴۳
موعدت سبز شده: ____
موارد قرمز (اشکال): ____
موارد به‌تعویق‌افتاده: ____
───────────────────────────────────────────────────────────────────
نماینده کارفرما (IFNEX):
نام: ______________________________
سمت: ______________________________
امضا: ______________________________
تاریخ: ____/____/۱۴۰۴
───────────────────────────────────────────────────────────────────
تیم توسعه‌دهنده (VernaSoft):
نام: Kazem Alghasi
سمت: توسعه‌دهنده ارشد
امضا: ______________________________
تاریخ: ____/____/۱۴۰۴
═══════════════════════════════════════════════════════════════════
وضعیت نهایی پروژه:
[ ] پذیرفته شد — آمادهٔ انتشار رسمی
[ ] پذیرفته شد با اشکالات خفیف — رفع در نسخهٔ بعدی
[ ] پذیرفته نشد — نیاز به اصلاح و تست مجدد
═══════════════════════════════════════════════════════════════════
```
---
## 🚀 تست خودکار E2E (برای تیم فنی)
پیش از شروع UAT دستی توسط کارفرما، تیم فنی باید این تست خودکار را اجرا کند:
```bash
cd /var/www/system.ifnex.ir
# ۱. تست‌های خودکار واحد
php artisan test
# انتظار: 82+ passed (73 قبلی + 9 جدید smoke-test)
# ۲. بررسی پیش‌از-دیپلوی (دوباره)
php artisan ifnex:preflight
# انتظار: همهٔ بررسی‌ها سبز
# ۳. تست E2E Post-Deploy
php artisan ifnex:smoke-test
# انتظار: همهٔ بررسی‌ها سبز (شامل API endpoints)
# ۴. اگر از دامنهٔ دیگری استفاده می‌کنید:
php artisan ifnex:smoke-test --url=https://system.ifnex.ir
```
اگر هر کدام قرمز بود، UAT را شروع نکنید — ابتدا مشکل را رفع کنید.
---
## 📞 اطلاعات تماس
| مورد | مقدار |
|------|------|
| توسعه‌دهنده | VernaSoft Group — Kazem Alghasi |
| ایمیل | kazem@vernasoft.group |
| مخزن گیت | [git.vernahost.ir/gitmodir110/ifnex](https://www.git.vernahost.ir/gitmodir110/ifnex) |
| سرور Laravel | `https://system.ifnex.ir` |
| سرور WordPress | `https://ifnex.ir` |
---
> **نکتهٔ نهایی:** این سند پس از امضای هر دو طرف، به‌عنوان سند رسمی تحویل
> پروژه در آرشیو نگهداری می‌شود. هر تغییر بعدی در نسخه‌های آتی باید با
> سند تغییرات (changelog) همراه باشد.