# 📋 BUG REPORT TEMPLATE - JIRA
### Dành cho QA/Tester Team | Phiên bản: 1.0 | Cập nhật: 2025

---

## 📌 HƯỚNG DẪN SỬ DỤNG NHANH

> **Trước khi tạo bug, hãy kiểm tra:**
> - [ ] Bug này đã tồn tại trong Jira chưa? (Search trước khi tạo)
> - [ ] Bạn có thể reproduce lại bug không? (Ít nhất 2 lần)
> - [ ] Screenshot/Video đã được chuẩn bị chưa?

---

## 🐛 PHẦN 1: THÔNG TIN BUG

### 📝 Summary (Tiêu đề bug)

**Format chuẩn:**
```
[Tên màn hình/Module] + [Hành động] + [Kết quả lỗi]
```

**Ví dụ đúng ✅**
```
[Đăng nhập] Nhập sai mật khẩu 3 lần nhưng không hiển thị thông báo khóa tài khoản
[Thanh toán] Nhấn "Xác nhận thanh toán" bằng Momo nhưng app bị crash
[Giỏ hàng] Tăng số lượng sản phẩm lên 99 nhưng giá tiền không cập nhật
```

**Ví dụ sai ❌**
```
Bug đăng nhập          → Quá chung chung, không rõ lỗi gì
Lỗi thanh toán Momo    → Không mô tả được hành động và kết quả
App bị crash           → Không biết xảy ra ở đâu, làm gì
```

---

### 🎯 Priority Guide - Hướng dẫn chọn mức độ ưu tiên

> **Quy tắc vàng:** Chọn Priority dựa trên **mức độ ảnh hưởng đến người dùng** và **tần suất xảy ra**, KHÔNG dựa trên cảm tính.

---

#### 🔴 BLOCKER - Chặn hoàn toàn, phải fix ngay lập tức

| Tiêu chí | Mô tả |
|----------|-------|
| **Ảnh hưởng** | Toàn bộ hệ thống hoặc luồng nghiệp vụ chính không thể hoạt động |
| **Người dùng bị ảnh hưởng** | 100% người dùng |
| **Có workaround không?** | Không có |
| **Thời gian fix** | Trong vòng 2-4 giờ |

**Ví dụ BLOCKER:**
- App crash ngay khi mở, không vào được giao diện chính
- Không thể đăng nhập bằng bất kỳ tài khoản nào
- Tất cả giao dịch thanh toán đều thất bại
- Database lỗi, không load được dữ liệu nào
- API server trả về 500 liên tục

---

#### 🟠 CRITICAL - Nghiêm trọng, ảnh hưởng luồng chính

| Tiêu chí | Mô tả |
|----------|-------|
| **Ảnh hưởng** | Tính năng quan trọng bị hỏng, ảnh hưởng nhiều người dùng |
| **Người dùng bị ảnh hưởng** | 50-99% người dùng |
| **Có workaround không?** | Không hoặc rất khó |
| **Thời gian fix** | Trong ngày hoặc sprint hiện tại |

**Ví dụ CRITICAL:**
- Đăng nhập bằng Google không hoạt động (Facebook vẫn OK)
- Thanh toán bằng thẻ Visa lỗi (ATM vẫn OK)
- Quên mật khẩu không gửi được email OTP
- Màn hình checkout bị trắng với một số loại thiết bị
- Dữ liệu người dùng hiển thị sai (ảnh hưởng trải nghiệm nghiêm trọng)

---

#### 🟡 MAJOR - Quan trọng, ảnh hưởng một phần trải nghiệm

| Tiêu chí | Mô tả |
|----------|-------|
| **Ảnh hưởng** | Tính năng phụ bị hỏng hoặc hoạt động không đúng |
| **Người dùng bị ảnh hưởng** | 20-50% người dùng |
| **Có workaround không?** | Có nhưng bất tiện |
| **Thời gian fix** | Trong sprint hiện tại hoặc sprint sau |

**Ví dụ MAJOR:**
- Bộ lọc tìm kiếm sản phẩm không hoạt động đúng
- Thông báo push notification không hiển thị trên iOS 17
- Giá khuyến mãi hiển thị sai trong giỏ hàng
- Không export được hóa đơn PDF
- Tính năng yêu thích sản phẩm không lưu được

---

#### 🔵 MINOR - Nhỏ, ảnh hưởng ít đến trải nghiệm

| Tiêu chí | Mô tả |
|----------|-------|
| **Ảnh hưởng** | Giao diện hoặc tính năng phụ bị lỗi nhỏ |
| **Người dùng bị ảnh hưởng** | Dưới 20% người dùng |
| **Có workaround không?** | Có và dễ dùng |
| **Thời gian fix** | Sprint sau hoặc theo lịch backlog |

**Ví dụ MINOR:**
- Chữ bị cắt trên màn hình nhỏ (< 5 inch)
- Tooltip hiển thị sai vị trí
- Animation chuyển màn hình bị giật nhẹ
- Placeholder text chưa xóa trong form
- Màu button chưa đúng với design

---

#### ⚪ TRIVIAL - Rất nhỏ, hầu như không ảnh hưởng

| Tiêu chí | Mô tả |
|----------|-------|
| **Ảnh hưởng** | Lỗi thẩm mỹ, typo, cosmetic |
| **Người dùng bị ảnh hưởng** | Hầu như không ai chú ý |
| **Có workaround không?** | Không cần workaround |
| **Thời gian fix** | Khi có thời gian rảnh |

**Ví dụ TRIVIAL:**
- Lỗi chính tả trong màn hình ít người xem
- Icon hơi lệch 2-3px so với design
- Màu sắc hơi khác shade so với mockup
- Khoảng cách padding chưa chuẩn pixel perfect
- Copyright năm chưa cập nhật

---

**Bảng tóm tắt nhanh:**

| Priority | Màu | Tác động | Fix khi nào |
|----------|-----|----------|-------------|
| 🔴 Blocker | Đỏ | Không dùng được app | Ngay lập tức |
| 🟠 Critical | Cam | Tính năng chính hỏng | Trong ngày |
| 🟡 Major | Vàng | Tính năng phụ hỏng | Sprint này |
| 🔵 Minor | Xanh | Trải nghiệm kém | Sprint sau |
| ⚪ Trivial | Xám | Thẩm mỹ | Khi rảnh |

---

## 🖥️ PHẦN 2: MÔI TRƯỜNG TEST

```
📱 THIẾT BỊ & HỆ ĐIỀU HÀNH
─────────────────────────────────────────
OS / Device    : [ ] Windows 11  [ ] macOS 14  [ ] Ubuntu 22.04
                 [ ] iOS ___  [ ] Android ___
                 Tên thiết bị: ________________________________
Phiên bản OS   : ____________________________________________

🌐 TRÌNH DUYỆT (nếu là Web)
─────────────────────────────────────────
Browser        : [ ] Chrome ___  [ ] Firefox ___  [ ] Safari ___
                 [ ] Edge ___    [ ] Khác: __________________
Chế độ         : [ ] Desktop  [ ] Mobile Responsive  [ ] Tablet

📦 PHIÊN BẢN ỨNG DỤNG
─────────────────────────────────────────
App Version    : ____________________________________________
Build Number   : ____________________________________________
Môi trường     : [ ] DEV  [ ] Staging  [ ] UAT  [ ] Production
Branch/Release : ____________________________________________

👤 TÀI KHOẢN TEST
─────────────────────────────────────────
Username       : ____________________________________________
Role/Quyền     : [ ] Admin  [ ] User thường  [ ] Guest
                 [ ] Khác: __________________________________
Ghi chú TK    : (VD: tài khoản mới, có KM, đã mua hàng...)
               : ____________________________________________

🌐 NETWORK
─────────────────────────────────────────
Kết nối        : [ ] WiFi  [ ] 4G  [ ] 3G  [ ] Offline
VPN            : [ ] Có  [ ] Không
```

---

## 🔄 PHẦN 3: STEPS TO REPRODUCE

> **Lưu ý:** Mỗi bước phải là **một hành động duy nhất**, đủ chi tiết để người khác làm theo **không cần hỏi thêm**.

```
Precondition (Điều kiện tiên quyết):
└── VD: Đã đăng nhập tài khoản user thường, giỏ hàng đang có 2 sản phẩm

Bước 1: [Mô tả hành động cụ thể]
         VD: Mở ứng dụng và vào màn hình "Đăng nhập"

Bước 2: [Mô tả hành động cụ thể]
         VD: Nhập email "test@gmail.com" vào trường Email

Bước 3: [Mô tả hành động cụ thể]
         VD: Nhập mật khẩu "123456" (sai mật khẩu) vào trường Password

Bước 4: [Mô tả hành động cụ thể]
         VD: Nhấn nút "Đăng nhập"

Bước 5: [Mô tả hành động cụ thể]
         VD: Lặp lại bước 2-4 thêm 2 lần nữa (tổng 3 lần sai)

[Thêm bước nếu cần...]
```

**Tips viết Steps hay:**
- ✅ "Nhập `abc@email.com` vào field Email" → Rõ ràng
- ❌ "Điền thông tin vào form" → Mơ hồ
- ✅ "Nhấn button **Xác nhận** màu xanh ở cuối trang" → Định vị rõ
- ❌ "Bấm nút xác nhận" → Không biết nút nào nếu có nhiều nút

---

## ✅ PHẦN 4: EXPECTED RESULT

> Mô tả **hệ thống PHẢI làm gì** theo đúng yêu cầu nghiệp vụ / design / spec.

```
Expected Result (Kết quả mong đợi):
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  [Mô tả kết quả đúng theo spec/requirement]            │
│                                                         │
│  VD: Sau khi nhập sai mật khẩu 3 lần liên tiếp,       │
│  hệ thống phải:                                         │
│  1. Hiển thị thông báo "Tài khoản tạm khóa 15 phút"   │
│  2. Vô hiệu hóa nút "Đăng nhập"                        │
│  3. Gửi email cảnh báo đến địa chỉ email đã đăng ký   │
│                                                         │
└─────────────────────────────────────────────────────────┘

Tham chiếu: [ ] Spec/Requirement số: ______________________
            [ ] Design Figma link: ________________________
            [ ] User Story: ________________________________
```

---

## ❌ PHẦN 5: ACTUAL RESULT

> Mô tả **thực tế đang xảy ra**, khách quan, không dùng từ "bị lỗi" chung chung.

```
Actual Result (Kết quả thực tế):
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  [Mô tả chính xác những gì xảy ra]                    │
│                                                         │
│  VD: Sau khi nhập sai mật khẩu 3 lần liên tiếp:       │
│  1. Hệ thống vẫn cho phép tiếp tục nhập mật khẩu      │
│  2. Không có thông báo nào về việc tài khoản bị khóa  │
│  3. Không có email cảnh báo được gửi đi                │
│  4. [Console log / Error message nếu có]:              │
│     "Error: undefined is not an object (line 234)"     │
│                                                         │
└─────────────────────────────────────────────────────────┘

Tần suất xảy ra: [ ] Luôn luôn (100%)  [ ] Thỉnh thoảng (~50%)
                 [ ] Hiếm khi (<20%)   [ ] Chỉ xảy ra 1 lần

Có thể reproduce: [ ] Có  [ ] Không  [ ] Chưa xác định
```

---

## 📎 PHẦN 6: ATTACHMENT CHECKLIST

> **Nguyên tắc:** Một bug report tốt = Dev có thể reproduce **mà không cần hỏi thêm gì**.

```
CHECKLIST ĐÍNH KÈM FILE
═══════════════════════════════════════════════════════

📸 SCREENSHOT
  [ ] Screenshot màn hình lỗi (FULL màn hình, có thanh trạng thái)
  [ ] Screenshot kết quả mong đợi (từ design/lần trước OK)
  [ ] Screenshot console log / error message
  [ ] Screenshot so sánh Expected vs Actual (nếu có)
  
  Định dạng: PNG hoặc JPG | Tên file: bug_[ID]_[mô tả ngắn].png

🎬 VIDEO/GIF
  [ ] Video record màn hình toàn bộ quá trình reproduce
  [ ] GIF tóm tắt các bước chính (dưới 30 giây)
  
  Định dạng: MP4/MOV | Độ phân giải tối thiểu: 720p
  Tên file: bug_[ID]_reproduce.mp4

📄 LOG FILE
  [ ] App log (Android: logcat / iOS: Xcode console)
  [ ] Network log (HAR file từ DevTools)
  [ ] API response (Postman / DevTools Network tab)
  [ ] Error stack trace
  
  Tên file: bug_[ID]_log_[date].txt

📊 DATA
  [ ] File dữ liệu test gây ra lỗi (CSV, Excel, JSON...)
  [ ] Database dump / query nếu liên quan
  [ ] Config/settings đang dùng khi lỗi xảy ra

OTHER
  [ ] Link Figma design tham chiếu
  [ ] Link requirement/user story liên quan
  [ ] Ghi chú bổ sung: _________________________________
  
═══════════════════════════════════════════════════════
⚠️  Bắt buộc: Screenshot HOẶC Video (ít nhất 1 trong 2)
```

---
---

# 📚 BUG REPORT MẪU - VÍ DỤ ĐIỀN SẴN

---

## 🔐 VÍ DỤ #1: Bug Đăng nhập - CRITICAL

---

### THÔNG TIN BUG

| Trường | Nội dung |
|--------|----------|
| **Summary** | [Đăng nhập] Nhập đúng email và mật khẩu nhưng nhận thông báo "Sai thông tin đăng nhập" |
| **Priority** | 🟠 Critical |
| **Severity** | High |
| **Reporter** | Nguyễn Thị Lan (QA) |
| **Assignee** | Team Backend |
| **Component** | Authentication Module |
| **Label** | `login` `authentication` `regression` |
| **Sprint** | Sprint 15 |
| **Ngày phát hiện** | 15/01/2025 |

**Lý do chọn Critical:**
> Tính năng đăng nhập là luồng chính của ứng dụng. Lỗi này ảnh hưởng đến khoảng 30% người dùng (những người đăng ký trước ngày 10/01/2025). Không có workaround nào ngoài việc dùng đăng nhập Google.

---

### MÔI TRƯỜNG TEST

```
📱 THIẾT BỊ & HỆ ĐIỀU HÀNH
─────────────────────────────────────────
OS / Device    : [x] iOS 17.2 - iPhone 15 Pro Max
Phiên bản OS   : iOS 17.2.1

🌐 TRÌNH DUYỆT
─────────────────────────────────────────
[Không áp dụng - Native App]

📦 PHIÊN BẢN ỨNG DỤNG
─────────────────────────────────────────
App Version    : v2.4.1
Build Number   : 241
Môi trường     : [x] Staging
Branch/Release : release/2.4.1

👤 TÀI KHOẢN TEST
─────────────────────────────────────────
Username       : test_user_old@gmail.com
Role/Quyền     : [x] User thường
Ghi chú TK    : Tài khoản đăng ký ngày 05/01/2025 (trước khi deploy hotfix)
               : Password: Test@123456

🌐 NETWORK
─────────────────────────────────────────
Kết nối        : [x] WiFi
VPN            : [x] Không
```

---

### STEPS TO REPRODUCE

```
Precondition:
└── Đã có tài khoản đăng ký trước ngày 10/01/2025
└── Ứng dụng đã cài đặt phiên bản v2.4.1
└── Chưa đăng nhập (đang ở màn hình Đăng nhập)

Bước 1: Mở ứng dụng ShopApp trên iPhone 15 Pro Max

Bước 2: Tại màn hình chính, nhấn nút "Đăng nhập" màu xanh

Bước 3: Nhập email "test_user_old@gmail.com" vào trường "Email"

Bước 4: Nhập mật khẩu "Test@123456" vào trường "Mật khẩu"

Bước 5: Nhấn nút "Đăng nhập" ở cuối form

Bước 6: Quan sát kết quả trả về trên màn hình
```

---

### EXPECTED RESULT

```
Expected Result:
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  Hệ thống xác thực thành công và:                      │
│  1. Chuyển hướng người dùng đến màn hình Trang chủ    │
│  2. Hiển thị tên "Xin chào, Nguyễn Thị Lan!" ở header │
│  3. Token JWT được lưu vào local storage               │
│                                                         │
│  Tham chiếu: User Story US-045 - Đăng nhập bằng Email │
│                                                         │
└─────────────────────────────────────────────────────────┘

Tham chiếu: [x] User Story: US-045
```

---

### ACTUAL RESULT

```
Actual Result:
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  Sau khi nhấn "Đăng nhập":                             │
│  1. Xuất hiện loading spinner trong 3 giây             │
│  2. Hiển thị toast message đỏ: "Email hoặc mật khẩu   │
│     không đúng. Vui lòng thử lại"                      │
│  3. Màn hình vẫn ở trang Đăng nhập, không redirect     │
│  4. Mật khẩu bị xóa, email vẫn giữ nguyên             │
│                                                         │
│  Console log (Xcode):                                   │
│  "ERROR AuthService: Password hash mismatch -          │
│   bcrypt version incompatible [2025-01-15 09:23:41]"  │
│                                                         │
│  NOTE: Đăng nhập bằng Google với cùng email này        │
│  vẫn thành công bình thường                             │
│                                                         │
└─────────────────────────────────────────────────────────┘

Tần suất xảy ra: [x] Luôn luôn (100%) - với tài khoản cũ
Có thể reproduce: [x] Có
```

---

### ATTACHMENT CHECKLIST

```
📸 SCREENSHOT
  [x] Screenshot màn hình lỗi: bug_001_login_error_toast.png
  [x] Screenshot console log: bug_001_xcode_log.png
  [ ] Screenshot kết quả mong đợi

🎬 VIDEO
  [x] Video reproduce: bug_001_login_reproduce.mp4 (45 giây)

📄 LOG FILE
  [x] Xcode console log: bug_001_xcode_console_20250115.txt
  [x] Network log (HAR): bug_001_network_log.har

OTHER
  [x] Link User Story: https://jira.company.com/browse/US-045
  [x] Ghi chú: Bug chỉ xảy ra với tài khoản tạo trước
               ngày 10/01/2025. Tài khoản mới tạo sau
               ngày đó đăng nhập bình thường.
```

---
---

## 💳 VÍ DỤ #2: Bug Thanh toán - BLOCKER

---

### THÔNG TIN BUG

| Trường | Nội dung |
|--------|----------|
| **Summary** | [Thanh toán] App bị crash ngay khi nhấn "Xác nhận thanh toán" qua ví MoMo |
| **Priority** | 🔴 Blocker |
| **Severity** | Critical |
| **Reporter** | Trần Văn Minh (QA Lead) |
| **Assignee** | Team Mobile + Team Payment |
| **Component** | Payment Module - MoMo Integration |
| **Label** | `payment` `momo` `crash` `blocker` `regression` |
| **Sprint** | Sprint 15 - URGENT |
| **Ngày phát hiện** | 15/01/2025 - 14:30 |

**Lý do chọn Blocker:**
> Thanh toán là luồng nghiệp vụ cốt lõi. App crash 100% khi dùng MoMo - phương thức thanh toán phổ biến nhất (chiếm 60% giao dịch). Không có workaround nào thỏa đáng. Ảnh hưởng trực tiếp đến doanh thu công ty.

---

### MÔI TRƯỜNG TEST

```
📱 THIẾT BỊ & HỆ ĐIỀU HÀNH
─────────────────────────────────────────
OS / Device    : [x] Android 14 - Samsung Galaxy S24
                     [x] Android 13 - Xiaomi 13T (đã verify)
                     [x] iOS 17 - iPhone 14 (đã verify)
Phiên bản OS   : Android 14.0 / iOS 17.2

📦 PHIÊN BẢN ỨNG DỤNG
─────────────────────────────────────────
App Version    : v2.4.1
Build Number   : 241
Môi trường     : [x] Production  [x] Staging (đã verify cả 2)
Branch/Release : hotfix/payment-momo

👤 TÀI KHOẢN TEST
─────────────────────────────────────────
Username       : qa_payment_test@company.com
Role/Quyền     : [x] User thường
Ghi chú TK    : Tài khoản test có số dư MoMo sandbox: 500,000 VND
               : Đã có 2 sản phẩm trong giỏ hàng (tổng 350,000 VND)

🌐 NETWORK
─────────────────────────────────────────
Kết nối        : [x] WiFi  [x] 4G (đã test cả 2, lỗi giống nhau)
VPN            : [x] Không
```

---

### STEPS TO REPRODUCE

```
Precondition:
└── Đã đăng nhập tài khoản qa_payment_test@company.com
└── Giỏ hàng đang có: 1x Áo thun (150,000đ) + 1x Quần jean (200,000đ)
└── Đã cài ví MoMo trên thiết bị và liên kết với tài khoản
└── Số dư MoMo đủ để thanh toán (≥ 350,000đ)

Bước 1: Từ màn hình Trang chủ, nhấn icon giỏ hàng ở góc trên phải

Bước 2: Tại màn hình Giỏ hàng, kiểm tra đã có 2 sản phẩm
         rồi nhấn nút "Tiến hành thanh toán" màu cam

Bước 3: Tại màn hình Checkout, chọn địa chỉ giao hàng
         "123 Nguyễn Huệ, Q.1, TP.HCM"

Bước 4: Tại mục "Phương thức thanh toán", nhấn vào
         option "Ví MoMo" (icon màu hồng)

Bước 5: Nhấn nút "Xác nhận thanh toán" màu cam ở cuối trang

Bước 6: Quan sát điều gì xảy ra với ứng dụng
```

---

### EXPECTED RESULT

```
Expected Result:
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  Sau khi nhấn "Xác nhận thanh toán":                   │
│  1. Hệ thống call API tạo đơn hàng thành công          │
│  2. App mở deeplink sang ứng dụng MoMo để xác nhận    │
│  3. Sau khi xác nhận trên MoMo, callback về app        │
│  4. Hiển thị màn hình "Đặt hàng thành công!"           │
│  5. Gửi email xác nhận đơn hàng cho khách              │
│                                                         │
│  Tham chiếu: US-089 - Thanh toán qua ví điện tử        │
│  Design: https://figma.com/file/xxx/payment-flow        │
│                                                         │
└─────────────────────────────────────────────────────────┘
```

---

### ACTUAL RESULT

```
Actual Result:
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  Ngay khi nhấn "Xác nhận thanh toán":                  │
│  1. Loading spinner xuất hiện trong ~0.5 giây          │
│  2. App CRASH hoàn toàn, tự đóng về màn hình Home      │
│     của điện thoại                                      │
│  3. Khi mở lại app: giỏ hàng vẫn còn nguyên            │
│  4. Không có đơn hàng nào được tạo (đã kiểm tra        │
│     trên admin portal)                                   │
│  5. Không có email xác nhận được gửi đi                │
│                                                         │
│  Crash log (Firebase Crashlytics):                      │
│  Fatal Exception: java.lang.NullPointerException       │
│  MomoPaymentSDK.initTransaction(line 456): null        │
│  PaymentActivity.onConfirmClick(line 123)              │
│                                                         │
│  NOTE: Thanh toán COD và VNPAY vẫn hoạt động OK        │
│  NOTE: Bug xảy ra ngay sau khi deploy v2.4.1           │
│  (v2.4.0 vẫn hoạt động bình thường)                    │
│                                                         │
└─────────────────────────────────────────────────────────┘

Tần suất xảy ra: [x] Luôn luôn (100%)
Có thể reproduce: [x] Có - đã reproduce 5 lần liên tiếp
```

---

### ATTACHMENT CHECKLIST

```
📸 SCREENSHOT
  [x] Screenshot crash screen: bug_002_app_crash_screen.png
  [x] Screenshot Firebase Crashlytics: bug_002_crashlytics.png
  [x] Screenshot admin portal (không có đơn hàng): bug_002_admin.png

🎬 VIDEO
  [x] Video reproduce đầy đủ: bug_002_momo_crash.mp4 (30 giây)

📄 LOG FILE
  [x] Android logcat: bug_002_logcat_20250115_1430.txt
  [x] Firebase Crashlytics report: bug_002_crashlytics_export.json
  [x] API request/response log: bug_002_network.har

OTHER
  [x] Link Crashlytics: https://console.firebase.google.com/xxx
  [x] Link User Story: https://jira.company.com/browse/US-089
  [x] Ghi chú: Đã thông báo cho PM và Tech Lead lúc 14:45.
               Cần rollback hoặc hotfix gấp vì ảnh hưởng
               doanh thu production.
               So sánh: v2.4.0 OK, v2.4.1 crash → nguyên nhân
               có thể là update MoMo SDK mới nhất.
```

---
---

## 🔐 VÍ DỤ #3: Bug Đăng nhập - MINOR

---

### THÔNG TIN BUG

| Trường | Nội dung |
|--------|----------|
| **Summary** | [Đăng nhập] Nút "Đăng nhập" vẫn active khi trường Email đang để trống |
| **Priority** | 🔵 Minor |
| **Severity** | Low |
| **Reporter** | Phạm Thị Hoa (QA) |
| **Assignee** | Team Frontend |
| **Component** | Authentication UI |
| **Label** | `login` `UI` `validation` `minor` |
| **Sprint** | Sprint 16 (Backlog) |
| **Ngày phát hiện** | 16/01/2025 |

**Lý do chọn Minor:**
> Lỗi UI validation, người dùng vẫn nhận được thông báo lỗi khi nhấn submit với form trống (chỉ là thông báo đến muộn hơn). Có workaround là đọc thông báo lỗi. Không ảnh hưởng đến luồng đăng nhập chính.

---

### MÔI TRƯỜNG TEST

```
📦 PHIÊN BẢN ỨNG DỤNG
─────────────────────────────────────────
App Version    : v2.4.1
Môi trường     : [x] Staging
Browser        : [x] Chrome 121 (Desktop)  [x] Safari Mobile (đã verify)

👤 TÀI KHOẢN TEST
─────────────────────────────────────────
Username       : Không cần đăng nhập (lỗi xảy ra trước bước đăng nhập)
```

---

### STEPS TO REPRODUCE

```
Precondition:
└── Chưa đăng nhập, đang ở màn hình Đăng nhập
└── Cả 2 trường Email và Mật khẩu đang để TRỐNG

Bước 1: Mở trình duyệt Chrome, vào trang https://staging.shopapp.com/login

Bước 2: Để nguyên trường "Email" trống (không nhập gì)

Bước 3: Để nguyên trường "Mật khẩu" trống (không nhập gì)

Bước 4: Quan sát trạng thái nút "Đăng nhập"
         → BUG: Nút vẫn có màu xanh (active) thay vì màu xám (disabled)

Bước 5: Nhấn vào nút "Đăng nhập" đang active đó

Bước 6: Quan sát thông báo lỗi xuất hiện
```

---

### EXPECTED RESULT

```
Expected Result:
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  Khi cả 2 trường Email và Mật khẩu đang trống:         │
│  1. Nút "Đăng nhập" phải có màu xám (#CCCCCC)         │
│  2. Nút không thể click được (disabled state)          │
│  3. Khi hover vào nút, con trỏ hiển thị "not-allowed"  │
│                                                         │
│  Nút chỉ active (xanh, clickable) khi:                 │
│  - Trường Email có giá trị (bất kỳ text nào)           │
│  - Trường Mật khẩu có giá trị (bất kỳ text nào)       │
│                                                         │
│  Tham chiếu: Design Figma - Login Screen States        │
│  https://figma.com/file/xxx/login-states               │
│                                                         │
└─────────────────────────────────────────────────────────┘
```

---

### ACTUAL RESULT

```
Actual Result:
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  Khi cả 2 trường đang trống:                           │
│  1. Nút "Đăng nhập" vẫn hiển thị màu xanh (#1E90FF)  │
│  2. Nút vẫn có thể click được bình thường              │
│  3. Sau khi click → API call được gửi đi → trả về     │
│     lỗi "Email không được để trống" (server-side)     │
│  4. Validation chỉ xảy ra ở server, không có          │
│     client-side validation                             │
│                                                         │
│  → So với design: Nút phải disabled khi form trống    │
│  → Behavior hiện tại gây UX xấu và tốn API call       │
│     không cần thiết                                     │
│                                                         │
└─────────────────────────────────────────────────────────┘

Tần suất xảy ra: [x] Luôn luôn (100%)
Có thể reproduce: [x] Có
```

---

### ATTACHMENT CHECKLIST

```
📸 SCREENSHOT
  [x] Screenshot nút active khi form trống: bug_003_button_active.png
  [x] Screenshot design Figma (nút phải disabled): bug_003_figma_ref.png
  [x] Screenshot so sánh Expected vs Actual: bug_003_comparison.png

🎬 VIDEO
  [ ] Không cần thiết cho bug đơn giản này

OTHER
  [x] Link Figma: https://figma.com/file/xxx/login-states
  [x] Ghi chú: Tương tự lỗi này cũng xảy ra ở màn hình
               Đăng ký và Quên mật khẩu → nên fix cùng lúc.
               Ưu tiên thấp, có thể gộp vào sprint 16.
```

---

## 💡 GHI NHỚ CUỐI TRANG

```
╔══════════════════════════════════════════════════════════════╗
║              CHECKLIST TRƯỚC KHI SUBMIT BUG                 ║
╠══════════════════════════════════════════════════════════════╣
║  [ ] Summary rõ ràng, đúng format?                          ║
║  [ ] Priority đã chọn đúng theo guide?                      ║
║  [ ] Môi trường test đã điền đầy đủ?                        ║
║  [ ] Steps to Reproduce đủ chi tiết để người khác làm theo? ║
║  [ ] Expected Result tham chiếu spec/design?                ║
║  [ ] Actual Result mô tả khách quan, không cảm tính?        ║
║  [ ] Đã đính kèm ít nhất 1 screenshot hoặc video?           ║
║  [ ] Đã search Jira để chắc chắn không trùng bug?           ║
╚══════════════════════════════════════════════════════════════╝

📞 Liên hệ hỗ trợ: QA Lead - qa-lead@company.com
📁 Template version: 1.0 | Cập nhật: 01/2025
```