# 📋 BỘ TEMPLATE TEST CASE CHUẨN DÀNH CHO TESTER FRESHER

> **Version:** 1.0 | **Tác giả:** QA Team | **Cập nhật:** 2025
> **Mục đích:** Template chuẩn hóa viết test case, dễ import vào Excel/Jira/TestRail

---

## 📌 MỤC LỤC

1. [Hướng dẫn cấu trúc Test Case](#1-hướng-dẫn-cấu-trúc-test-case)
2. [Convention đặt tên TC ID](#2-convention-đặt-tên-tc-id)
3. [Bảng trạng thái Test Case](#3-bảng-trạng-thái-test-case)
4. [Ví dụ 10 Test Case mẫu - Tính năng Đăng nhập](#4-ví-dụ-10-test-case-mẫu---tính-năng-đăng-nhập)
5. [Checklist trước khi submit Test Case](#5-checklist-trước-khi-submit-test-case)

---

## 1. HƯỚNG DẪN CẤU TRÚC TEST CASE

### 1.1 Giải thích từng trường (Field Description)

| # | Tên Trường | Tên Tiếng Anh | Bắt buộc | Mô tả chi tiết | Ví dụ |
|---|-----------|---------------|----------|----------------|-------|
| 1 | **TC ID** | Test Case ID | ✅ | Mã định danh duy nhất của test case, đặt theo convention | `AUTH_LOGIN_TC001` |
| 2 | **Test Suite** | Test Suite | ✅ | Nhóm/Module chứa test case này | `Authentication > Login` |
| 3 | **Tiêu đề / Mô tả** | Test Case Title | ✅ | Mô tả ngắn gọn, rõ ràng mục đích test. Format: `[Hành động] + [Đối tượng] + [Điều kiện]` | `Đăng nhập thành công với email và mật khẩu hợp lệ` |
| 4 | **Điều kiện tiên quyết** | Preconditions | ✅ | Tất cả điều kiện PHẢI thỏa mãn TRƯỚC khi chạy TC. Liệt kê dạng danh sách | `1. Ứng dụng đang chạy` `2. User đã có tài khoản` |
| 5 | **Bước thực hiện** | Test Steps | ✅ | Các bước thực hiện theo thứ tự, cụ thể, rõ ràng, ai cũng làm được | `1. Mở trang login` `2. Nhập email` `3. Nhập password` `4. Click "Đăng nhập"` |
| 6 | **Dữ liệu đầu vào** | Test Data | ⚠️ | Dữ liệu cụ thể dùng để test. Điền N/A nếu không có | `Email: test@example.com` `Password: Test@123` |
| 7 | **Kết quả mong đợi** | Expected Result | ✅ | Điều gì PHẢI xảy ra sau khi thực hiện đúng các bước. Cụ thể, đo lường được | `Hệ thống chuyển hướng đến Dashboard, hiển thị "Chào mừng [tên user]"` |
| 8 | **Kết quả thực tế** | Actual Result | ✅* | Điều gì THỰC SỰ xảy ra khi test. Điền sau khi chạy TC. Để trống nếu chưa chạy | `Hệ thống chuyển hướng đến trang Dashboard` |
| 9 | **Trạng thái** | Status | ✅* | Kết quả sau khi chạy TC | `Pass` |
| 10 | **Ghi chú** | Notes/Comments | ❌ | Thông tin bổ sung: bug ID, môi trường test, screenshot, link... | `Bug #1234, Screenshot: link_ảnh` |

> ⚠️ *: Điền sau khi thực thi test

---

### 1.2 Sơ đồ quy trình viết Test Case

```
┌─────────────────────────────────────────────────────────────────┐
│                    QUY TRÌNH VIẾT TEST CASE                     │
└─────────────────────────────────────────────────────────────────┘

  📄 Đọc Requirements        🧠 Phân tích & Identify        ✍️ Viết Test Case
  ───────────────────    →   ──────────────────────────  →  ──────────────────
  • Đọc kỹ tài liệu          • Happy Path                   • Điền đủ 10 trường
  • Hỏi BA nếu unclear       • Negative Cases               • Dùng template này
  • Xác nhận scope           • Edge Cases                   • Ngôn ngữ rõ ràng
                             • Boundary Values

         ↓
  👥 Review với Lead         ✅ Approve & Baseline          🚀 Execute & Update
  ───────────────────    →   ──────────────────────────  →  ──────────────────
  • Peer review              • Lưu vào Test Repository      • Điền Actual Result
  • Chỉnh sửa nếu cần        • Version control              • Cập nhật Status
  • Confirm coverage         • Link với Requirements        • Tạo Bug nếu Fail
```

---

### 1.3 Nguyên tắc vàng khi viết Test Case

```
╔══════════════════════════════════════════════════════════════╗
║              5 NGUYÊN TẮC VÀNG - VIẾT TEST CASE             ║
╠══════════════════════════════════════════════════════════════╣
║                                                              ║
║  1. CLEAR      │ Rõ ràng - Ai đọc cũng hiểu, không mơ hồ  ║
║  ──────────────┼────────────────────────────────────────── ║
║  2. CONCISE    │ Súc tích - Không dài dòng, đúng trọng tâm ║
║  ──────────────┼────────────────────────────────────────── ║
║  3. COMPLETE   │ Đầy đủ - Có đủ data, steps, expected      ║
║  ──────────────┼────────────────────────────────────────── ║
║  4. CONSISTENT │ Nhất quán - Dùng chung format, ngôn ngữ   ║
║  ──────────────┼────────────────────────────────────────── ║
║  5. CORRECT    │ Chính xác - Expected result đúng với spec  ║
║                                                              ║
╚══════════════════════════════════════════════════════════════╝
```

---

## 2. CONVENTION ĐẶT TÊN TC ID

### 2.1 Cấu trúc TC ID

```
┌────────────────────────────────────────────────────────────────────┐
│                      CẤU TRÚC TC ID                                │
│                                                                    │
│   [MODULE]_[FEATURE]_TC[NUMBER]                                    │
│      │         │         │                                         │
│      │         │         └── Số thứ tự: 3 chữ số, bắt đầu từ 001 │
│      │         └──────────── Tính năng: UPPERCASE, viết tắt       │
│      └────────────────────── Module: UPPERCASE, viết tắt           │
│                                                                    │
│   VÍ DỤ:   AUTH_LOGIN_TC001                                        │
│            CART_ADDITEM_TC012                                       │
│            USER_PROFILE_TC003                                       │
│            PAY_CHECKOUT_TC025                                       │
└────────────────────────────────────────────────────────────────────┘
```

### 2.2 Bảng viết tắt Module phổ biến

| Module | Viết tắt | Ví dụ TC ID |
|--------|----------|-------------|
| Authentication (Xác thực) | `AUTH` | `AUTH_LOGIN_TC001` |
| User Management (Quản lý User) | `USER` | `USER_REG_TC001` |
| Shopping Cart (Giỏ hàng) | `CART` | `CART_ADD_TC001` |
| Payment (Thanh toán) | `PAY` | `PAY_VNPAY_TC001` |
| Search (Tìm kiếm) | `SRCH` | `SRCH_FILTER_TC001` |
| Product (Sản phẩm) | `PROD` | `PROD_DETAIL_TC001` |
| Order (Đơn hàng) | `ORD` | `ORD_CANCEL_TC001` |
| Notification (Thông báo) | `NOTIF` | `NOTIF_EMAIL_TC001` |
| Report (Báo cáo) | `RPT` | `RPT_EXPORT_TC001` |
| Admin (Quản trị) | `ADMIN` | `ADMIN_PERM_TC001` |

### 2.3 Quy tắc đánh số

```
TC001 → TC009   : Happy Path (positive cases)
TC010 → TC019   : Negative Cases
TC020 → TC029   : Edge Cases / Boundary Values
TC030 → TC039   : Security Cases
TC040 → TC049   : Performance Cases (nếu có)
TC050+          : Others
```

> 💡 **Tip:** Khi thêm TC mới, KHÔNG đánh lại số cũ. Thêm tiếp theo số cuối cùng để tránh xung đột.

---

## 3. BẢNG TRẠNG THÁI TEST CASE

### 3.1 Trạng thái Execution (Khi chạy test)

| Trạng thái | Màu sắc | Ký hiệu | Định nghĩa | Hành động tiếp theo |
|------------|---------|---------|-----------|---------------------|
| **Pass** | 🟢 Xanh | ✅ | Actual Result = Expected Result, tính năng hoạt động đúng | Không cần làm gì thêm |
| **Fail** | 🔴 Đỏ | ❌ | Actual Result ≠ Expected Result, tìm thấy bug | Tạo Bug Report ngay, link Bug ID vào cột Ghi chú |
| **Blocked** | 🟡 Vàng | 🚫 | Không thể thực thi do phụ thuộc bên ngoài (môi trường lỗi, data chưa có, tính năng khác chưa xong) | Ghi rõ lý do blocked, escalate với Lead |
| **Skip** | ⚪ Xám | ⏭️ | Có chủ đích bỏ qua TC này trong sprint/cycle này | Ghi lý do skip (out of scope, deprioritized...) |
| **N/A** | 🔵 Xanh dương | — | Không áp dụng cho version/environment này | Document lý do N/A |

### 3.2 Trạng thái Design (Khi viết test case)

| Trạng thái | Định nghĩa | Người thực hiện |
|------------|-----------|-----------------|
| **Draft** | TC đang được viết, chưa review | Tester |
| **In Review** | TC đã viết xong, đang chờ review | QA Lead |
| **Approved** | TC đã được approve, sẵn sàng execute | QA Lead |
| **Outdated** | TC cần cập nhật do requirement thay đổi | Tester |
| **Deprecated** | TC không còn dùng nữa | QA Lead |

### 3.3 Quy tắc cập nhật Status

```
┌──────────────────────────────────────────────────────────┐
│              FLOW CẬP NHẬT STATUS                        │
│                                                          │
│  Chưa chạy        Đang chạy        Sau khi chạy         │
│  ─────────    →   ──────────   →   ────────────          │
│  [Blank]          [In Progress]    [Pass] ✅             │
│                                    [Fail] ❌ → Tạo Bug  │
│                                    [Blocked] 🚫          │
│                                    [Skip] ⏭️             │
│                                                          │
│  ⚠️  KHÔNG được để status = Fail mà không có Bug ID!    │
└──────────────────────────────────────────────────────────┘
```

---

## 4. VÍ DỤ 10 TEST CASE MẪU - TÍNH NĂNG ĐĂNG NHẬP

### 4.1 Thông tin Test Suite

```
┌─────────────────────────────────────────────────────────┐
│  Project      : E-Commerce Web Application              │
│  Module       : Authentication (AUTH)                   │
│  Feature      : Login / Đăng nhập                       │
│  Test Suite   : AUTH_LOGIN                              │
│  Environment  : Staging                                 │
│  Browser      : Chrome 120, Firefox 121                 │
│  Tester       : [Tên tester]                            │
│  Ngày tạo     : [DD/MM/YYYY]                            │
│  Ngày execute : [DD/MM/YYYY]                            │
│  Version App  : v2.1.0                                  │
└─────────────────────────────────────────────────────────┘
```

### 4.2 Điều kiện tiên quyết chung (Common Preconditions)

> Áp dụng cho TẤT CẢ các TC trong suite này, trừ khi có ghi chú riêng:
> 1. Ứng dụng đã được deploy lên môi trường Staging thành công
> 2. Database đã được seed dữ liệu test
> 3. Trình duyệt Chrome phiên bản mới nhất, đã xóa cache và cookie
> 4. Tài khoản test đã được tạo sẵn với thông tin:
>    - Email hợp lệ: `tester@testmail.com`
>    - Password hợp lệ: `Test@1234`
>    - Trạng thái: Active, đã verify email
> 5. Trang Login đang hiển thị tại URL: `https://staging.example.com/login`

---

### 4.3 Bảng Test Cases

---

#### ✅ TC001 - Happy Path: Đăng nhập thành công

| Trường | Nội dung |
|--------|----------|
| **TC ID** | `AUTH_LOGIN_TC001` |
| **Test Suite** | Authentication > Login |
| **Tiêu đề** | Đăng nhập thành công với email và mật khẩu hợp lệ |
| **Loại TC** | Happy Path |
| **Độ ưu tiên** | P1 - Critical |
| **Điều kiện tiên quyết** | Áp dụng điều kiện tiên quyết chung |
| **Bước thực hiện** | 1. Truy cập trang Login tại `https://staging.example.com/login` 2. Nhập vào ô "Email": `tester@testmail.com` 3. Nhập vào ô "Mật khẩu": `Test@1234` 4. Click button **"Đăng nhập"** |
| **Dữ liệu đầu vào** | Email: `tester@testmail.com` Password: `Test@1234` |
| **Kết quả mong đợi** | - Hệ thống chuyển hướng đến trang Dashboard (`/dashboard`) - Hiển thị message: *"Chào mừng, [Tên user]!"* - Navigation bar hiển thị avatar và tên user - Không hiển thị bất kỳ thông báo lỗi nào |
| **Kết quả thực tế** | *(Điền sau khi execute)* |
| **Trạng thái** | *(Điền sau khi execute)* |
| **Ghi chú** | TC quan trọng nhất, luôn chạy đầu tiên trong regression |

---

#### ✅ TC002 - Happy Path: Đăng nhập và ghi nhớ phiên

| Trường | Nội dung |
|--------|----------|
| **TC ID** | `AUTH_LOGIN_TC002` |
| **Test Suite** | Authentication > Login |
| **Tiêu đề** | Đăng nhập thành công với chức năng "Ghi nhớ đăng nhập" (Remember Me) |
| **Loại TC** | Happy Path |
| **Độ ưu tiên** | P2 - High |
| **Điều kiện tiên quyết** | Áp dụng điều kiện tiên quyết chung |
| **Bước thực hiện** | 1. Truy cập trang Login 2. Nhập Email: `tester@testmail.com` 3. Nhập Password: `Test@1234` 4. Tick chọn checkbox **"Ghi nhớ đăng nhập"** 5. Click button **"Đăng nhập"** 6. Đóng trình duyệt hoàn toàn 7. Mở lại trình duyệt, truy cập lại `https://staging.example.com` |
| **Dữ liệu đầu vào** | Email: `tester@testmail.com` Password: `Test@1234` Remember Me: ✅ Checked |
| **Kết quả mong đợi** | - Bước 5: Đăng nhập thành công, vào Dashboard - Bước 7: Hệ thống tự động nhận diện session, KHÔNG hiện trang Login, trực tiếp vào Dashboard với user đã đăng nhập |
| **Kết quả thực tế** | *(Điền sau khi execute)* |
| **Trạng thái** | *(Điền sau khi execute)* |
| **Ghi chú** | Kiểm tra cookie `remember_token` trong DevTools > Application > Cookies |

---

#### ❌ TC010 - Negative: Mật khẩu sai

| Trường | Nội dung |
|--------|----------|
| **TC ID** | `AUTH_LOGIN_TC010` |
| **Test Suite** | Authentication > Login |
| **Tiêu đề** | Đăng nhập thất bại khi nhập mật khẩu không đúng |
| **Loại TC** | Negative Case |
| **Độ ưu tiên** | P1 - Critical |
| **Điều kiện tiên quyết** | Áp dụng điều kiện tiên quyết chung |
| **Bước thực hiện** | 1. Truy cập trang Login 2. Nhập Email: `tester@testmail.com` 3. Nhập Password: `SaiMatKhau999` 4. Click button **"Đăng nhập"** |
| **Dữ liệu đầu vào** | Email: `tester@testmail.com` Password: `SaiMatKhau999` *(sai password)* |
| **Kết quả mong đợi** | - Hệ thống KHÔNG đăng nhập - Ở lại trang Login, KHÔNG chuyển hướng - Hiển thị thông báo lỗi: *"Email hoặc mật khẩu không chính xác"* - Ô Password được xóa trắng, ô Email vẫn giữ giá trị - Không lộ thông tin nào về tài khoản (không nói "mật khẩu sai" hay "tài khoản đúng") |
| **Kết quả thực tế** | *(Điền sau khi execute)* |
| **Trạng thái** | *(Điền sau khi execute)* |
| **Ghi chú** | Lưu ý: Message lỗi phải generic, không được phân biệt "email sai" hay "password sai" - security requirement |

---

#### ❌ TC011 - Negative: Email không tồn tại

| Trường | Nội dung |
|--------|----------|
| **TC ID** | `AUTH_LOGIN_TC011` |
| **Test Suite** | Authentication > Login |
| **Tiêu đề** | Đăng nhập thất bại khi email không tồn tại trong hệ thống |
| **Loại TC** | Negative Case |
| **Độ ưu tiên** | P1 - Critical |
| **Điều kiện tiên quyết** | Áp dụng điều kiện tiên quyết chung + Xác nhận email `khongtontai@testmail.com` chưa được đăng ký trong hệ thống |
| **Bước thực hiện** | 1. Truy cập trang Login 2. Nhập Email: `khongtontai@testmail.com` 3. Nhập Password: `Test@1234` 4. Click button **"Đăng nhập"** |
| **Dữ liệu đầu vào** | Email: `khongtontai@testmail.com` *(email chưa đăng ký)* Password: `Test@1234` |
| **Kết quả mong đợi** | - Hệ thống KHÔNG đăng nhập - Ở lại trang Login - Hiển thị thông báo lỗi: *"Email hoặc mật khẩu không chính xác"* *(cùng message với TC010 để tránh user enumeration attack)* |
| **Kết quả thực tế** | *(Điền sau khi execute)* |
| **Trạng thái** | *(Điền sau khi execute)* |
| **Ghi chú** | Security: Message phải GIỐNG HỆT TC010, không phân biệt |

---

#### ❌ TC012 - Negative: Để trống các trường bắt buộc

| Trường | Nội dung |
|--------|----------|
| **TC ID** | `AUTH_LOGIN_TC012` |
| **Test Suite** | Authentication > Login |
| **Tiêu đề** | Đăng nhập thất bại khi để trống email và mật khẩu |
| **Loại TC** | Negative Case |
| **Độ ưu tiên** | P2 - High |
| **Điều kiện tiên quyết** | Trang Login đang hiển thị, ô Email và Password đang trống |
| **Bước thực hiện** | 1. Truy cập trang Login 2. KHÔNG nhập gì vào ô Email 3. KHÔNG nhập gì vào ô Password 4. Click button **"Đăng nhập"** |
| **Dữ liệu đầu vào** | Email: *(để trống)* Password: *(để trống)* |
| **Kết quả mong đợi** | - Hệ thống KHÔNG submit form - Hiển thị inline validation error dưới ô Email: *"Email không được để trống"* - Hiển thị inline validation error dưới ô Password: *"Mật khẩu không được để trống"* - Focus tự động vào ô Email |
| **Kết quả thực tế** | *(Điền sau khi execute)* |
| **Trạng thái** | *(Điền sau khi execute)* |
| **Ghi chú** | Kiểm tra thêm: Chỉ để trống Email (có Password) và ngược lại |

---

#### ❌ TC013 - Negative: Định dạng email không hợp lệ

| Trường | Nội dung |
|--------|----------|
| **TC ID** | `AUTH_LOGIN_TC013` |
| **Test Suite** | Authentication > Login |
| **Tiêu đề** | Đăng nhập thất bại khi nhập email sai định dạng |
| **Loại TC** | Negative Case |
| **Độ ưu tiên** | P2 - High |
| **Điều kiện tiên quyết** | Áp dụng điều kiện tiên quyết chung |
| **Bước thực hiện** | 1. Truy cập trang Login 2. Lần lượt thử các email sau vào ô Email: a) `testertestmail.com` *(thiếu @)* b) `tester@` *(thiếu domain)* c) `@testmail.com` *(thiếu local part)* d) `tester @testmail.com` *(có khoảng trắng)* 3. Nhập Password hợp lệ: `Test@1234` 4. Click **"Đăng nhập"** sau mỗi lần |
| **Dữ liệu đầu vào** | Email: `testertestmail.com` / `tester@` / `@testmail.com` / `tester @testmail.com` Password: `Test@1234` |
| **Kết quả mong đợi** | - Hệ thống KHÔNG submit form - Hiển thị inline error: *"Email không đúng định dạng"* - Áp dụng cho TẤT CẢ 4 trường hợp trên |
| **Kết quả thực tế** | *(Điền sau khi execute)* |
| **Trạng thái** | *(Điền sau khi execute)* |
| **Ghi chú** | Nếu dùng HTML5 validation (`type="email"`), browser sẽ tự validate - vẫn cần test để confirm |

---

#### ❌ TC014 - Negative: Tài khoản bị khóa sau nhiều lần đăng nhập sai

| Trường | Nội dung |
|--------|----------|
| **TC ID** | `AUTH_LOGIN_TC014` |
| **Test Suite** | Authentication > Login |
| **Tiêu đề** | Tài khoản bị khóa tạm thời sau 5 lần đăng nhập sai liên tiếp |
| **Loại TC** | Negative Case + Security |
| **Độ ưu tiên** | P1 - Critical |
| **Điều kiện tiên quyết** | - Áp dụng điều kiện tiên quyết chung - Tài khoản `tester@testmail.com` đang Active và chưa bị khóa - Xác nhận với Dev: hệ thống lock account sau 5 lần sai |
| **Bước thực hiện** | 1. Truy cập trang Login 2. Nhập Email: `tester@testmail.com`, Password: `SaiMatKhau1` → Click Đăng nhập 3. Nhập Email: `tester@testmail.com`, Password: `SaiMatKhau2` → Click Đăng nhập 4. Nhập Email: `tester@testmail.com`, Password: `SaiMatKhau3` → Click Đăng nhập 5. Nhập Email: `tester@testmail.com`, Password: `SaiMatKhau4` → Click Đăng nhập 6. Nhập Email: `tester@testmail.com`, Password: `SaiMatKhau5` → Click Đăng nhập *(lần thứ 5)* 7. Thử đăng nhập lần 6 với password ĐÚNG: `Test@1234` |
| **Dữ liệu đầu vào** | Email: `tester@testmail.com` Lần 1-5: Password sai Lần 6: Password đúng `Test@1234` |
| **Kết quả mong đợi** | - Lần 1-4: Hiển thị "Email hoặc mật khẩu không chính xác" - Lần 5: Hiển thị *"Tài khoản đã bị khóa tạm thời do đăng nhập sai nhiều lần. Vui lòng thử lại sau 15 phút hoặc kiểm tra email để mở khóa"* - Lần 6: Vẫn hiển thị thông báo khóa tài khoản, KHÔNG cho đăng nhập dù password đúng |
| **Kết quả thực tế** | *(Điền sau khi execute)* |
| **Trạng thái** | *(Điền sau khi execute)* |
| **Ghi chú** | ⚠️ **Sau khi test**: Reset trạng thái tài khoản trong DB trước khi chạy TC khác. Command: `UPDATE users SET locked=0, failed_attempts=0 WHERE email='tester@testmail.com'` |

---

#### 🔲 TC020 - Edge Case: Khoảng trắng đầu/cuối trong input

| Trường | Nội dung |
|--------|----------|
| **TC ID** | `AUTH_LOGIN_TC020` |
| **Test Suite** | Authentication > Login |
| **Tiêu đề** | Đăng nhập với email có khoảng trắng thừa đầu/cuối (whitespace trimming) |
| **Loại TC** | Edge Case |
| **Độ ưu tiên** | P3 - Medium |
| **Điều kiện tiên quyết** | Áp dụng điều kiện tiên quyết chung |
| **Bước thực hiện** | 1. Truy cập trang Login 2. Nhập vào ô Email: `   tester@testmail.com   ` *(có 3 khoảng trắng trước và sau)* 3. Nhập Password: `Test@1234` 4. Click **"Đăng nhập"** |
| **Dữ liệu đầu vào** | Email: `   tester@testmail.com   ` *(leading + trailing spaces)* Password: `Test@1234` |
| **Kết quả mong đợi** | - Hệ thống tự động trim khoảng trắng - Đăng nhập THÀNH CÔNG - Chuyển hướng đến Dashboard như TC001 |
| **Kết quả thực tế** | *(Điền sau khi execute)* |
| **Trạng thái** | *(Điền sau khi execute)* |
| **Ghi chú** | Nếu Fail: hệ thống không trim email → UX bug, user hay bị nhầm. Kiểm tra thêm với password có space |

---

#### 🔲 TC021 - Edge Case: Mật khẩu với ký tự đặc biệt

| Trường | Nội dung |
|--------|----------|
| **TC ID** | `AUTH_LOGIN_TC021` |
| **Test Suite** | Authentication > Login |
| **Tiêu đề** | Đăng nhập thành công với mật khẩu chứa ký tự đặc biệt |
| **Loại TC** | Edge Case |
| **Độ ưu tiên** | P2 - High |
| **Điều kiện tiên quyết** | - Áp dụng điều kiện tiên quyết chung - Tạo trước tài khoản với password chứa ký tự đặc biệt: `P@$$w0rd!#&*()` |
| **Bước thực hiện** | 1. Truy cập trang Login 2. Nhập Email: `special@testmail.com` 3. Nhập Password: `P@$$w0rd!#&*()` 4. Click **"Đăng nhập"** |
| **Dữ liệu đầu vào** | Email: `special@testmail.com` Password: `P@$$w0rd!#&*()` |
| **Kết quả mong đợi** | - Đăng nhập THÀNH CÔNG - Hệ thống xử lý đúng tất cả ký tự đặc biệt - Không bị lỗi SQL injection hay XSS - Chuyển hướng đến Dashboard |
| **Kết quả thực tế** | *(Điền sau khi execute)* |
| **Trạng thái** | *(Điền sau khi execute)* |
| **Ghi chú** | Đây cũng là basic security test. Nếu Fail → có thể có lỗ hổng injection |

---

#### 🔲 TC022 - Edge Case: Đăng nhập với email dạng chữ hoa/thường

| Trường | Nội dung |
|--------|----------|
| **TC ID** | `AUTH_LOGIN_TC022` |
| **Test Suite** | Authentication > Login |
| **Tiêu đề** | Đăng nhập thành công khi nhập email dạng chữ hoa (case-insensitive) |
| **Loại TC** | Edge Case |
| **Độ ưu tiên** | P2 - High |
| **Điều kiện tiên quyết** | Áp dụng điều kiện tiên quyết chung. Account gốc đăng ký với email chữ thường: `tester@testmail.com` |
| **Bước thực hiện** | 1. Truy cập trang Login 2. Nhập Email: `TESTER@TESTMAIL.COM` *(viết hoa toàn bộ)* 3. Nhập Password: `Test@1234` 4. Click **"Đăng nhập"** |
| **Dữ liệu đầu vào** | Email: `TESTER@TESTMAIL.COM` *(uppercase)* Password: `Test@1234` |
| **Kết quả mong đợi** | - Hệ thống xử lý email case-insensitive - Đăng nhập THÀNH CÔNG với tài khoản `tester@testmail.com` - Chuyển hướng đến Dashboard |
| **Kết quả thực tế** | *(Điền sau khi execute)* |
| **Trạng thái** | *(Điền sau khi execute)* |
| **Ghi chú** | RFC 5321: phần domain của email case-insensitive. Theo convention, cả email nên case-insensitive. Confirm với Dev/BA nếu cần |

---

### 4.4 Bảng tổng hợp tất cả Test Cases

| TC ID | Tiêu đề ngắn | Loại | Độ ưu tiên | Trạng thái |
|-------|-------------|------|------------|------------|
| AUTH_LOGIN_TC001 | Đăng nhập thành công với email/pass hợp lệ | Happy Path | P1 - Critical | ⬜ Chưa chạy |
| AUTH_LOGIN_TC002 | Đăng nhập với chức năng Remember Me | Happy Path | P2 - High | ⬜ Chưa chạy |
| AUTH_LOGIN_TC010 | Đăng nhập với mật khẩu sai | Negative | P1 - Critical | ⬜ Chưa chạy |
| AUTH_LOGIN_TC011 | Đăng nhập với email không tồn tại | Negative | P1 - Critical | ⬜ Chưa chạy |
| AUTH_LOGIN_TC012 | Để trống tất cả các trường | Negative | P2 - High | ⬜ Chưa chạy |
| AUTH_LOGIN_TC013 | Email sai định dạng | Negative | P2 - High | ⬜ Chưa chạy |
| AUTH_LOGIN_TC014 | Khóa tài khoản sau 5 lần sai | Negative + Security | P1 - Critical | ⬜ Chưa chạy |
| AUTH_LOGIN_TC020 | Email có khoảng trắng thừa | Edge Case | P3 - Medium | ⬜ Chưa chạy |
| AUTH_LOGIN_TC021 | Mật khẩu chứa ký tự đặc biệt | Edge Case | P2 - High | ⬜ Chưa chạy |
| AUTH_LOGIN_TC022 | Email dạng chữ hoa (case-insensitive) | Edge Case | P2 - High | ⬜ Chưa chạy |

---

## 5. CHECKLIST TRƯỚC KHI SUBMIT TEST CASE

```
╔══════════════════════════════════════════════════════════════════╗
║              CHECKLIST REVIEW TEST CASE                         ║
╠══════════════════════════════════════════════════════════════════╣
║                                                                  ║
║  PHẦN CẤU TRÚC                                                  ║
║  ☐ TC ID đúng convention, không trùng lặp                       ║
║  ☐ Tiêu đề rõ ràng, đủ thông tin Who/What/When                 ║
║  ☐ Điều kiện tiên quyết đầy đủ                                 ║
║  ☐ Bước thực hiện đủ chi tiết, người mới cũng làm được         ║
║  ☐ Dữ liệu đầu vào cụ thể (không mơ hồ)                       ║
║  ☐ Kết quả mong đợi cụ thể, measurable                         ║
║                                                                  ║
║  PHẦN NỘI DUNG                                                  ║
║  ☐ Đã cover Happy Path?                                         ║
║  ☐ Đã cover Negative Cases?                                     ║
║  ☐ Đã cover Edge/Boundary Cases?                                ║
║  ☐ Mỗi TC chỉ test 1 điều kiện (Single Responsibility)         ║
║  ☐ TC độc lập nhau (không phụ thuộc thứ tự chạy)               ║
║  ☐ TC có thể reproduce được (reproducible)                      ║
║                                                                  ║
║  PHẦN CHẤT LƯỢNG                                                ║
║  ☐ Không có lỗi chính tả, ngữ pháp                             ║
║  ☐ Dùng ngôn ngữ nhất quán trong cả Test Suite                 ║
║  ☐ Expected result không chứa từ "có thể", "khoảng"...         ║
║  ☐ Đã link với Requirement/User Story tương ứng?               ║
║  ☐ Đã được peer review bởi teammate?                            ║
║  ☐ Đã được approve bởi QA Lead?                                 ║
║                                                                  ║
╚══════════════════════════════════════════════════════════════════╝
```

---

## 📎 PHỤ LỤC - TEMPLATE TRỐNG ĐỂ COPY

```markdown
### TC[ID] - [Tiêu đề ngắn]

| Trường | Nội dung |
|--------|----------|
| **TC ID** | `[MODULE]_[FEATURE]_TC[NUMBER]` |
| **Test Suite** | [Module] > [Feature] |
| **Tiêu đề** | [Mô tả đầy đủ test case] |
| **Loại TC** | [Happy Path / Negative Case / Edge Case] |
| **Độ ưu tiên** | [P1 - Critical / P2 - High / P3 - Medium / P4 - Low] |
| **Điều kiện tiên quyết** | 1. [Điều kiện 1] 2. [Điều kiện 2] |
| **Bước thực hiện** | 1. [Bước 1] 2. [Bước 2] 3. [Bước 3] |
| **Dữ liệu đầu vào** | [Field 1]: [Value 1] [Field 2]: [Value 2] |
| **Kết quả mong đợi** | - [Expected 1] - [Expected 2] |
| **Kết quả thực tế** | *(Điền sau khi execute)* |
| **Trạng thái** | *(Điền sau khi execute)* |
| **Ghi chú** | [Bug ID / Link screenshot / Ghi chú thêm] |
```

---

> 📧 **Liên hệ hỗ trợ:** QA Lead | 🔄 **Cập nhật:** Mỗi khi có requirement thay đổi | 📁 **Lưu trữ:** Google Drive / Confluence / TestRail