Skip to content

Test Checklist · MVP

Quick Reference — Tick từng ô. Mục tiêu pass ≥ 95% (≥ 76/80). Bug P0 = 0.

Quy ước:

  • ✅ Pass · ❌ Fail · ⏭ Skip (lý do)
  • Severity: P0 block release · P1 high · P2 medium · P3 cosmetic

1. Authentication & Authorization (8 cases)

#Test caseExpectedSev
1.1Login đúng email + mật khẩuRedirect /, sidebar hiệnP0
1.2Login sai mật khẩuHiện error toast, không redirectP0
1.3Login email không tồn tạiHiện error chung (không leak existence)P1
1.4Mở trang protected khi chưa loginRedirect /loginP0
1.5Logout từ avatar menuRedirect /login, session xoáP0
1.6KAM login → không thấy menu Cấu hìnhSidebar không có nhóm "Cấu hình"P1
1.7Auditor login → mọi action chỉ read-onlyNút duyệt/sửa/save disabled hoặc ẩnP1
1.8Admin login → thấy đủ menuTất cả nhóm hiển thịP1

2. Import lịch sử (10 cases)

#Test caseExpectedSev
2.1Download template ExcelFile .xlsx đúng tên, có header chuẩnP1
2.2Upload file đúng formatPreview hiện đúng N dòngP0
2.3Upload file sai format (.txt)Error rõ ràng, không crashP1
2.4Upload file thiếu cột bắt buộcLiệt kê cột thiếuP1
2.5Customer_code không tồn tạiBáo dòng nào sai, không insertP0
2.6Date format sai (15/06/2026)Báo lỗi parser kèm dòngP1
2.7Qty âm hoặc 0Bỏ qua dòng, báo summaryP2
2.8Duplicate (cust, wh, date) trong fileUpsert, ghi note "overwritten"P1
2.9File > 10MBVẫn parse được hoặc báo size limit rõ ràngP2
2.10Confirm "Nhập" → audit log ghi 1 row IMPORT_HISTORICALCó row trong audit_logP0

3. Submit Adjustment — KAM (12 cases)

#Test caseExpectedSev
3.1Upload Excel 5 dòng validToast OK, 5 row state=NEWP0
3.2Nhập form 1 dòng + submit1 row state=NEWP0
3.3Target_date < hôm nayReject với error rõ ràngP1
3.4Target_date > 30 ngàyReject (ngoài cửa sổ forecast 14d)P1
3.5Δ > 30% không noteSubmit fail, yêu cầu noteP0
3.6Δ > 30% noteSubmit OKP0
3.7Event_type không hợp lệReject hoặc fallback NORMALP1
3.8Submit thành công → KAM thấy ở "Lịch sử gửi"Row hiện state=NEWP1
3.9KAM huỷ row state=NEWRow biến mất / state=CANCELLEDP2
3.10KAM thử huỷ row state=ACCEPTEDAction disabledP1
3.11Submit → audit log có SUBMIT_ADJUSTMENTRow trong auditP0
3.12KAM khác không thấy adjustment của KAM khácRLS lọc đúngP0

4. Forecast Engine (8 cases)

#Test caseExpectedSev
4.1Nightly job chạy → forecast_results upsertCó row cho 14 ngày tới, mỗi pairP0
4.2Forecast_qty = baseline_avg × monthly × eventKhớp công thức (verify 1 cell tay)P0
4.3Sample size n < 10 → fallback_used=trueCờ raised, event_type fallback NORMALP1
4.4Baseline_avg = 0 → forecast_qty = 0OK, không crashP1
4.5Monthly multiplier = 0 → forecast = 0OKP2
4.6P85 hiển thị đúng (verify 1 case tay)Khớp với phân vị 85 của 90dP1
4.7Audited_qty = null trước khi duyệtCột trống ở UIP1
4.8Sau Planner accept → audited_qty = số duyệtUI cập nhật real-time hoặc refreshP0

5. Review pipeline (12 cases)

#Test caseExpectedSev
5.1Mở /planner/forecast/review → thấy queue NEW+SEENBảng có đủ rowP0
5.2Filter Tier=KEYBảng còn KEY onlyP1
5.3Sort theo target_date ascDate sớm lên trênP2
5.4AM bấm "Đã xem" → NEW → SEENState cập nhật, audit log rowP0
5.5Planner "Duyệt" Δ ≤ 15% (không note)OK, state=ACCEPTEDP0
5.6Planner "Duyệt" Δ > 30% không noteUI block + yêu cầu noteP0
5.7Planner "Sửa & duyệt" với qty khácaudited_qty = số mới, 2 audit rowP0
5.8Planner "Từ chối" + notestate=REJECTED, audited_qty=baselineP0
5.9Planner thử update row ACCEPTEDDisabled / errorP1
5.10Phím tắt A = duyệt nhanhHoạt động, focus next rowP2
5.11KAM tạo adjustment mới cùng (cust,wh,date) sau khi đã ACCEPTEDUI cho phép tạo, planner thấy overrideP1
5.122 planner duyệt cùng row cùng lúcOptimistic lock, người sau báo "đã được duyệt"P1

6. Reports (10 cases)

Warehouse report

#Test caseExpectedSev
6.1Mở /planner/forecast/warehouse, chọn 1 khoBảng 14 ngày hiệnP0
6.2WLU_minutes > 0 cho ngày có forecastOKP0
6.3Headcount_8h = ceil(WLU / 480)Verify 1 cell tayP0
6.4PK breakdown SB+MIX+HVY = 100%Tổng 3 cột = 100P1
6.5Export ExcelFile 2 sheet, mở đượcP1

Customer report

#Test caseExpectedSev
6.6Mở /planner/forecast/customerList khách + summaryP0
6.7Click 1 khách → detailDrawer / page riêngP1
6.8Hiển thị lịch sử 90d + forecast 14dChart line/barP1
6.9Filter theo TierBảng filter đúngP2
6.10Export khách → CSVFile mở đượcP2

7. Config (10 cases)

#Test caseExpectedSev
7.1Mở /admin/config/thamso → 12 row tháng12 rowP1
7.2Sửa T6 = 1.0 → 1.2, lưuToast OK, audit log CONFIG_CHANGEP0
7.3Nhập số âmValidation errorP1
7.4Sửa event MEGA_SALE = 4.5 → 5.0OKP0
7.5Mở /admin/config/dinhmucMatrix UPH hiệnP1
7.6Sửa UPH cell + lưuAudit row + WLU report cập nhật sau rerunP0
7.7Admin khác thấy thay đổi (real-time hoặc refresh)OKP2
7.8KAM mở config403 hoặc menu ẩnP0
7.9Audit log CONFIG_CHANGE có before/after JSONĐủ fieldP0
7.10"Rerun nightly" buttonEngine recompute trong < 2'P1

8. Audit (5 cases)

#Test caseExpectedSev
8.1Mở Audit Timeline 1 adjustment ACCEPTED≥ 2 row (state + qty)P0
8.2Mỗi row có actor + timestamp + reason (nếu apply)Đầy đủP0
8.3Auditor query audit_log qua SQLRead OKP1
8.4Auditor thử UPDATE audit_logRLS từ chốiP0
8.5Auditor thử DELETE audit_logRLS từ chốiP0

9. Performance & UX (5 cases)

#Test caseExpectedSev
9.1Load trang Overview với 100 khách × 14d< 3sP1
9.2Submit form không reload toàn trangOptimistic updateP2
9.3Sidebar persist state khi navigateOKP2
9.4Toast error rõ ràng tiếng ViệtKhông phải [object Object]P1
9.5Console không có error đỏ trong happy path0 errorsP1

Tổng kết

MụcPassFailSkipTotal
Auth__/88
Import__/1010
Adjustment__/1212
Engine__/88
Review__/1212
Reports__/1010
Config__/1010
Audit__/55
Perf/UX__/55
TỔNG__/8080

Verdict:

  • [ ] ≥ 76/80 pass
  • [ ] 0 P0 bug
  • [ ] ≤ 3 P1 bug
  • [ ] Audit complete

Tiếp: Scenarios