Test Cases: Đơn hàng
| Module | CORE-07 | URD | URD Đơn hàng |
|---|
Các case được căn theo lĩnh vực chức năng URD v0.3 và xác minh với tài liệu lập trình viên Sale Service. Phát hiện QE ghi chú hành vi đã xác nhận trong codebase mà URD không nêu rõ.
1. Tóm tắt Độ phủ
| Lĩnh vực | Yêu cầu URD | Test case | Đã phủ |
|---|---|---|---|
Sale Order (ORD) | 16 | 18 | ✅ |
Tách hóa đơn (CHK) | 5 | 4 | ✅ |
Phiếu bếp (KIT) | 9 | 8 | ✅ |
Trạm bếp (STA) | 3 | 3 | ✅ |
Phiên POS (POS) | 8 | 6 | ✅ |
Đặt bàn (RSV) | 5 | 4 | ✅ |
Điểm Loyalty (PNT) | 3 | 3 | ✅ |
2. Test Cases
TC-<AREA>-NNNkhớp vớiURD-<AREA>-NNN. Mức ưu tiên = P1 (nghiêm trọng) / P2 (lớn) / P3 (nhỏ).
2.1 Sale Order
| TC ID | URD ref | Kịch bản | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-ORD-001 | URD-ORD-001 | Tạo đơn nháp | 1. Thu ngân đã xác thực cho một merchant 2. Tạo đơn | Đơn được tạo với trạng thái DRAFT, giới hạn theo merchant và thiết bị | P1 |
| TC-ORD-002 | URD-ORD-002 | Thêm sản phẩm vào nháp | 1. Đơn DRAFT 2. Thêm một sản phẩm | Line item được thêm; giá chụp lúc thêm; số lượng mặc định 1 | P1 |
| TC-ORD-003 | URD-ORD-002 | Chặn sửa ngoài DRAFT | 1. Đơn PROCESSING 2. Thử thêm một mục | Bị từ chối — mục chỉ sửa được ở DRAFT | P1 |
| TC-ORD-004 | URD-ORD-003 | Cùng sản phẩm gộp số lượng | 1. Đơn DRAFT với Sản phẩm A (qty 1) 2. Thêm Sản phẩm A lại | Số lượng line có sẵn tăng (không line trùng) | P2 |
| TC-ORD-005 | URD-ORD-004 | Số lượng không gỡ line | 1. Đơn DRAFT với mục (qty 1) 2. Cập nhật số lượng về 0 | Line bị gỡ (soft-delete); tổng tính lại | P2 |
| TC-ORD-006 | URD-ORD-005 | Combo fan-out | 1. Đơn DRAFT 2. Thêm một sản phẩm combo | Một dòng lead + các dòng con giá-không được tạo trong một giao dịch | P1 |
| TC-ORD-007 | URD-ORD-005 | Combo thêm lại bị từ chối | 1. Combo đã trong đơn 2. Thêm cùng combo | Bị từ chối — dùng sửa để đổi số lượng | P2 |
| TC-ORD-008 | URD-ORD-006 | Checkout khóa giá | 1. Sản phẩm thêm ở 50,000 2. Giá catalog đổi thành 60,000 3. Checkout | Tổng dùng 50,000 đã khóa, không phải giá catalog mới | P1 |
| TC-ORD-009 | URD-ORD-006 | Chuyển checkout | 1. Đơn DRAFT với ≥1 mục 2. Checkout | Trạng thái DRAFT → PROCESSING; tổng được tính | P1 |
| TC-ORD-010 | URD-ORD-007 | Giỏ rỗng bị từ chối | 1. Đơn DRAFT không mục 2. Checkout | Bị từ chối — cần ít nhất một mục | P1 |
| TC-ORD-011 | URD-ORD-007 | Số lượng âm bị từ chối | 1. Đơn DRAFT 2. Đặt số lượng một mục thành -1 khi thêm | Bị từ chối — số lượng phải ≥ 1 | P1 |
| TC-ORD-012 | URD-ORD-008 | Revert về giỏ | 1. Đơn PROCESSING 2. Revert | Trạng thái PROCESSING → DRAFT; mục sửa được lại | P1 |
| TC-ORD-013 | URD-ORD-009 | Cancel không-cuối | 1. Đơn ở DRAFT / PROCESSING / PARTIAL 2. Cancel | Trạng thái → CANCELLED; lý do được ghi khi cung cấp | P1 |
| TC-ORD-014 | URD-ORD-009 | Cancel cuối bị từ chối | 1. Đơn COMPLETED hoặc CANCELLED 2. Cancel | Bị từ chối — trạng thái cuối | P1 |
| TC-ORD-015 | URD-ORD-010 | Thanh toán một phần | 1. Đơn PROCESSING 2. Thanh toán thành công ít hơn tổng | Trạng thái → PARTIAL | P1 |
| TC-ORD-016 | URD-ORD-011 | Thanh toán đủ hoàn tất | 1. Đơn PROCESSING 2. Thanh toán thành công ≥ tổng | Trạng thái → COMPLETED | P1 |
| TC-ORD-017 | URD-ORD-014 | Đính khách hàng | 1. Đơn 2. Đính một khách hàng | Khách hàng liên kết; hiển thị trên chi tiết đơn | P2 |
| TC-ORD-018 | URD-ORD-016 | Biên số mục tối đa | 1. Đơn DRAFT với 100 mục 2. Thêm mục thứ 101 | Bị từ chối — đạt giới hạn số mục tối đa | P2 |
Phát hiện QE — xóa số-lượng-không
Nguồn sale-order-item.service.ts: cập nhật một line về số lượng ≤ 0 soft-delete nó thay vì báo lỗi validation. TC-ORD-005 validate quy ước này; URD không nêu rõ.
Phát hiện QE — checkout không khóa mục
Nguồn checkout.service.ts: checkout đọc mục rồi gọi pricing không có khóa bi quan xuyên hai bước, nên một lần sửa mục đồng thời khi checkout là một race tiềm tàng. TC-ORD-008 / TC-ORD-009 giả định không sửa đồng thời.
Phát hiện QE — số mục tối đa = 100
Nguồn sale.service.ts: addSaleOrderItem áp MAX_NUMBER_OF_ITEMS_IN_ORDER = 100 với khóa bi quan. TC-ORD-018 validate biên.
2.2 Tách hóa đơn
| TC ID | URD ref | Kịch bản | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-CHK-001 | URD-CHK-001 | Tách thành check | 1. Đơn 2. Tách thành nhiều check | Nhiều sale check được tạo dưới đơn | P2 |
| TC-CHK-002 | URD-CHK-002 | Phân bổ mục cho check | 1. Đơn đã tách 2. Gán mục / số lượng cho một check | Mỗi check giữ mục được phân bổ và tổng của nó | P2 |
| TC-CHK-003 | URD-CHK-004 | Đơn hoàn tất qua check | 1. Mọi check trên một đơn đã hoàn tất | Trạng thái đơn → COMPLETED | P2 |
| TC-CHK-004 | URD-CHK-005 | Rollback tách | 1. Đơn đã tách, chưa check nào trả 2. Rollback | Check bị gỡ; đơn trở về một bill duy nhất | P3 |
2.3 Phiếu bếp
| TC ID | URD ref | Kịch bản | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-KIT-001 | URD-KIT-001 | Gửi tới bếp | 1. Đơn với mục 2. Gửi tới bếp | Phiếu + mục phiếu được tạo | P1 |
| TC-KIT-002 | URD-KIT-002 | Gửi idempotent | 1. Gửi với một key idempotency 2. Thử lại với cùng key | Không phiếu trùng được tạo | P1 |
| TC-KIT-003 | URD-KIT-003 | Vòng đời phiếu | 1. Phiếu mới 2. Tiến mục | Phiếu di chuyển PENDING → PROCESSING → READY → COMPLETED | P1 |
| TC-KIT-004 | URD-KIT-004 | Vòng đời mục | 1. Mục phiếu 2. Bắt đầu nấu → sẵn sàng → đã phục vụ | Mục di chuyển PENDING → COOKING → READY → SERVED | P1 |
| TC-KIT-005 | URD-KIT-005 | Tự-tiến | 1. Đánh dấu mọi mục READY | Phiếu tự-tiến tới READY không cần cập nhật phiếu thủ công | P1 |
| TC-KIT-006 | URD-KIT-006 | Void và gửi lại | 1. Mục phiếu đã gửi 2. Cần đổi số lượng | Sửa tại chỗ không cho phép; void cũ + gửi mới | P2 |
| TC-KIT-007 | URD-KIT-008 | Cập nhật real-time | 1. KDS đã kết nối 2. Trạng thái mục đổi | KDS và dashboard nhận cập nhật live | P1 |
| TC-KIT-008 | URD-KIT-009 | Phục vụ kích tiêu thụ | 1. Mục bếp đánh dấu đã phục vụ | Tiêu thụ tồn được kích cho mục đó | P2 |
Phát hiện QE — event real-time là fire-and-forget
Nguồn checkout.service.ts, payment-webhook.service.ts: broadcast WebSocket không được await. Một broadcast thất bại được log nhưng không rollback thao tác đơn. TC-KIT-007 phủ việc gửi, không phủ đảm bảo gửi.
2.4 Trạm bếp
| TC ID | URD ref | Kịch bản | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-STA-001 | URD-STA-001 | Tạo trạm | 1. Quản lý 2. Tạo một trạm có tên (i18n) | Trạm được tạo và giới hạn theo merchant | P2 |
| TC-STA-002 | URD-STA-002 | Định tuyến nhóm hàng | 1. Map một nhóm hàng sản phẩm tới một trạm 2. Gửi các mục đó | Phiếu của chúng định tuyến tới trạm được map | P2 |
| TC-STA-003 | URD-STA-003 | Cấu hình máy in trạm | 1. Cấu hình một máy in trạm với auto-print | Phiếu mới ở trạm đó auto-print | P3 |
2.5 Phiên POS
| TC ID | URD ref | Kịch bản | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-POS-001 | URD-POS-001 | Mở phiên | 1. Không có phiên mở trên thiết bị 2. Mở với tiền mở ca | Phiên được tạo OPEN với tiền mở ca | P1 |
| TC-POS-002 | URD-POS-002 | Một phiên mỗi thiết bị | 1. Mở phiên trên thiết bị 2. Mở cái khác trên cùng thiết bị | Bị từ chối — một phiên mở mỗi thiết bị | P1 |
| TC-POS-003 | URD-POS-003 | Đóng & đối chiếu | 1. Phiên mở 2. Đóng với tiền đếm được | Chênh lệch = thực tế − kỳ vọng được ghi | P1 |
| TC-POS-004 | URD-POS-004 | Báo cáo Z một lần | 1. Đóng phiên | Đúng một báo cáo Z (PosSessionReport) được sinh | P1 |
| TC-POS-005 | URD-POS-006 | Đơn đính vào phiên | 1. Phiên mở 2. Tạo một đơn trên thiết bị | Đơn liên kết với phiên đang mở | P2 |
| TC-POS-006 | URD-POS-008 | Đếm lại khi đóng | 1. Đóng, rồi đóng lại với một số đếm đã sửa | Đếm lại được theo dõi; số liệu cuối được cập nhật | P3 |
2.6 Đặt bàn
| TC ID | URD ref | Kịch bản | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-RSV-001 | URD-RSV-001 | Tạo đặt bàn | 1. Lễ tân 2. Tạo với tên khách, điện thoại, số khách, giờ | Đặt bàn PENDING; bàn được giữ (phân bổ hoạt động) | P2 |
| TC-RSV-002 | URD-RSV-002 | Xác nhận rồi check in | 1. Xác nhận đặt bàn 2. Check in | PENDING → CONFIRMED → CHECKED_IN | P2 |
| TC-RSV-003 | URD-RSV-005 | Check-in sinh đơn | 1. Đặt bàn đã xác nhận 2. Check in | Sale order sinh và liên kết; phân bổ được nhắm lại | P2 |
| TC-RSV-004 | URD-RSV-002 | Cancel đặt bàn | 1. Đặt bàn PENDING hoặc CONFIRMED 2. Cancel | Trạng thái → CANCELLED; bàn được giữ được giải phóng | P2 |
2.7 Điểm Loyalty
| TC ID | URD ref | Kịch bản | Các bước | Kỳ vọng | P |
|---|---|---|---|---|---|
| TC-PNT-001 | URD-PNT-001 | Tích khi hoàn tất | 1. Đơn với một khách hàng liên kết 2. Thanh toán thành công | Điểm được cấp cho đơn hoàn tất | P2 |
| TC-PNT-002 | URD-PNT-002 | Cấp idempotent | 1. Event payment-success trùng cho cùng đơn | Điểm được cấp chỉ một lần | P2 |
| TC-PNT-003 | URD-PNT-003 | Số dư theo merchant | 1. Khách hàng tích qua các đơn | Số dư cộng dồn theo từng khách hàng theo từng merchant | P3 |
3. Truy vết
Mỗi yêu cầu Must ánh xạ tới ≥1 test case. Khoảng trống được gắn cờ.
| Yêu cầu URD | Test case | Trạng thái |
|---|---|---|
| URD-ORD-001 | TC-ORD-001 | ✅ Đã phủ |
| URD-ORD-002 | TC-ORD-002, TC-ORD-003 | ✅ Đã phủ |
| URD-ORD-003 | TC-ORD-004 | ✅ Đã phủ |
| URD-ORD-004 | TC-ORD-005 | ✅ Đã phủ |
| URD-ORD-005 | TC-ORD-006, TC-ORD-007 | ✅ Đã phủ |
| URD-ORD-006 | TC-ORD-008, TC-ORD-009 | ✅ Đã phủ |
| URD-ORD-007 | TC-ORD-010, TC-ORD-011 | ✅ Đã phủ |
| URD-ORD-008 | TC-ORD-012 | ✅ Đã phủ |
| URD-ORD-009 | TC-ORD-013, TC-ORD-014 | ✅ Đã phủ |
| URD-ORD-010 | TC-ORD-015 | ✅ Đã phủ |
| URD-ORD-011 | TC-ORD-016 | ✅ Đã phủ |
| URD-ORD-012 | — | ⚠️ Chưa phủ (Should — tách đơn) |
| URD-ORD-013 | — | ⚠️ Chưa phủ (Should — gộp đơn) |
| URD-ORD-014 | TC-ORD-017 | ✅ Đã phủ |
| URD-ORD-015 | — | ⚠️ Chưa phủ (Should — đa tiền tệ) |
| URD-ORD-016 | TC-ORD-018 | ✅ Đã phủ |
| URD-CHK-001 | TC-CHK-001 | ✅ Đã phủ |
| URD-CHK-002 | TC-CHK-002 | ✅ Đã phủ |
| URD-CHK-003 | — | ⚠️ Chưa phủ (Should — khách hàng theo từng check) |
| URD-CHK-004 | TC-CHK-003 | ✅ Đã phủ |
| URD-CHK-005 | TC-CHK-004 | ✅ Đã phủ |
| URD-KIT-001 | TC-KIT-001 | ✅ Đã phủ |
| URD-KIT-002 | TC-KIT-002 | ✅ Đã phủ |
| URD-KIT-003 | TC-KIT-003 | ✅ Đã phủ |
| URD-KIT-004 | TC-KIT-004 | ✅ Đã phủ |
| URD-KIT-005 | TC-KIT-005 | ✅ Đã phủ |
| URD-KIT-006 | TC-KIT-006 | ✅ Đã phủ |
| URD-KIT-007 | — | ⚠️ Chưa phủ (Should — rush / thứ tự) |
| URD-KIT-008 | TC-KIT-007 | ✅ Đã phủ |
| URD-KIT-009 | TC-KIT-008 | ✅ Đã phủ |
| URD-STA-001 | TC-STA-001 | ✅ Đã phủ |
| URD-STA-002 | TC-STA-002 | ✅ Đã phủ |
| URD-STA-003 | TC-STA-003 | ✅ Đã phủ |
| URD-POS-001 | TC-POS-001 | ✅ Đã phủ |
| URD-POS-002 | TC-POS-002 | ✅ Đã phủ |
| URD-POS-003 | TC-POS-003 | ✅ Đã phủ |
| URD-POS-004 | TC-POS-004 | ✅ Đã phủ |
| URD-POS-005 | — | ⚠️ Chưa phủ (Should — báo cáo X) |
| URD-POS-006 | TC-POS-005 | ✅ Đã phủ |
| URD-POS-007 | — | ⚠️ Chưa phủ (Should — kỳ vọng vs thực tế phi-tiền-mặt) |
| URD-POS-008 | TC-POS-006 | ✅ Đã phủ |
| URD-RSV-001 | TC-RSV-001 | ✅ Đã phủ |
| URD-RSV-002 | TC-RSV-002, TC-RSV-004 | ✅ Đã phủ |
| URD-RSV-003 | — | ⚠️ Chưa phủ (Should — theo dõi nguồn) |
| URD-RSV-004 | — | ⚠️ Chưa phủ (Should — gắn thẻ dịp) |
| URD-RSV-005 | TC-RSV-003 | ✅ Đã phủ |
| URD-PNT-001 | TC-PNT-001 | ✅ Đã phủ |
| URD-PNT-002 | TC-PNT-002 | ✅ Đã phủ |
| URD-PNT-003 | TC-PNT-003 | ✅ Đã phủ |
Mọi yêu cầu Must đều được phủ. Các mục chưa phủ là cải tiến mức Should đang chờ viết test.