Skip to content

US-S07: Kiểm tra các trạng thái chặn hủy chuyển nhượng (luồng 3C) ​

Thuộc FS: 00-overview.md — SAPP-26297 Chuyển nhượng học viên (tool sapp.011) Phần chung (tổng quan, roles, flow tổng, related features, NFR, Open Questions, References) xem ở Overview. File này chỉ chứa nội dung riêng của US.

Cơ chế chạy bước, tự chấm, xác nhận GHI → US-S01. Bước hủy → như US-S04 BR-01.

FieldValue
US IDUS-S07
Role thực hiệnR1 - Người dùng tool — Assumption (OQ về G-01 → OQ-S-01)
PhaseAs-built (đã triển khai @ e77c47a)
PriorityN/A — as-built
StatusDraft
NFR liên quanNFR-S-01, NFR-S-02 — xem Overview §5
OQ liên quanOQ-S-01, OQ-S-12, OQ-S-13, OQ-S-14 — xem Overview §6

1. US Statement ​

text
As a Người dùng tool  [Assumption — OQ-S-01]
I want gọi hủy chuyển nhượng trong các trường hợp phải bị từ chối (hủy hai lần, hủy cho người chưa chuyển nhượng,
       hủy với người nhận, lớp không phải Lesson)
So that [Assumption — OQ-S-18] xác nhận API hủy của Ops từ chối đúng theo guide QA ("Các trường hợp API hủy chuyển nhượng phải từ chối.")

2. Dependencies & Definition Of Ready ​

N/A — đã triển khai. Dependency runtime:

#Cần sẵn sàngAi cung cấpTrạng thái
D13.17: A→B đang chuyển nhượng (luồng 1 bước 2)Tester—
D2Fixture có user_c (3.18), foundation_class_id (3.20)Tester—

3. Business Rules ​

IDRuleÁp dụng ởĐã cover bởi (AC)Nguồn code (Mode B/C)
BR-01Hủy hai lần liên tiếp (3.17): lần 1 "Cập nhật thành công", lần 2 "Từ chối đúng" 400|100337 · exceptions.transfer_record_not_foundM1 - case 3.17AC-M1.1fe/src/ui/components/works/sapp/sapp-26297-flows.ts:1279-1287
BR-02Hủy với học viên = C (chưa từng chuyển nhượng, 3.18) hoặc = B (người nhận, 3.19) tại L1: "Từ chối đúng" 400|100337M1 - case 3.18, 3.19AC-M1.2sapp-26297-flows.ts:1289-1311
BR-03Hủy với lớp = F1 (không phải Lesson, 3.20): tool chỉ chấm success = false; hướng dẫn ghi lại mã thực tế vì guide ghi CLASS_NOT_FOUND nhưng chưa chốt dạng mãM1 - case 3.20AC-M1.3sapp-26297-flows.ts:1313-1328

4. Design ​

a. Mối liên hệ giữa các màn & User Flow ​

text
[Tab "3C · Chặn hủy chuyển nhượng"]
  ├─ 3.17: [hủy (GHI)] → [hủy lần 2 (GHI) — kỳ vọng 100337]
  ├─ 3.18 / 3.19: [hủy với C / B (GHI) — kỳ vọng 100337]
  └─ 3.20: [hủy với lớp F1 (GHI) — kỳ vọng success=false] → [hướng dẫn ghi mã]

b. Chi tiết từng màn ​

Màn M1 - Tab "3C · Chặn hủy chuyển nhượng" ​

FieldValue
Figma frameN/A
Trigger vào mànBấm tab "3C · Chặn hủy chuyển nhượng"
Mô tả ngắnTóm tắt: "Các trường hợp API hủy chuyển nhượng phải từ chối." 4 case
UI States ​
StateKhi nàoHiển thịFigma frame
DefaultVào tabTóm tắt + 4 case đóngN/A
LoadingBước đang chạyTheo US-S01N/A
Has dataBước chạy xong✓/✗ + "x/y đạt"N/A
EmptyN/A—N/A
ErrorKhông gọi được OpsHộp đỏ 13042N/A
DisabledFixture thiếu giá trịNút khoá "Chưa điền: …"N/A
Fields ​
FieldRequiredTypeDefaultFormatValidationError MessageVisibilityDepends On
class_id (đường dẫn)YesText{class_id_l1} (3.20: {foundation_class_id})id OpsUS-S01 BR-10"Chưa điền: …"Bước hủyFixture
student_idYesText{user_a} (3.18: {user_c}; 3.19: {user_b})id OpsUS-S01 BR-10"Chưa điền: …"Bước hủyFixture
Actions ​
A1 - Chạy các bước của một case ​
ItemDescription
TriggerMở case, chạy từng bước (US-S01)
BehaviorThao tác dùng: hủy chuyển nhượng (GHI). Ghi vào: Ops dev/staging (3.17 lần 1 hủy thật). Không có đường PROD
Success ResultCác check đạt theo bảng case

Error cases:

CaseExpected Handling
Ops trả mã khác kỳ vọngCheck ✗ + giá trị thực
Không gọi được OpsHộp đỏ 13042

Bảng case (4 case):

Mã caseTênBướcKỳ vọng tool chấm
3.17Hủy hai lần liên tiếphướng dẫn tiền đề · hủy · hủyLần 1 thành công; lần 2 400|100337 transfer_record_not_found
3.18Hủy cho học viên chưa từng chuyển nhượnghủy (student = C)400|100337
3.19Hủy với student_id = người nhận (B)hủy (student = B)400|100337
3.20class_id không phải lớp Lessonhủy (lớp = F1) · hướng dẫnsuccess = false (mã CLASS_NOT_FOUND chưa chốt dạng — OQ-S-13)
Acceptance Criteria của màn M1 ​
AC-M1.1 - Hủy hai lần ​
gherkin
Given A→B đang chuyển nhượng
When người dùng chạy "Hủy lần 1" rồi "Hủy lần 2"
Then lần 1 HTTP 200, success = true, data.message = "Update successfully"
And lần 2 HTTP 400, error.code = "400|100337", error.message = "exceptions.transfer_record_not_found"

Maps to:

  • Business Rule: BR-01
AC-M1.2 - Hủy với người không phải người cho ​
gherkin
Scenario Outline: 100337
  When người dùng chạy bước hủy tại L1 với student_id = <học viên>
  Then HTTP 400, error.code = "400|100337", error.message = "exceptions.transfer_record_not_found"

  Examples:
    | case | học viên |
    | 3.18 | C        |
    | 3.19 | B        |

Maps to:

  • Business Rule: BR-02
AC-M1.3 - Lớp không phải Lesson &ZeroWidthSpace;
gherkin
When người dùng chạy "Hủy với class_id = F1"
Then check "success = false" đạt
And tester ghi lại error.code thực tế theo hướng dẫn

Maps to:

  • Business Rule: BR-03
Negative AC / Edge Cases của màn M1 &ZeroWidthSpace;
IDTình huốngHành vi mong đợi
EC-M1.1Chạy 3.17 khi không có A→B hiệu lựcLần 1 đã bị từ chối ⇒ check lần 1 ✗ — cần chạy lại luồng 1 bước 2
EC-M1.23.20 Ops trả thành côngCheck success = false ✗ — tool không có check mã lỗi cụ thể

5. Cross-feature AC &ZeroWidthSpace;

Không có.