# Tài Liệu Test Tổng Hợp - Tách Rõ Web FE, Web BE và Admin FE

## 1. Mục đích

Tài liệu này dùng để kiểm thử đầy đủ bộ source trong:

```text
C:\Users\Admin\Downloads\LDA
```

Bộ source gồm 3 phần chính:

| Nhóm | Source | Vai trò |
|---|---|---|
| Web FE | `website-v2-master.zip` | Giao diện website bán hàng cho khách hàng |
| Web BE | `website-backend-go-main.zip` | Backend API phục vụ website và admin |
| Admin FE | `core-ops-frontend-nextjs-main.zip` | Giao diện admin/CDP để quản trị, vận hành |

**Ghi chú quan trọng:** Khi viết/chạy test phải tách rõ:

- Web FE là phần khách hàng nhìn thấy.
- Web BE là API/dữ liệu phía sau.
- Admin FE là phần nhân viên/admin sử dụng.
- Các flow end-to-end sẽ đi qua cả 3 phần, ví dụ: khách đặt hàng trên Web FE, đơn xuất hiện trong Admin FE, dữ liệu qua Web BE.

**Cập nhật theo source đã rà soát:** Web FE có route cart/checkout/success nhưng chưa thấy route login riêng; Web BE có catalog/collection/homepage/productext/seo/promotions/blog/user/websearch nhưng chưa thấy module `order` hoặc `checkout`; Admin FE có module order với `/orders`, `/orders/[id]`, `/orders/create`. Vì vậy E2E đặt hàng từ Web FE sang Admin FE phải ghi `Blocked - Missing Web BE order/checkout integration` nếu chưa có API/service order ngoài.

## 2. Sơ đồ kiểm thử tổng quát

```text
Khách hàng / Agent
   |
   v
Web FE - website-v2-master
   |
   v
Web BE - website-backend-go-main
   |
   v
Admin FE - core-ops-frontend-nextjs-main
```

## 3. Phân loại tài liệu test

| Loại tài liệu | Dùng để làm gì |
|---|---|
| Test Scenarios | Liệt kê các tình huống cần kiểm thử |
| Test Cases | Ghi rõ từng bước test, dữ liệu test, expected result |
| QA Report | Ghi kết quả chạy test, Pass/Fail/Blocked, evidence, bug |
| QC Gate | Kết luận có được release hay không |

## 4. Web FE - Website Bán Hàng

### 4.1 Phạm vi Web FE

| Module | Nội dung cần kiểm thử |
|---|---|
| Trang chủ | Header, banner, flash sale, danh mục, sản phẩm, tin tức, footer |
| Navigation | Logo, menu, mega menu, mobile menu, footer links |
| Search | Tìm kiếm sản phẩm, kết quả rỗng, loading state |
| Danh mục/PLP | Collection page, filter, sort, pagination/load more |
| Chi tiết sản phẩm/PDP | Gallery, giá, tồn kho, specs, promotion, CTA |
| Giỏ hàng | Thêm/xóa/cập nhật số lượng, tổng tiền, voucher |
| Checkout | Thông tin giao hàng, thanh toán, đặt hàng, trang thành công; hiện ưu tiên test UI checkout nếu chưa có API order |
| Tài khoản | Login/logout nếu website có user account; source hiện chưa thấy route login riêng |
| Tin tức | Listing, category, article detail |
| Trang nội dung | Giới thiệu, liên hệ, cửa hàng, chính sách |
| SEO | Title, meta, canonical, JSON-LD, sitemap/robots |
| Responsive | Mobile, tablet, desktop |

### 4.2 Điều kiện trước khi test Web FE

| Điều kiện | Yêu cầu |
|---|---|
| Source | Giải nén `website-v2-master.zip` |
| Dependency | Cài được `pnpm install` |
| Node | Node >= 24 theo `package.json` |
| Dev server | Chạy được `pnpm dev` |
| Test data | Có product, collection, voucher, bài viết |
| Backend | API Web BE chạy hoặc có mock/fallback rõ ràng |

### 4.3 Kịch bản Web FE đầy đủ

| ID | Module | Kịch bản | Expected |
|---|---|---|---|
| WEBFE-SC-001 | Home | Mở trang chủ | Trang render đầy đủ, không blank |
| WEBFE-SC-002 | Home | Backend trả thiếu một section homepage | Section đó ẩn an toàn, trang không crash |
| WEBFE-SC-003 | Header | Click logo | Về trang chủ |
| WEBFE-SC-004 | Header | Mở mega menu desktop | Danh mục hiển thị đúng |
| WEBFE-SC-005 | Header | Đóng mega menu | Menu đóng đúng |
| WEBFE-SC-006 | Mobile menu | Mở menu mobile | Menu không overlap, cuộn được |
| WEBFE-SC-007 | Search | Tìm keyword có sản phẩm | Hiển thị kết quả đúng |
| WEBFE-SC-008 | Search | Tìm keyword không có sản phẩm | Hiển thị empty state |
| WEBFE-SC-009 | PLP | Mở collection hợp lệ | Breadcrumb, filter, grid, sort hiển thị |
| WEBFE-SC-010 | PLP | Mở collection sai slug | 404 hoặc empty state đúng |
| WEBFE-SC-011 | PLP | Chọn filter | Danh sách sản phẩm cập nhật đúng |
| WEBFE-SC-012 | PLP | Đổi sort | Thứ tự sản phẩm cập nhật |
| WEBFE-SC-013 | PLP | Load more/pagination | Không trùng sản phẩm |
| WEBFE-SC-014 | Product Card | Kiểm tra card sản phẩm | Ảnh, tên, giá, badge đúng |
| WEBFE-SC-015 | PDP | Mở sản phẩm hợp lệ | Gallery, giá, specs, CTA đúng |
| WEBFE-SC-016 | PDP | Mở sản phẩm sai slug | 404 đúng |
| WEBFE-SC-017 | PDP | Đổi ảnh gallery | Ảnh chính cập nhật |
| WEBFE-SC-018 | PDP | Tăng/giảm số lượng | Không âm, không vượt rule |
| WEBFE-SC-019 | Cart | Thêm sản phẩm vào giỏ | Item xuất hiện trong cart |
| WEBFE-SC-020 | Cart | Tăng/giảm số lượng trong giỏ | Tổng tiền cập nhật |
| WEBFE-SC-021 | Cart | Xóa item | Item biến mất, total cập nhật |
| WEBFE-SC-022 | Cart | Giỏ hàng trống | Empty state hiển thị |
| WEBFE-SC-023 | Voucher | Áp voucher hợp lệ | Discount đúng |
| WEBFE-SC-024 | Voucher | Áp voucher sai/hết hạn | Không áp discount, message rõ |
| WEBFE-SC-025 | Checkout | Submit thiếu thông tin | Validate field bắt buộc |
| WEBFE-SC-026 | Checkout | Đặt hàng desktop | Flow UI hoàn tất; mã đơn thật chỉ có nếu API/service order tồn tại |
| WEBFE-SC-027 | Checkout | Đặt hàng mobile | Flow mobile đúng, nút không bị che |
| WEBFE-SC-028 | Success | Mở trang thanh toán thành công | Hiển thị thông tin đơn |
| WEBFE-SC-029 | Account | Login website hợp lệ | User login thành công nếu website có auth thật; nếu chưa có route/modal thì Blocked/NA |
| WEBFE-SC-030 | Account | Logout website | Session bị xóa nếu website có auth thật |
| WEBFE-SC-031 | Blog | Mở trang tin tức | Listing/category đúng |
| WEBFE-SC-032 | Blog | Mở bài viết chi tiết | Nội dung render đúng |
| WEBFE-SC-033 | Static | Mở trang chính sách/liên hệ | Nội dung đúng |
| WEBFE-SC-034 | SEO | Kiểm metadata page | Title/meta/canonical đúng |
| WEBFE-SC-035 | Responsive | Kiểm 375/768/1440px | Không vỡ layout |

### 4.4 Test Case Web FE mẫu chi tiết

#### TC-WEBFE-001 - Đặt hàng thành công trên Website

| Trường | Nội dung |
|---|---|
| Priority | P0 |
| Preconditions | Web FE chạy, Web BE chạy, có sản phẩm còn hàng; có API/service order nếu cần tạo đơn thật |
| Steps | 1. Mở website. 2. Login nếu flow yêu cầu. 3. Mở sản phẩm. 4. Thêm vào giỏ. 5. Mở giỏ hàng. 6. Kiểm tra số lượng/tổng tiền. 7. Nhập thông tin giao hàng. 8. Chọn phương thức thanh toán. 9. Bấm đặt hàng. |
| Expected | UI checkout chuyển sang trang thành công. Đơn thật và mã đơn chỉ Pass khi quan sát được API/service order tạo dữ liệu. |
| Evidence | Screenshot giỏ hàng, screenshot trang thành công, mã đơn hàng nếu có API/service order thật. |
| Ghi chú | Theo source hiện chưa thấy Web BE order/checkout; nếu không có API order thật thì đánh dấu `Blocked - Missing Web BE order/checkout integration` hoặc `Mock only`. |

#### TC-WEBFE-002 - Login/Logout Website

| Trường | Nội dung |
|---|---|
| Priority | P1 |
| Preconditions | Có account website hợp lệ |
| Steps | 1. Mở trang login. 2. Nhập account. 3. Login. 4. Kiểm tra trạng thái đã login. 5. Logout. 6. Reload trang. |
| Expected | Login thành công, logout xóa session/token đúng. |
| Evidence | Screenshot trước/sau login, sau logout. |
| Ghi chú | Nếu website chưa có login thật thì ghi rõ trạng thái chưa hỗ trợ. |

## 5. Web BE - Backend API

### 5.1 Phạm vi Web BE

| Module | Nội dung cần kiểm thử |
|---|---|
| Health | `/ping`, `/version` |
| Catalog | Search, brands, categories, products, product detail, reviews |
| Collection | List, nav, slug detail, highlights, category rules |
| Homepage | Bundle homepage |
| ProductExt | Product details, images, badges, colors, relations |
| SEO | Metadata, redirects, sitemap |
| Promotions | Public promotions |
| Blog | Featured articles, articles by handle |
| User | User profile, addresses |
| Admin API | Admin mutation, catalog sync controls |
| Order/Checkout | Chưa thấy module trong source Web BE; E2E đặt hàng thật cần Blocked nếu không có service khác |
| Error handling | Validation, 401/403/404/500 |

### 5.2 Điều kiện trước khi test Web BE

| Điều kiện | Yêu cầu |
|---|---|
| Source | Giải nén `website-backend-go-main.zip` |
| Go | Go 1.25 |
| Database | PostgreSQL local/staging |
| Env | `POSTGRES_DB_DSN`, `POSTGRES_DB_DRIVER` |
| ERP | `ERP_DB_DSN` nếu test catalog thật |
| Migration | Chạy được `go run . migrate up` |
| Server | Chạy được `go run main.go` |

### 5.3 Kịch bản Web BE đầy đủ

| ID | Module | Kịch bản | Expected |
|---|---|---|---|
| WEBBE-SC-001 | Health | GET `/ping` | 200, data `pong` |
| WEBBE-SC-002 | Health | GET `/version` | 200, có service/version |
| WEBBE-SC-003 | Catalog | Search keyword hợp lệ | List sản phẩm đúng |
| WEBBE-SC-004 | Catalog | Search keyword rỗng/sai | Không 500 |
| WEBBE-SC-005 | Catalog | List brands | Schema đúng |
| WEBBE-SC-006 | Catalog | List categories | Schema đúng |
| WEBBE-SC-007 | Catalog | List products page/limit | Pagination đúng |
| WEBBE-SC-008 | Catalog | Product detail slug hợp lệ | Product + enrichment đúng |
| WEBBE-SC-009 | Catalog | Product detail slug sai | 404/error đúng |
| WEBBE-SC-010 | Catalog | Products by collection slug | Products, breadcrumb, filters đúng |
| WEBBE-SC-011 | Catalog | Product reviews by SKU | Reviews đúng schema |
| WEBBE-SC-012 | Catalog | Thiếu ERP DSN | Lỗi kiểm soát, không panic |
| WEBBE-SC-013 | Navigation | GET navigation | Mega-menu tree đúng |
| WEBBE-SC-014 | Homepage | GET homepage bundle | Bundle đầy đủ |
| WEBBE-SC-015 | Homepage | Section rỗng | Không fail toàn bundle |
| WEBBE-SC-016 | Collection | List collections | Schema đúng |
| WEBBE-SC-017 | Collection | Collection by slug | Detail đúng |
| WEBBE-SC-018 | Collection | Admin tạo collection | Thành công với token admin |
| WEBBE-SC-019 | Collection | Admin tạo không token | 401/403 |
| WEBBE-SC-020 | ProductExt | Get product detail by slug | Data đúng |
| WEBBE-SC-021 | ProductExt | List images/badges/colors/relations | Đúng productId |
| WEBBE-SC-022 | ProductExt | Admin create/update enrichment | Ghi thành công |
| WEBBE-SC-023 | SEO | List metadata | Schema đúng |
| WEBBE-SC-024 | SEO | Redirect lookup hit | Target đúng |
| WEBBE-SC-025 | SEO | Redirect lookup miss | Miss đúng contract |
| WEBBE-SC-026 | SEO | Sitemap products cursor | Không lặp, cursor đúng |
| WEBBE-SC-027 | SEO | Sitemap collections cursor | Không lặp, lastmod đúng |
| WEBBE-SC-028 | Promotions | Public promotions | Chỉ promotion public/hợp lệ |
| WEBBE-SC-029 | Blog | Featured articles | Schema đúng |
| WEBBE-SC-030 | User | Create/list/get user | Validation đúng |
| WEBBE-SC-031 | User | User addresses | Address gắn đúng user |
| WEBBE-SC-032 | Admin | Legacy sync controls | Chỉ admin gọi được |
| WEBBE-SC-033 | Error | Payload thiếu required | 400/422 rõ |
| WEBBE-SC-034 | Error | Query sai kiểu | 400, không 500 |
| WEBBE-SC-035 | Security | Error response | Không leak SQL/stack trace |

### 5.4 Test Case Web BE mẫu chi tiết

#### TC-WEBBE-001 - Health Check

| Trường | Nội dung |
|---|---|
| Priority | P0 |
| Preconditions | Backend server đang chạy |
| Steps | 1. Gọi `GET /ping`. 2. Gọi `GET /version`. |
| Expected | Cả 2 endpoint trả 200, response đúng schema. |
| Evidence | Curl output hoặc API screenshot. |

#### TC-WEBBE-002 - Catalog Product Detail

| Trường | Nội dung |
|---|---|
| Priority | P0 |
| Preconditions | Có product slug hợp lệ, ERP/config sẵn sàng |
| Steps | 1. Gọi `GET /v1/catalog/products/:slug`. 2. Kiểm tra product fields. 3. Kiểm enrichment fields. |
| Expected | Trả đúng product, giá, brand/category, enrichment nếu có. |
| Evidence | JSON response. |
| Ghi chú | Nếu thiếu ERP DSN, ghi Blocked/Skipped with reason. |

## 6. Admin FE - Trang Quản Trị

### 6.1 Phạm vi Admin FE

| Module | Nội dung cần kiểm thử |
|---|---|
| Auth | Login, logout, protected route, token hết hạn |
| Layout | Sidebar, header, active menu, responsive admin |
| Permission | Role/quyền menu/action |
| Collection CMS | Tạo/sửa/xóa/đổi parent collection |
| Product Enrichment | Detail, image, badge, color, relation |
| Homepage CMS | Banner, flash sale, featured sections |
| Coupon/Voucher | Tạo coupon, targeting, preview, apply/available |
| SEO Admin | Metadata, redirects |
| Upload | Upload file hợp lệ/sai |
| Stocktake | Scan IMEI, duplicate, unknown, variance |
| Order Management | Tìm đơn, xem chi tiết, xử lý trạng thái đơn; source Admin FE có route `/orders`, `/orders/[id]`, `/orders/create` |
| Form/Error | Validation, toast, rollback |

### 6.2 Điều kiện trước khi test Admin FE

| Điều kiện | Yêu cầu |
|---|---|
| Source | Giải nén `core-ops-frontend-nextjs-main.zip` |
| Dependency | Cài được `pnpm install` |
| Dev server | Chạy được `pnpm dev`, port 3300 |
| Admin account | Có account admin đủ quyền |
| Backend | Web BE/API admin chạy hoặc mock được ghi rõ |
| Test data | Có product, collection, coupon, SEO, order/stocktake data |

### 6.3 Kịch bản Admin FE đầy đủ

| ID | Module | Kịch bản | Expected |
|---|---|---|---|
| ADMINFE-SC-001 | Auth | Mở protected route chưa login | Redirect/login |
| ADMINFE-SC-002 | Auth | Login admin hợp lệ | Vào dashboard |
| ADMINFE-SC-003 | Auth | Logout admin | Session/token bị xóa |
| ADMINFE-SC-004 | Auth | Token hết hạn | Logout/refresh/redirect đúng |
| ADMINFE-SC-005 | Layout | Thu/mở sidebar | Layout không vỡ |
| ADMINFE-SC-006 | Layout | Click menu | Active menu đúng |
| ADMINFE-SC-007 | Permission | User thiếu quyền mở menu | Bị chặn |
| ADMINFE-SC-008 | Permission | User thiếu quyền mutation | API/UI chặn |
| ADMINFE-SC-009 | Collection | Tạo collection root | Lưu đúng |
| ADMINFE-SC-010 | Collection | Tạo collection con | Breadcrumb đúng |
| ADMINFE-SC-011 | Collection | Đổi parent | Hierarchy không hỏng |
| ADMINFE-SC-012 | Product | Tạo/sửa product detail | Public PDP đọc được |
| ADMINFE-SC-013 | Product | Thêm/sắp xếp ảnh | Gallery đúng |
| ADMINFE-SC-014 | Product | Badge/color/relation | UI/API cập nhật |
| ADMINFE-SC-015 | Homepage | Sửa banner | Web FE cập nhật |
| ADMINFE-SC-016 | Homepage | Sửa flash sale | Web FE hiển thị đúng |
| ADMINFE-SC-017 | Coupon | Tạo coupon | Lưu và preview đúng |
| ADMINFE-SC-018 | Coupon | Target product/category | Apply đúng scope |
| ADMINFE-SC-019 | Voucher | Preview discount | Tính đúng |
| ADMINFE-SC-020 | SEO | Tạo metadata | Public SEO nhận đúng |
| ADMINFE-SC-021 | SEO | Tạo redirect | Lookup đúng |
| ADMINFE-SC-022 | Upload | Upload file hợp lệ | Thành công |
| ADMINFE-SC-023 | Upload | Upload file sai | Bị chặn |
| ADMINFE-SC-024 | Stocktake | Scan IMEI match | Counter tăng |
| ADMINFE-SC-025 | Stocktake | Scan duplicate | Warning, không tăng counter |
| ADMINFE-SC-026 | Stocktake | Scan unknown | Cho chọn SKU/bỏ qua |
| ADMINFE-SC-027 | Variance | QLCH gửi checklist | State đúng |
| ADMINFE-SC-028 | Variance | QC duyệt | Chỉ QC thấy action |
| ADMINFE-SC-029 | Variance | KT hạch toán | Chỉ KT thấy action |
| ADMINFE-SC-030 | Order | Search đơn hàng | Tìm đúng đơn |
| ADMINFE-SC-031 | Order | Xem chi tiết đơn | Data đúng |
| ADMINFE-SC-032 | Order | Xử lý đơn | Trạng thái cập nhật |
| ADMINFE-SC-033 | Form | Thiếu required | Field error |
| ADMINFE-SC-034 | Error | API lỗi | Toast rõ, không mất form |
| ADMINFE-SC-035 | Optimistic | Mutation fail | Rollback UI đúng |

### 6.4 Test Case Admin FE mẫu chi tiết

#### TC-ADMINFE-001 - Login/Logout Admin

| Trường | Nội dung |
|---|---|
| Priority | P0 |
| Preconditions | Admin FE chạy, có admin account |
| Steps | 1. Mở admin. 2. Nhập account. 3. Login. 4. Kiểm dashboard/sidebar. 5. Logout. 6. Reload admin. |
| Expected | Login thành công, logout xóa session/token, route protected yêu cầu login lại. |
| Evidence | Screenshot login thành công và sau logout. |

#### TC-ADMINFE-002 - Tìm và xử lý đơn hàng

| Trường | Nội dung |
|---|---|
| Priority | P0 |
| Preconditions | Có đơn hàng trong Admin FE hoặc có đơn thật tạo từ Web FE qua API/service order, admin account có quyền xử lý |
| Steps | 1. Login admin. 2. Mở module đơn hàng. 3. Search mã đơn. 4. Mở chi tiết. 5. Kiểm thông tin khách/sản phẩm/tổng tiền. 6. Cập nhật trạng thái đơn. |
| Expected | Tìm thấy đúng đơn trong Admin FE, dữ liệu khớp theo nguồn order hiện có, trạng thái cập nhật đúng. Nếu đơn không đến từ Web FE thì chỉ kết luận Admin order pass. |
| Evidence | Screenshot danh sách, chi tiết đơn, sau cập nhật trạng thái. |
| Ghi chú | Admin FE có module order. Nếu cần đối chiếu đơn tạo từ Web FE nhưng Web BE thiếu order/checkout, ghi `Blocked - Missing Web BE order/checkout integration`. |

## 7. Flow Tích Hợp Web FE - Web BE - Admin FE

### 7.1 Flow đặt hàng và xử lý đơn

```text
Agent login Website v2 nếu website có auth thật
  -> Chọn sản phẩm
  -> Thêm giỏ hàng
  -> Đặt hàng qua UI checkout
  -> Lấy mã đơn nếu API/service order tạo đơn thật
  -> Logout Website nếu website có auth thật
  -> Agent login Admin
  -> Search mã đơn
  -> Kiểm chi tiết đơn
  -> Xử lý trạng thái đơn
  -> Logout Admin
```

### 7.2 Kịch bản tích hợp

| ID | Kịch bản | Expected |
|---|---|---|
| E2E-SC-001 | Đơn tạo từ Web FE xuất hiện trong Admin FE | Chỉ Pass khi có API/service order thật; hiện mặc định Blocked nếu thiếu Web BE order/checkout |
| E2E-SC-002 | Dữ liệu sản phẩm trong admin khớp website | SKU, tên, số lượng, giá đúng |
| E2E-SC-003 | Voucher/discount khớp | Discount không lệch |
| E2E-SC-004 | Thông tin khách/giao hàng khớp | Tên, SĐT, địa chỉ đúng |
| E2E-SC-005 | Admin cập nhật trạng thái đơn | Trạng thái lưu thành công |
| E2E-SC-006 | Website/order status cập nhật nếu có | Khách thấy trạng thái mới |

## 8. QC Gate theo từng phần

| Phần | Điều kiện GO |
|---|---|
| Web FE | Build pass, smoke route pass, cart/checkout pass, responsive không lỗi nghiêm trọng |
| Web BE | Health pass, API core pass, admin route bảo vệ đúng, không 500 với input hợp lệ |
| Admin FE | Login/logout pass, permission pass, CMS/order/stocktake flow chính pass |
| E2E | Đặt hàng từ Web FE và kiểm/xử lý được trong Admin FE chỉ khi có API/service order thật; nếu thiếu Web BE order/checkout thì Blocked |

## 9. Báo cáo cần ghi khi test

| Thông tin | Bắt buộc |
|---|---|
| Môi trường test | Local/Staging/Production smoke |
| Account test | Website account, admin account |
| Product test | SKU/slug |
| Order ID | Mã đơn tạo từ Web FE nếu có API/service order thật; nếu không có thì ghi Blocked/Mock only |
| Evidence | Screenshot/API response/log |
| Bug | Severity, steps, expected, actual |
| Kết luận | Pass/Fail/Blocked |

## 10. Ghi chú cuối

- Không viết chung “web/admin pass” nếu chưa test riêng từng phần.
- Nếu Web FE pass nhưng Web BE fail, phải ghi rõ fail ở Backend.
- Nếu Web BE pass nhưng Admin FE không hiển thị data, fail ở Integration/Admin FE.
- Admin FE có module order, nhưng nếu không có Web BE order/checkout hoặc service order ngoài thì flow Web FE -> Admin phải ghi `Blocked - Missing Web BE order/checkout integration`.
- Nếu login website và login admin dùng 2 hệ account khác nhau, report phải ghi rõ.
