Files
sys-analysis-design/ba-output/e-commerce/03-specification/AC_US-002_v1.0.md
Leonard-ThindPad-P50 2c7bcde741 improve BA skill
2026-09-09 06:34:57 +07:00

8.2 KiB
Raw Blame History

AC — Acceptance Criteria — US-002 Xem giỏ hàng nhóm theo seller

Version 1.0
Date 2026-09-08
Author BA (qua skill ba-3-specification)
Status 🟡 Draft
Approved by QA: — (chưa có QA thật tham gia lần chạy này)
Source SRS_US002-003_v1.0.md · RBAC_CartCheckout_v1.0.md §2, §6
Scope US-002

Change Log

Version Date Người sửa Thay đổi CR
1.0 2026-09-08 BA (qua skill ba-3-specification) Bản đầu — 6 AC, 4 nhóm —

1. Bốn nhóm bắt buộc

Nhóm Nội dung Tối thiểu Số AC đã viết
1. Luồng thành công Xem giỏ hàng nhóm theo seller 1/hành động 2
2. Validation Không áp dụng — US-002 không có input do người dùng nhập, chỉ hiển thị (xem lý do dưới) — 0 (N/A có lý do)
3. Lỗi hệ thống Timeout, 5xx, phân biệt "rỗng thật" vs "không tải được" ≥1 2
4. Phân quyền Không đủ quyền, hết phiên ≥1/vai trò bị chặn 2

Vì sao Nhóm 2 (Validation) ghi N/A: US-002 là hành động xem thuần tuý (SCR-04 khi mở màn hình) — không có trường nào do người dùng nhập trong phạm vi US-002 (nhập số lượng thuộc US-003, xem AC_US-003_v1.0.md). Đây không phải "chỉ có nhóm 1" (vi phạm nguyên tắc), vì Nhóm 3 và Nhóm 4 đã viết đủ.


2. Danh sách AC

Nhóm 1 — Luồng thành công

AC-US002-01 — Xem giỏ hàng có nhiều seller

Liên quan SCR-04 · C01, C02, C03–C06, C08, C09, C11
Vai trò ROLE-02 Customer (hành vi tương tự với ROLE-01 Guest, khác ở định danh X-Guest-Session-Id thay JWT)
Given  tôi đăng nhập với ROLE-02 (Customer) và giỏ hàng của tôi (Cart.status=active) có 5 CartItem:
       3 CartItem thuộc seller "Shop A", 2 CartItem thuộc seller "Shop B"
When   tôi mở SCR-04 (Giỏ hàng)
Then   hệ thống hiển thị đúng 2 nhóm theo seller ("Shop A", "Shop B"), mỗi nhóm hiển thị đúng
       số CartItem thuộc nhóm đó
 And   tạm tính mỗi nhóm (C08) bằng Σ (quantity × đơn giá hiển thị) của các CartItem trong
       nhóm đó
 And   tổng cộng giỏ hàng (C09) bằng Σ tất cả C08
 And   nút "Tiến hành Checkout" (C11) hiển thị và không bị disable

Dữ liệu mẫu để test:

Field Giá trị
Shop A — CartItem 1 quantity=2, đơn giá=100.000 ₫
Shop A — CartItem 2 quantity=1, đơn giá=50.000 ₫
Shop A — CartItem 3 quantity=1, đơn giá=75.000 ₫
Shop A — tạm tính (C08) kỳ vọng 2×100.000 + 1×50.000 + 1×75.000 = 325.000 ₫
Shop B — CartItem 1 quantity=1, đơn giá=200.000 ₫
Shop B — CartItem 2 quantity=2, đơn giá=30.000 ₫
Shop B — tạm tính (C08) kỳ vọng 1×200.000 + 2×30.000 = 260.000 ₫
Tổng cộng (C09) kỳ vọng 325.000 + 260.000 = 585.000 ₫

AC-US002-02 — Xem giỏ hàng rỗng

Liên quan SCR-04 · C10, C11
Vai trò ROLE-01, ROLE-02
Given  tôi đăng nhập với ROLE-02 và giỏ hàng của tôi không có CartItem nào (Cart.status=active,
       0 dòng)
When   tôi mở SCR-04
Then   hệ thống hiển thị trạng thái "Giỏ hàng trống" (khoá cart.empty.title) và nút
       "Tiếp tục mua sắm" (C10)
 And   nút "Tiến hành Checkout" (C11) không hiển thị/bị disable — theo §2.A.3.6 của SRS

Nhóm 2 — Validation

N/A — xem lý do ở mục 1.


Nhóm 3 — Lỗi hệ thống

AC-US002-03 — Lỗi hệ thống khi tải giỏ hàng

Liên quan SCR-04 · C12, C13
Vai trò ROLE-01, ROLE-02
Given  tôi đăng nhập với ROLE-02
When   tôi mở SCR-04 và GET /v1/cart trả về 500/503 hoặc timeout (ngưỡng — xem NFR §1, OQ-033)
Then   hệ thống hiển thị banner lỗi "Không tải được dữ liệu, thử lại." (E-CART-0004) tại vùng
       danh sách
 And   nút "Thử lại" (C13) hiển thị; bấm vào gọi lại GET /v1/cart

Ba tình huống tối thiểu của nhóm này:

# Tình huống AC
1 Server trả 5xx AC-US002-03
2 Timeout / mất mạng AC-US002-03
3 Dữ liệu bị người khác sửa/xoá trong lúc mình đang mở Không áp dụng ở US-002 (chỉ xem, không sửa) — xem AC_US-003_v1.0.md §3 Nhóm 3 (AC-US003-11) cho trường hợp này khi có thao tác sửa/xoá

AC-US002-04 — Phân biệt "giỏ hàng chưa từng có dữ liệu" và "không tải được"

Liên quan SCR-04 · C10, C12
Vai trò ROLE-02
Given  tôi đăng nhập với ROLE-02 lần đầu, chưa từng thêm sản phẩm nào vào giỏ (Cart mới tạo,
       0 CartItem); GET /v1/cart trả 200 với danh sách rỗng
When   tôi mở SCR-04
Then   hệ thống hiển thị trạng thái "Giỏ hàng trống" (không phải banner lỗi C12)
 And   hai trạng thái "giỏ hàng trống thật" (AC-US002-02/04) và "không tải được" (AC-US002-03)
       dùng hai khối hiển thị khác nhau (data-state khác nhau trong WF), không dùng chung một
       thông điệp — kiểm chứng bằng cách tắt mạng khi mở màn hình lần đầu (kỳ vọng thấy banner
       lỗi, KHÔNG phải "Giỏ hàng trống")

Nhóm 4 — Phân quyền

AC-US002-05 — Guest chỉ thấy giỏ hàng của session mình

Liên quan SCR-04
Vai trò ROLE-01
Given  tôi là Guest với X-Guest-Session-Id = S1; một Guest khác có giỏ hàng thuộc session S2
       (không phải của tôi)
When   tôi gọi GET /v1/cart với header X-Guest-Session-Id: S1
Then   hệ thống chỉ trả về giỏ hàng gắn với S1 (dữ liệu của chính tôi), không có cách nào lộ
       dữ liệu của S2 qua endpoint này (endpoint không nhận cartId của người khác qua tham số)

AC-US002-06 — Customer hết phiên đăng nhập cố xem giỏ hàng

Liên quan SCR-04, SCR-08 (đăng nhập)
Vai trò ROLE-02
Given  tôi trước đó đã đăng nhập và có giỏ hàng theo customer_id; nay access token đã hết hạn
       (401 ERR_AUTH_INVALID_TOKEN)
When   tôi mở SCR-04
Then   hệ thống chuyển hướng về màn đăng nhập (SCR-08)
 And   giữ đường dẫn quay lại SCR-04 sau khi đăng nhập thành công (theo UICONV §2)

3. Bảng dữ liệu biên

N/A — US-002 không có field nhập liệu (chỉ xem). Xem AC_US-003_v1.0.md §4 cho F01 (số lượng).


4. Kịch bản kết hợp

# Kịch bản Các bước AC liên quan
S1 Mở giỏ hàng nhiều seller rồi tiến hành checkout SCR-04 (mở, kiểm tra tổng đúng) → bấm "Tiến hành Checkout" (C11) → điều hướng SCR-05 (chỉ kiểm tra điều hướng, ngoài phạm vi hành vi SCR-05) AC-US002-01

5. Truy vết

AC US BR Field/Thành phần Mã lỗi Test case (QA điền) Kết quả (QA điền)
AC-US002-01 US-002 — C01, C02, C03–C06, C08, C09, C11 —
AC-US002-02 US-002 BR §3 CART C10, C11 —
AC-US002-03 US-002 — C12, C13 E-CART-0004
AC-US002-04 US-002 — C10, C12 E-CART-0004
AC-US002-05 US-002 RBAC §2 — —
AC-US002-06 US-002 — — —

6. Xác nhận của QA

Người xác nhận (chưa có — chưa có QA thật tham gia lần chạy này)
Ngày —
☐ Mọi AC đều test được (không có AC mô tả cảm tính)
☐ Đủ 4 nhóm (Nhóm 2 N/A có lý do)
☐ Bảng dữ liệu biên đủ dùng để viết test case (N/A — không có field ở US-002)
☐ Không có AC nào mâu thuẫn với AC khác

AC bị QA từ chối:

AC Lý do từ chối BA sửa thế nào