Portal smoke test
Chạy sau khi sửa UI portal (docs/.vitepress/theme/) hoặc gateway REST mà portal gọi.
Điều kiện
- Đã đăng nhập (
gw_access_tokentrên browser) npm run docs:stack(docs:5173+ API:3001) hoặc gateway remote quaGATEWAY_PROXY_TARGET
bash
npm run theme:test
npm run test:aggregate
npm run portal:smoke # HTTP 200 + HTML (cần docs:stack)Checklist E2E product chat (form inline → submit → kết quả job): Product chat E2E (đã đăng nhập, docs:stack).
Overview (/vi/app/)
- [ ] Hero: Open Playground, Activity, Copy token
- [ ] Widget Usage (7 ngày) tải; recent jobs click → Explore + modal job
- [ ] Workspace: Activity, Access token, Credits, BYOK, Files, Observability
- [ ] Pill credits header / sidebar →
/vi/app/credits/ - [ ] Resources: Quickstart, MCP, Authentication, Portal smoke test (trang này)
Playground (/vi/app/playground/)
Embed full-screen — không có sidebar/header app. Xem API Playground.
- [ ] Hero Overview Open Playground →
/vi/app/playground/ - [ ] Iframe tải (mặc định Create image); không kẹt loading
- [ ] Đã login → playground nhận token (Connection OK / list models)
- [ ] List models → chọn model + ratio từ catalog
- [ ] Image job bật wait → có
resultUrl/ preview - [ ] Sau SUCCESS, chuyển REQUEST / ENDPOINTS / AI GUIDE — tab giữ nguyên (poll không kéo về RESULT)
- [ ] URL đổi khi đổi worker (
?worker=create-video, …) - [ ] Link Playground từ Models →
?model=điền sẵn - [ ] Tuỳ chọn: Observability Local mirror bật → có dòng job sau chạy
Chat (/vi/app/chat/)
- [ ] Banner số dư thấp khi credits < ngưỡng
- [ ] Hint BYOK khi gateway có model map — link Mở BYOK
- [ ] Hint đổi khi chọn model BYOK (đã lưu provider key)
- [ ] Model picker có badge BYOK trên model map
Product mode (mặc định) — checklist đầy đủ: Product chat E2E. Pass nhanh:
- [ ] Intent media → form job inline + accordion Chi tiết API + chip (Nạp credits, Playground, Copy API path)
- [ ] Intent support (
còn bao nhiêu credit,affiliate) → chip portal, không form job - [ ]
POST /gateway/chatcómediaModelContext.accountmọi lượt product - [ ] Tự động (mock):
npm run portal:browser:test -- tests/browser/chat-product-inline.spec.ts tests/browser/chat-product-intents.spec.ts
Activity (/vi/app/activity/)
Xem Activity hub. Kiểm tra nhanh:
- [ ] Overview → period, Refresh, Export CSV; lỗi → Thử lại
- [ ] Top models → Explore
?model=; tooltip cache; modal?job=mỗi dòng - [ ] Trends / Explore → lỗi stats/logs → Thử lại; filter, Load more
- [ ] Billing → bảng nạp, link Credits;
?period=sync
Access token (/vi/app/token/)
- [ ] Tab curl (Gommo) hoặc MCP (Gommo); Copy token; Test connection → message xanh
- [ ] Last activity → Activity Explore (khi có job)
Files (/vi/app/files/)
- [ ] Upload → thông báo thành công; Recent uploads còn sau reload
- [ ] Copy URL / Copy fields
BYOK (/vi/app/byok/)
Xem BYOK reference và BYOK production checklist. Kiểm tra nhanh:
- [ ] Lỗi load → Thử lại; toolbar Làm mới + Activity
- [ ] Lưu key → message xanh (không flash cả trang; chỉ Refreshing…)
- [ ] Test / Xóa có confirm
- [ ] Tab Usage → link Activity; badge khi đã chat BYOK
Observability (/vi/app/observability/)
Checklist handoff: doc/OBSERVABILITY-TEST.md (không webhook thanh toán — nạp tiền dùng Credits). Kiểm tra nhanh:
- [ ] Toolbar Làm mới; lỗi stats → Thử lại
- [ ] Stat cards → Activity / Credits; link Available mở được
- [ ] Toggle Local session mirror (tuỳ chọn)
- [ ] Bỏ qua mục Webhooks trên trang khi demo sếp
Credits (/vi/app/credits/)
Xem Billing & credits. Kiểm tra nhanh:
- [ ] Banner số dư thấp khi credits < ngưỡng
- [ ] KPI: số dư, tổng đã nạp, số đơn, đơn gần nhất
- [ ] Quick links → Activity Billing, Job logs, Overview, Billing docs
- [ ] Gói nạp: gói featured accent, còn lại primary; modal checkout
- [ ] Bảng lịch sử nạp; toggle đơn chờ cũ; Làm mới header reload gói + đơn
Profile (/vi/app/profile/)
- [ ] Pill 7d; link Activity cùng period
- [ ] Recent jobs → modal job Explore
Tự động
bash
npm run theme:test
npm run test:aggregate
npm run portal:smoke
node scripts/verify-request-tab.mjs # pin tab Playground (cần docs:stack)
npm run observability:verify-background # job async + webhook live (cần token trong .env)