Local test — WELIFE
Chạy trên máy dev. Secrets:
secrets/LOCAL-CREDENTIALS.md(gitignore). Env: 07-ENVIRONMENT.md · Plan chain: WP-CHAIN-PLAN.md
Trước khi test
Windows (PowerShell)
npm run setup # lần đầu
npm run dev:up # PG + Redis + MinIO + Mailpit + migrate + env:check
npm run api:dev # terminal 1
npm run dev:smoke # sau khi API listen
npm run mobile:start # terminal 2 (Consumer Expo · WP-ENV-EXPO-01)
npm run mobile:start:lan # Expo Go trên device (LAN)
# optional: mobile:start:prod · mobile:reset:metro
# optional
npm run driver:start # :8082
npm run partner:start # :8083
Bash
npm run infra:up
npm run env:check
npm run api:dev # terminal 1
# optional
cd api && npx prisma migrate deploy && npm run prisma:seed
npm run mobile:start # terminal 2 (Consumer Expo)
npm run driver:start # terminal 3 (Driver Expo :8082)
npm run partner:start # terminal 4 (Partner Expo :8083)
| URL | Mục đích |
|---|---|
| http://localhost:3000/api/v1 | API index (links) |
| http://localhost:3000/api/v1/health | API sống |
| http://localhost:3000/api/v1/health/deps | Postgres / Redis / MinIO |
| http://localhost:3000/docs | Swagger |
| http://localhost:3000/chat | HTTP probe Socket.IO (không phải UI chat) |
| http://localhost:9001 | MinIO console |
Smoke E2E: npm run smoke:chain → docs/SMOKE-CHAIN-RESULT.json
Extra domain audit: node scripts/functional-extra-audit.mjs → docs/reports/FUNCTIONAL-EXTRA-AUDIT.json
Final functional status (corrected classification): docs/reports/FUNCTIONAL-AUDIT-2026-08-06.md · WP-FUNCTIONAL-AUDIT-01
| Lệnh | Artifact |
|---|---|
npm run audit:refresh |
references/imp-stub-audit.json · references/agent-work-queue.json |
npm run audit:nav |
CON navigate ↔ registered screens (WP-NAV-CI-01) · exit 1 nếu missing |
npm run smoke:chain |
SMOKE-CHAIN-RESULT.json |
npm run smoke:ride |
stdout 14 checks đặt xe (quote tuyến thật · auto-match · nearby-drivers · avatar tài xế) · WP-RIDE-AUDIT-BOOKING-01 · WP-FE-RIDE-MAP-PINS-01 |
npm run drivers:check |
stdout tài xế seed (online · GPS · avatar) · WP-SEED-DRIVER-01 |
node scripts/functional-extra-audit.mjs |
reports/FUNCTIONAL-EXTRA-AUDIT.json |
npm run wallet:transfer:smoke |
stdout (wallet transfer) |
npm run routing:osm:smoke / routing:mapbox:smoke |
provider vs Haversine (external may PARTIAL) |
Metro
:8081trong browser = manifest Expo, không phải web app / mobile E2E. Cấm thiết bị thật khi agent verify: không bắt Expo Go trên phone. Verify = unit + API smoke + Metro lên.
Routing thật (không rơi về chim bay) · WP-RIDE-AUDIT-BOOKING-01
Máy dev có TLS inspection (proxy/AV) làm fetch của Node fail UNABLE_TO_VERIFY_LEAF_SIGNATURE → Mapbox/OSRM chết
→ quote rơi về Haversine (sai khoảng cách, ETA, giá; map không vẽ tuyến). npm run api:dev đã tự thêm
NODE_OPTIONS=--use-system-ca (scripts/api-dev.mjs). Chạy nest trực tiếp thì tự set:
$env:NODE_OPTIONS="--use-system-ca"; npm run start:dev --prefix api
Kiểm tra: npm run smoke:ride — check "quote dùng tuyến đường thật" phải PASS với provider=mapbox|welife-osrm.
Marker tài xế trên map CON phải đi theo đường (không nét đứt chim bay). WP-RIDE-GPS-ROAD-01: vệt remaining + sim stepAlongPolyline. Reload Expo sau khi sửa FE.
GPS hành khách (WP-RIDE-GPS-PAX-01): CON Matching/Detail ping POST /rides/:id/passenger-location + WS ride:passenger-location mỗi 3s. Cần migrate passengerLastLat/Lng trên bảng rides.
Tài xế demo
cd api && npm run prisma:seed tạo 6 tài xế APPROVED/online quanh Q1 (có ảnh đại diện) — auto-match cần dữ liệu này,
DB trắng sẽ luôn trả no_driver_nearby. Prod/VPS: node api/prisma/seed-drivers.mjs trong container API (đã seed 2026-08-17).
Gate (api/)
cd api
npm run build
npm run lint
npm test
Smoke checklist (Bearer sau OTP)
- Auth —
POST /auth/otp/send→verify(phone + OTP trong secrets) → lấyaccessToken - Users —
GET /users/me - Places —
GET /places/nearby?lat=10.77&lng=106.7(không gãy); aliasradiushoặcradiusMetersOK - MEDIA —
POST /upload/singlemultipart →DELETE /upload/file - ADDR —
POST /addresses→GET /addresses/me/default - WALLET —
POST /wallet/topup+ headerIdempotency-Key(gửi 2 lần →replayed: true) - FNB —
GET /merchants→ add cart item →POST /orders - RIDE —
POST /rides/quotes→POST /rides→POST /rides/:id/cancel
Smoke Auth + Driver (bắt buộc)
- OTP Consumer
+84901234567→GET /driver/meexpect 403 POST /driver/register→ PENDING- OTP Admin (
ADMIN_PHONES) →PATCH /driver/admin/applications/:id{ status: "APPROVED" } - OTP
surface=DRIVER→ roles gồmDRIVER - Passenger tạo
POST /rides(REQUESTED) → driver accept → pickup → complete
Smoke Partner (WP-PAR-AUTH-01)
- OTP
surface=PARTNER(phone partner) →POST /partners/onboarding - Admin →
GET /partners/admin/applications→PATCH .../:id{ status: "APPROVED" } - Partner token →
GET /partners/mecóPARTNER_OWNER·GET /partners/staffOK - USER không role →
GET /partners/staffexpect 403
Smoke ATM · PARK · FUEL · Redis OTP
GET /atms/nearby?lat=10.7769&lng=106.7009·GET /atms/banksGET /parking/lots/nearby→ JWTPOST /parking/partner/check-in→ check-outGET /fuel/stations/nearby·GET /fuel/brandsPOST /auth/otp/send→ responseotpBackend: "redis"
Kết quả lần retest gần nhất
2026-08-06 ~13:20 ICT — WP-FUNCTIONAL-AUDIT-01 · COMPLETE_WITH_EXTERNAL_BLOCKERS
| Gate / Smoke | Result |
|---|---|
audit:refresh |
354 IMP / 0 STUB · queue empty |
env:check |
PASS WITH WARNING (Google PLACEHOLDER · OWNER) |
smoke:chain |
57 PASS / 0 FAIL |
| Extra domain audit | 46 PASS / 0 FAIL |
| Wallet transfer | PASS |
| Routing OSRM/Mapbox | PARTIAL — Haversine fallback (BLOCKED_EXTERNAL) |
| Google real OAuth | OWNER_REQUIRED · config guard only |
| Chat realtime JWT E2E | NOT CONFIRMED |
| Device / Expo Go | NOT TESTED |
| Báo cáo | FUNCTIONAL-AUDIT-2026-08-06.md |
2026-07-29 ~16:45 ICT — LOCAL_SMOKE_CHAIN_PASS
| Gate / Smoke | Result |
|---|---|
npm run smoke:chain (WP-SMOKE-E2E-01) |
57 PASS / 0 FAIL · avg 95.2% |
| Chains mới | MED health vax/history/book · ATM · FUEL · ROUTE directions · PARK check-in/out |
OTP otpBackend |
redis (via auth.otp.send step) |
| Core (auth→FNB→ride→driver→partner) | PASS |
2026-07-27 ~11:55 ICT — LOCAL_DOC_TEST_PASS (lịch sử)
| Gate / Smoke | Result |
|---|---|
env:check · health · deps (PG/Redis/MinIO) |
PASS |
api jest orders + suite |
PASS |
Chain audit smoke-chain-audit.mjs |
44 PASS / 0 FAIL · avg 95.5% · fnb.order addressSnapshot OK |
| OTP / ATM / PARK / FUEL (via smoke) | PASS |
| Partner staff 403 / me+staff | PASS |
| Driver trip CONFIRMED→IN_TRIP→COMPLETED | PASS |