# HƯỚNG DẪN VÀ TEMPLATE VIẾT TEST CASE CHUẨN DỰ ÁN (MD FORMAT)

Tài liệu này cung cấp **Template Test Case** chuẩn chỉnh và hướng dẫn chi tiết dành cho QA/QC/Tester để xây dựng danh sách kịch bản kiểm thử (Test Cases) chất lượng cao bằng định dạng Markdown. Ngoài ra, tài liệu còn đính kèm **AI Prompt** để sinh Test Case tự động từ tài liệu SRS hoặc giao diện HTML.

> ⚠️ **Bắt buộc đọc trước:** `../rules/qa-writing-standards.md` mục 6 — chuẩn diễn đạt Test Case Name/Steps/Expected Result (bắt đầu bằng "Kiểm tra", điều hướng path phải kèm menu, không dùng element id trần, không cross-reference case khác, không gộp case, giữ nguyên tên tiếng Nhật, giữ keyword dự án). Các ví dụ bên dưới đã áp dụng sẵn các chuẩn này.

---

```markdown
# [Screen_ID]_[Screen_Name] - Test Cases

## 1. Thông tin chung

| Mục | Chi tiết |
|:---|:---|
| **Mã màn hình - Tên màn hình** | [Ví dụ: AD10_Create Product] |
| **Tài liệu tham chiếu (SRS)** | [Ví dụ: 【K'S CANDY】_SRS_v1.5] |
| **UC-Spec-Version** | [vd v3 — MANDATORY nếu functionId có UC Spec ở `AK-Docs/02.BA-Specs/04.UC-Specs/`; đây là mỏ neo cho Mode UPDATE của `create-testcase` — xem `docs/internal/Token Problems.md` §3.2] |
| **System-Requirement-Version** | [vd v3, hoặc "—" nếu functionId chưa có System Requirement] |
| **Người tạo (Author)** | [Ví dụ: LyLT] |
| **Ngày tạo (Created Date)** | [Ví dụ: 2026-06-15] |
| **Người kiểm duyệt (Reviewer)** | [Ví dụ: Nguyễn Văn A] |
| **Ngày kiểm duyệt (Review Date)** | [Ví dụ: 2026-06-16] |

## 2. Danh sách Test Cases Chi Tiết

### 2.1. Kiểm thử truy cập & Phân quyền (Access & Authorization)

| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|---|---|---|---|---|---|---|---|---|
| [ID_001] | Kiểm tra hệ thống chuyển hướng về màn hình đăng nhập khi mở trực tiếp URL màn hình lúc chưa đăng nhập | High | Người dùng chưa đăng nhập hệ thống | 1. Nhập trực tiếp URL màn hình `[path]` vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống không cho phép truy cập.<br>Tự động chuyển hướng về trang Đăng nhập (Login). | | |
| [ID_002] | Kiểm tra hệ thống cho phép truy cập màn hình khi mở trực tiếp URL lúc đã đăng nhập | Medium | Người dùng đã đăng nhập hệ thống thành công | 1. Nhập trực tiếp URL màn hình `[path]` vào thanh địa chỉ trình duyệt.<br>2. Nhấn Enter. | URL của màn hình | Hệ thống cho phép truy cập.<br>Hiển thị đúng giao diện màn hình. | | |
| [ID_003] | Kiểm tra mở màn hình [Screen_Name] thành công qua menu điều hướng | Low | Người dùng đang ở màn hình danh sách | 1. Click menu "[Tên menu]".<br>2. Click "[Tên màn hình/tab]" để mở màn hình [Screen_Name] (`[path]`). | - | Hệ thống mở màn hình [Screen_Name] thành công. | | |

### 2.2. Kiểm thử Giao diện Người dùng (UI/UX)

| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|---|---|---|---|---|---|---|---|---|
| [ID_004] | Kiểm tra hiển thị giao diện tổng quan | Low | Màn hình hiển thị bình thường | 1. Quan sát giao diện màn hình.<br>2. Kiểm tra layout, màu sắc, font chữ, khoảng cách giữa các trường. | - | 1. Layout cân đối, font chữ và cỡ chữ đồng nhất.<br>2. Các trường bắt buộc nhập có dấu sao đỏ (*).<br>3. Không có lỗi chính tả, lỗi dịch thuật tiếng Nhật/Anh/Việt.<br>4. Định dạng placeholder hiển thị chính xác theo thiết kế. | | |

### 2.3. Kiểm thử Validation các trường nhập liệu (Input Validation)
*(Tạo riêng từng bảng hoặc nhóm theo từng Field để dễ theo dõi)*

#### * Đối với Trường nhập liệu Text (Ví dụ: 【品番】/【品名】...)
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|---|---|---|---|---|---|---|---|---|
| [ID_005] | Kiểm tra giá trị mặc định | Low | Đã truy cập màn hình | 1. Quan sát trường [Tên Trường]. | - | Giá trị mặc định là trống (blank).<br>Hiển thị đúng Placeholder thiết kế. | | |
| [ID_006] | Kiểm tra trường bắt buộc nhập để trống | High | Đã truy cập màn hình | 1. Để trống trường [Tên Trường].<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | Empty | 1. Hiển thị thông báo lỗi trên đầu trang hoặc dưới field: "Hãy nhập [Tên Trường]" (tiếng Nhật/Anh tương ứng).<br>2. Field bị highlight viền đỏ. | | |
| [ID_007] | Kiểm tra nhập ký tự khoảng trắng (Spaces) | Medium | Đã truy cập màn hình | 1. Nhập toàn khoảng trắng vào trường.<br>2. Bấm nút thực hiện (Đăng ký/Lưu) hoặc focus out. | `"   "` | Hệ thống xem như để trống.<br>Báo lỗi bắt buộc nhập (nếu là trường Required) hoặc tự động trim khoảng trắng. | | |
| [ID_008] | Kiểm tra nhập khoảng trắng ở đầu/cuối chuỗi | Low | Đã truy cập màn hình | 1. Nhập chuỗi có khoảng trắng ở đầu/cuối.<br>2. Bấm nút thực hiện (Đăng ký/Lưu). | `"  data_test  "` | Hệ thống tự động cắt bỏ (trim) khoảng trắng ở đầu và cuối chuỗi trước khi lưu vào DB. | | |
| [ID_009] | Kiểm tra nhập độ dài tối thiểu/tối đa (Boundary Value) | Medium | Đã truy cập màn hình, biết Maxlength = N | 1. Nhập chuỗi có độ dài N - 1 ký tự.<br>2. Nhập chuỗi có độ dài N ký tự.<br>3. Nhập chuỗi có độ dài > N ký tự. | Chuỗi test tương ứng | - Với độ dài <= N: Cho phép nhập và lưu bình thường.<br>- Với độ dài > N: Hệ thống chặn trực tiếp trên UI (không cho gõ tiếp) hoặc báo lỗi hợp lệ. | | |
| [ID_010] | Kiểm tra nhập ký tự đặc biệt / Tiếng Nhật Halfwidth & Fullwidth | Medium | Đã truy cập màn hình | 1. Nhập các ký tự đặc biệt (!@#$).<br>2. Nhập ký tự Halfwidth (ｶﾀｶﾅ, 123).<br>3. Nhập ký tự Fullwidth (カタカナ, １２３). | Dữ liệu kiểm thử | Hệ thống lưu trữ đúng định dạng ký tự đã nhập (hoặc báo lỗi chuẩn nếu có quy định hạn chế định dạng). | | |
| [ID_011] | Kiểm tra thao tác Copy/Paste | Low | Đã truy cập màn hình | 1. Copy một chuỗi hợp lệ.<br>2. Paste vào trường thông tin.<br>3. Bấm nút thực hiện. | - | Cho phép paste dữ liệu vào field thành công và xử lý lưu bình thường. | | |

#### * Đối với Trường Số (Number / Price / Quantity)
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|---|---|---|---|---|---|---|---|---|
| [ID_012] | Kiểm tra nhập chữ cái và ký tự đặc biệt | Medium | Đã truy cập màn hình | 1. Cố gắng nhập chữ cái (a, b, c...) hoặc ký tự đặc biệt.<br>2. Bấm nút thực hiện. | `"abc"`, `"@#$"` | UI ngăn không cho nhập chữ cái/ký tự đặc biệt, chỉ chấp nhận chữ số. | | |
| [ID_013] | Kiểm tra nhập số âm | High | Đã truy cập màn hình | 1. Nhập số âm.<br>2. Bấm nút thực hiện. | `-10` | Báo lỗi giá trị phải lớn hơn hoặc bằng 0 (hoặc chặn dấu trừ `-` trực tiếp từ UI). | | |
| [ID_014] | Kiểm tra nhập số thập phân | High | Đã truy cập màn hình | 1. Nhập số có dấu phẩy thập phân.<br>2. Bấm nút thực hiện. | `1.5`, `2,3` | Báo lỗi chỉ chấp nhận số nguyên (hoặc chấp nhận số thập phân tùy đặc tả nghiệp vụ). | | |
| [ID_015] | Kiểm tra hiển thị định dạng phân tách hàng nghìn | Low | Đã truy cập màn hình | 1. Nhập số lớn.<br>2. Focus out khỏi trường nhập liệu. | `1000000` | Số tự động định dạng phân tách hàng nghìn (Ví dụ: `1,000,000`). | | |

#### * Đối với Trường File Upload (Hình ảnh)
| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|---|---|---|---|---|---|---|---|---|
| [ID_016] | Kiểm tra không upload file (Trường tùy chọn) | Medium | Đã truy cập màn hình | 1. Không chọn file upload.<br>2. Bấm nút thực hiện. | - | Hệ thống cho phép thực hiện thành công mà không báo lỗi. | | |
| [ID_017] | Kiểm tra upload file sai định dạng | High | Định dạng cho phép: jpeg, png | 1. Chọn upload file có định dạng không được phép (xlsx, gif, pdf...). | File `.pdf`, `.xlsx` | Upload không thành công. Hiển thị thông báo lỗi đúng thiết kế: "Hình ảnh phải là định dạng jpeg hoặc png." | | |
| [ID_018] | Kiểm tra upload dung lượng vượt quá giới hạn | High | Giới hạn dung lượng: tối đa 10MB | 1. Chọn file có kích thước > 10MB.<br>2. Tiến hành upload. | File kích thước `10.5MB` | Upload thất bại. Hiển thị lỗi cảnh báo: "Dung lượng hình ảnh vượt quá 10MB." | | |
| [ID_019] | Kiểm tra upload file giả mạo đuôi mở rộng (Spoofing) | High | Đã truy cập màn hình | 1. Đổi đuôi file thực thi nguy hiểm `.exe` thành `.jpg`.<br>2. Chọn upload file này. | File `.exe` đổi tên thành `.jpg` | Hệ thống kiểm tra phần thân file (MIME type) thực tế và báo lỗi không đúng định dạng. | | |
| [ID_020] | Kiểm tra kéo thả file (Drag & Drop) | Low | Đã truy cập màn hình | 1. Kéo file ảnh thả vào vùng upload. | File `.png` hợp lệ | Upload file thành công và hiển thị thumbnail ảnh xem trước trên giao diện. | | |

### 2.4. Kiểm thử Logic Nghiệp vụ (Business Rules - BR)

| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|---|---|---|---|---|---|---|---|---|
| [ID_021] | Kiểm tra ràng buộc trùng lặp dữ liệu duy nhất (Unique) | High | Đã tồn tại bản ghi trong DB | 1. Nhập thông tin trùng khóa chính/mã duy nhất với bản ghi cũ.<br>2. Điền các thông tin hợp lệ khác.<br>3. Bấm Đăng ký. | Mã trùng lặp | Hệ thống báo lỗi trùng lặp: "Mã/Tên này đã tồn tại trong hệ thống. Vui lòng kiểm tra lại." | | |
| [ID_022] | Kiểm tra logic liên kết dữ liệu động (Dynamic Form Control) | High | Điều kiện thay đổi hiển thị | 1. Tích chọn/Bỏ tích chọn [Checkbox điều kiện]. | - | Giao diện tự động thay đổi hiển thị ẩn/hiện hoặc disable/enable các trường thông tin liên quan theo đúng mô tả BR. | | |
| [ID_023] | Kiểm tra lưu dữ liệu vào Database thành công | Critical | Nhập đầy đủ và chính xác tất cả dữ liệu hợp lệ | 1. Nhập toàn bộ dữ liệu hợp lệ.<br>2. Bấm nút Đăng ký.<br>3. Kiểm tra DB và màn hình danh sách. | Dữ liệu hợp lệ | 1. Lưu bản ghi mới thành công.<br>2. Hiển thị thông báo thành công.<br>3. Dữ liệu trong Database khớp hoàn toàn các trường thông tin đã điền trên UI. | | |

### 2.5. Kiểm thử Ngoại lệ & Hệ thống (Exceptions & Systems)

| Test Case ID | Test Case Name | Severity | Pre-condition | Steps | Data Test | Expected Result | Ticket ID | Comment |
|---|---|---|---|---|---|---|---|---|
| [ID_024] | Bấm nút Đăng ký nhiều lần liên tiếp (Double Click) | High | Đã điền đầy đủ dữ liệu hợp lệ | 1. Click liên tiếp nhiều lần vào nút Đăng ký/Lưu. | - | Nút bấm bị disable ngay sau lượt click đầu tiên. Hệ thống chỉ xử lý và tạo duy nhất 1 bản ghi trong DB, không tạo trùng lặp. | | |
| [ID_025] | Kiểm tra mất kết nối mạng đột ngột khi bấm Lưu | High | Điền đầy đủ dữ liệu hợp lệ | 1. Bấm nút Lưu.<br>2. Đồng thời ngắt kết nối mạng (hoặc giả lập mất kết nối mạng). | - | Hệ thống hiển thị loading và thông báo lỗi kết nối mạng, không bị crash hoặc treo màn hình trắng. | | |
| [ID_026] | Kiểm tra nhấn nút Quay lại (戻る) | Low | Đã điền một số dữ liệu | 1. Nhập một số thông tin.<br>2. Bấm nút Quay lại. | - | Hệ thống chuyển hướng về màn hình danh sách trước đó.<br>Bản ghi mới không được tạo trong DB. | | |
```
