# Kịch Bản Test Đầy Đủ - Web FE, Web BE, Admin FE

## 1. Mục đích

Tài liệu này là bản kịch bản kiểm thử đầy đủ cho bộ source LDA. Nội dung được tách rõ theo 4 nhóm:

- **Web FE**: website bán hàng cho khách hàng.
- **Web BE**: backend API phục vụ website/admin.
- **Admin FE**: trang quản trị/vận hành.
- **E2E Integration**: luồng kết hợp Web FE -> Web BE -> Admin FE.

**Ghi chú:** Mỗi kịch bản bên dưới có đủ tiền điều kiện, bước thực hiện, expected result, priority và ghi chú. Khi chạy thực tế, QA ghi kết quả vào report theo từng ID.

## 1A. Kết quả rà soát source thực tế trong folder LDA

Tài liệu này đã được cập nhật lại sau khi đọc trực tiếp folder:

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

### 1A.1 Source thực tế

| Nhóm | Đường dẫn source | Ghi nhận |
|---|---|---|
| Web FE | `LDA\website-v2-master\website-v2-master` | Website public Next.js, có homepage, product, collection, cart, checkout, success, blog, static pages |
| Web BE | `LDA\website-backend-go-main\website-backend-go-main` | Backend Go, có catalog, collection, homepage, productext, SEO, promotions, blog, user, websearch |
| Admin FE | `LDA\core-ops-frontend-nextjs-main\core-ops-frontend-nextjs-main` | Admin/CDP Next.js, có auth, orders, cart, products, inventory, einvoice, coupons, IAM, HR, integrations |

### 1A.2 Web FE routes thật

| Nhóm | Routes thật trong `src/app` |
|---|---|
| Trang chính | `/` |
| Product | `/products/[slug]` |
| Collection | `/collections/[slug]` |
| Cart/Checkout | `/gio-hang`, `/gio-hang-trong`, `/thanh-toan`, `/thanh-toan-thanh-cong` |
| Blog | `/tin-tuc`, `/tin-tuc/[category]/[[...slug]]` |
| Static pages | `/gioi-thieu`, `/lien-he`, `/cua-hang`, `/tuyen-dung`, `/bao-hanh`, `/build-pc`, `/tra-gop`, `/huong-dan-mua-hang`, `/chinh-sach-giao-hang`, `/chinh-sach-bao-hanh`, `/chinh-sach-bao-mat` |
| SEO/system | `robots.ts`, `sitemap.ts`, `not-found.tsx` |
| Design | `/design-system` |

### 1A.3 Login/logout Web FE theo source

| Kiểm tra | Kết quả |
|---|---|
| Có route `/login`, `/dang-nhap`, `/tai-khoan` trong `src/app` Web FE | Chưa thấy |
| Navbar có login UI/icon | Có dấu hiệu nút login trong Navbar desktop/design-system |
| Có flow auth website hoàn chỉnh | Chưa xác nhận được từ routes |

**Kết luận QA:** Các case login/logout Web FE vẫn được giữ để bao phủ yêu cầu nghiệp vụ, nhưng khi chạy thật phải ghi đúng trạng thái:

- `Pass` nếu team xác nhận login website nằm trong modal/route khác và chạy được.
- `Blocked - Website login/logout route not implemented` nếu chỉ có icon/nút nhưng chưa có flow.
- `Not Applicable` nếu release scope không bao gồm login website.

### 1A.4 Checkout/order Web FE và Web BE theo source

| Kiểm tra | Kết quả |
|---|---|
| Web FE `/gio-hang` có `handleOrder` | Có |
| `handleOrder` tạo order qua API | Chưa thấy; hiện redirect sang `/thanh-toan-thanh-cong` |
| Web BE có module `order` hoặc `checkout` trong `modules` | Chưa thấy |
| Admin FE có module quản lý đơn | Có `/orders`, `/orders/[id]`, `/orders/create` |

**Kết luận QA:** Checkout trên Web FE hiện phải test theo 2 lớp:

- **UI checkout/cart flow:** có thể test.
- **E2E tạo đơn thật qua Web BE và xuất hiện trong Admin FE:** đánh dấu `Blocked - Missing Web BE order/checkout integration` cho tới khi có API order thật hoặc service order ngoài được chỉ định.

### 1A.5 Web BE modules thật

| Module | Có trong source | Ghi chú test |
|---|---|---|
| `catalog` | Có | Search, brands, categories, featured products, products, product detail, collection products, navigation, admin catalog sync |
| `collection` | Có | Collections, nav, slug detail, highlights, category rules, admin CRUD |
| `homepage` | Có | Homepage bundle |
| `productext` | Có | Product details, images, badges, colors, relations |
| `seo` | Có | Metadata, redirects, config, sitemap, route-events admin |
| `promotions` | Có | Public promotions |
| `blog` | Có | Featured articles, articles by handle |
| `user` | Có | User CRUD, lookup, addresses, membership |
| `websearch` | Có | Product web search |
| `order/checkout` | Chưa thấy | E2E order từ Web FE sang BE cần đánh dấu Blocked nếu không có service khác |

### 1A.6 Admin FE modules thật cần test

| Nhóm | Routes/modules thật |
|---|---|
| Auth | `/login`, `/forgot-password`, `/reset-password`, `/verify-otp`, `/auth/sso/callback`, `/callback/[provider]`, API auth logout/me/refresh/sso callback |
| Orders | `/orders`, `/orders/[id]`, `/orders/create` |
| Cart | `/cart`, `/cart/[id]`, `/cart/abandoned`, `/cart/dashboard` |
| Products | Product create/templates/variants/draft-confirms/inventory reconciliation/price history |
| Coupons | `/coupons`, `/coupons/[id]`, `/coupons-analytics` |
| E-invoice | Orders, MISA, sync, validation, notification logs, products, rules |
| Inventory | Goods issue/receipt, transactions, provider stock, NhanhVN bills/errors |
| IAM | Access control, permissions, roles, governance, employee roles |
| Masterdata | Brands, categories, products, suppliers, stores, warehouses, employees |
| HR | Employees, org structure, profiles, document/activity types |
| Reviews | Dashboard, list, config, templates, triggers |
| Integrations/Platform | Connections, providers, webhooks, datasync, jobs, tags, SLA, outbound actions |

## 2. Quy ước Priority

| Priority | Ý nghĩa |
|---|---|
| P0 | Bắt buộc pass, fail là NO GO |
| P1 | Rất quan trọng, cần fix trước release |
| P2 | Quan trọng nhưng có thể conditional nếu có workaround |
| P3 | Lỗi nhỏ, có thể backlog |

## 3. Web FE - Kịch Bản Website Bán Hàng

## 3A. Web FE - Login/Logout Website

**Ghi chú:** Nếu website v2 hiện tại chưa có chức năng login/logout thật, các case dưới đây không được xóa. Khi chạy test phải ghi trạng thái là `Blocked - Website login/logout not implemented` hoặc `Not Applicable` kèm lý do. Nếu website có login customer, các case này là bắt buộc.

### WEBFE-AUTH-001 - Mở trang login website

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Website v2 chạy được; hệ thống có route login hoặc entry login |
| Bước thực hiện | 1. Mở website. 2. Click nút/tài khoản đăng nhập. 3. Quan sát form login. |
| Expected | Trang/form login hiển thị đúng; có field email/phone/username, password/OTP nếu có; có nút submit; không lỗi layout. |
| Ghi chú | Nếu login là popup/modal thì kiểm modal mở/đóng đúng. |

### WEBFE-AUTH-002 - Login website bằng account hợp lệ

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có account website hợp lệ |
| Bước thực hiện | 1. Mở form login. 2. Nhập email/phone/username hợp lệ. 3. Nhập password/OTP hợp lệ. 4. Bấm đăng nhập. |
| Expected | Login thành công; user state hiển thị trên header/account area; token/session được lưu đúng; không bị redirect loop. |
| Ghi chú | Nếu login qua OTP/social/SSO thì ghi rõ cơ chế thực tế. |

### WEBFE-AUTH-003 - Login website sai mật khẩu/thông tin

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có account website hoặc input test |
| Bước thực hiện | 1. Mở form login. 2. Nhập email/phone đúng nhưng password sai. 3. Submit. |
| Expected | Login thất bại; message lỗi rõ; không tạo session/token; user vẫn ở trạng thái chưa login. |
| Ghi chú | Không được trả lỗi raw từ server. |

### WEBFE-AUTH-004 - Validation form login website

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Form login hiển thị |
| Bước thực hiện | 1. Submit khi để trống field. 2. Nhập email/phone sai format. 3. Submit. |
| Expected | Field error hiển thị rõ; không gọi API không cần thiết nếu validation client có thể chặn. |
| Ghi chú | Message phải dễ hiểu cho người dùng. |

### WEBFE-AUTH-005 - Reload sau khi login website

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | User đã login website |
| Bước thực hiện | 1. Reload trang. 2. Mở lại homepage/PDP/cart. 3. Kiểm trạng thái account. |
| Expected | Session được giữ nếu token còn hạn; header/account vẫn đúng trạng thái login. |
| Ghi chú | Nếu hệ thống thiết kế session chỉ tồn tại theo tab/session thì ghi rõ expected khác. |

### WEBFE-AUTH-006 - Logout website

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | User đang login website |
| Bước thực hiện | 1. Mở account menu. 2. Click logout. 3. Reload website. |
| Expected | Logout thành công; token/session/cookie bị xóa hoặc vô hiệu; UI quay về trạng thái chưa login. |
| Ghi chú | Đây là case bắt buộc nếu website có login. |

### WEBFE-AUTH-007 - Truy cập route cần login sau logout

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | User đã logout |
| Bước thực hiện | 1. Mở route account/profile/order history nếu có. |
| Expected | Bị yêu cầu login lại; không thấy dữ liệu user cũ. |
| Ghi chú | Nếu website không có route protected, ghi Not Applicable. |

### WEBFE-AUTH-008 - Token website hết hạn

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có thể giả lập token hết hạn |
| Bước thực hiện | 1. Login website. 2. Làm token hết hạn hoặc sửa token invalid. 3. Reload hoặc gọi API user. |
| Expected | Hệ thống logout/refresh token đúng; không kẹt loading; không hiển thị data user khi token invalid. |
| Ghi chú | Đây là case bảo mật/session. |

### WEBFE-001 - Mở trang chủ thành công

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Web FE chạy được, API homepage hoặc mock có dữ liệu |
| Bước thực hiện | 1. Mở website. 2. Truy cập `/`. 3. Quan sát header, banner, danh mục, sản phẩm, footer. 4. Mở DevTools kiểm console. |
| Expected | Trang chủ hiển thị đầy đủ, không blank screen, không console error nghiêm trọng. |
| Ghi chú | Nếu thiếu một section nhưng trang vẫn chạy, ghi Medium/Low tùy section. Nếu blank screen là Critical. |

### WEBFE-002 - Trang chủ khi backend thiếu dữ liệu một section

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Homepage API/mock có thể trả thiếu banner/flash sale/category |
| Bước thực hiện | 1. Mở `/`. 2. Giả lập hoặc dùng data thiếu một section. 3. Kiểm tra layout. |
| Expected | Section thiếu được ẩn an toàn hoặc hiển thị empty state phù hợp; toàn trang không crash. |
| Ghi chú | Đây là graceful degradation. Không để lỗi một section làm hỏng toàn trang. |

### WEBFE-003 - Header, logo và navigation desktop

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Web FE chạy ở viewport desktop |
| Bước thực hiện | 1. Mở trang chủ. 2. Click logo. 3. Click các menu chính. 4. Kiểm tra URL và active state. |
| Expected | Logo về trang chủ; menu điều hướng đúng; không reload lỗi; active state đúng nếu có. |
| Ghi chú | Link chết ở header là lỗi P1 nếu ảnh hưởng flow mua hàng. |

### WEBFE-004 - Mega menu desktop

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có dữ liệu navigation/category |
| Bước thực hiện | 1. Mở website desktop. 2. Click hoặc hover mở mega menu. 3. Kiểm tra danh mục, subcategory, link. 4. Click ra ngoài để đóng. |
| Expected | Mega menu hiển thị đúng cấu trúc, link đúng, đóng được, không che CTA bất thường. |
| Ghi chú | Menu bị kẹt overlay là lỗi Medium/High tùy mức ảnh hưởng. |

### WEBFE-005 - Mobile menu

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Viewport 375px hoặc mobile device |
| Bước thực hiện | 1. Mở website mobile. 2. Bấm hamburger/menu. 3. Cuộn menu. 4. Chọn category. 5. Đóng menu. |
| Expected | Menu mở/đóng đúng, không overlap logo/cart, link category hoạt động, body không cuộn sai. |
| Ghi chú | Mobile menu không dùng được là High nếu mobile là kênh chính. |

### WEBFE-006 - Search có kết quả

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có sản phẩm test theo keyword |
| Bước thực hiện | 1. Focus ô search. 2. Nhập keyword sản phẩm. 3. Đợi kết quả. 4. Click một kết quả. |
| Expected | Kết quả phù hợp keyword, hiển thị tên/giá/ảnh nếu thiết kế có, click mở đúng PDP. |
| Ghi chú | Cần kiểm loading/debounce nếu có. |

### WEBFE-007 - Search không có kết quả

| Mục | Nội dung |
|---|---|
| Priority | P2 |
| Tiền điều kiện | Web FE chạy |
| Bước thực hiện | 1. Nhập keyword ngẫu nhiên không tồn tại. 2. Đợi response. |
| Expected | Hiển thị empty state rõ ràng, không crash, không giữ kết quả cũ sai. |
| Ghi chú | Nếu show kết quả cũ sau keyword sai là bug. |

### WEBFE-008 - Collection page hợp lệ

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có collection slug hợp lệ và sản phẩm |
| Bước thực hiện | 1. Mở `/collections/[slug]`. 2. Kiểm breadcrumb. 3. Kiểm product grid. 4. Kiểm filter/sort. |
| Expected | Trang danh mục render đúng, sản phẩm thuộc collection, breadcrumb đúng. |
| Ghi chú | Đây là core flow mua hàng. |

### WEBFE-009 - Collection slug không tồn tại

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Web FE chạy |
| Bước thực hiện | 1. Mở `/collections/slug-khong-ton-tai`. |
| Expected | Hiển thị 404 hoặc empty state phù hợp, không blank screen. |
| Ghi chú | Cần kiểm status/SEO nếu server-side render. |

### WEBFE-010 - Filter sản phẩm trong collection

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Collection có filter như brand/price/category |
| Bước thực hiện | 1. Mở collection. 2. Chọn filter. 3. Kiểm URL/state. 4. Reload trang. |
| Expected | Danh sách sản phẩm đúng filter; URL/state không mất khi reload nếu thiết kế yêu cầu. |
| Ghi chú | Filter sai có thể làm khách mua nhầm hoặc không tìm được sản phẩm. |

### WEBFE-011 - Sort sản phẩm

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Collection có nhiều sản phẩm |
| Bước thực hiện | 1. Mở collection. 2. Chọn sort giá tăng/giảm hoặc mới nhất. 3. Quan sát thứ tự sản phẩm. |
| Expected | Sản phẩm sắp xếp đúng theo tiêu chí. |
| Ghi chú | Nếu BE sort, cần kiểm request query. |

### WEBFE-012 - Pagination hoặc Load more

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Collection có nhiều hơn một trang sản phẩm |
| Bước thực hiện | 1. Mở collection. 2. Bấm load more hoặc chuyển trang. 3. Kiểm danh sách mới. |
| Expected | Không trùng item, không mất filter/sort, loading state đúng. |
| Ghi chú | Duplicate item là bug phổ biến cần chụp evidence. |

### WEBFE-013 - Product card

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có product grid |
| Bước thực hiện | 1. Kiểm từng card. 2. Kiểm ảnh, tên, giá, giá giảm, badge, CTA. 3. Click card. |
| Expected | Thông tin đúng, click mở PDP đúng slug. |
| Ghi chú | Giá sai là High/Critical tùy flow. |

### WEBFE-014 - Product detail hợp lệ

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có product slug hợp lệ |
| Bước thực hiện | 1. Mở `/products/[slug]`. 2. Kiểm gallery, tên, giá, tồn kho, specs, promotion. 3. Kiểm CTA. |
| Expected | PDP render đầy đủ, dữ liệu đúng product, CTA dùng được. |
| Ghi chú | PDP là core flow. |

### WEBFE-015 - Product detail slug sai

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Web FE chạy |
| Bước thực hiện | 1. Mở product slug không tồn tại. |
| Expected | Hiển thị 404 hoặc thông báo không tìm thấy sản phẩm. |
| Ghi chú | Không được blank screen. |

### WEBFE-016 - Gallery sản phẩm

| Mục | Nội dung |
|---|---|
| Priority | P2 |
| Tiền điều kiện | Product có nhiều ảnh |
| Bước thực hiện | 1. Mở PDP. 2. Click từng thumbnail. 3. Kiểm ảnh chính. |
| Expected | Ảnh chính thay đổi đúng, không vỡ layout. |
| Ghi chú | Kiểm cả mobile. |

### WEBFE-017 - Thêm sản phẩm vào giỏ

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Product còn hàng |
| Bước thực hiện | 1. Mở PDP. 2. Chọn số lượng. 3. Bấm thêm vào giỏ. 4. Mở giỏ. |
| Expected | Cart count tăng, item xuất hiện đúng SKU, tên, giá, số lượng. |
| Ghi chú | Fail là NO GO cho ecommerce. |

### WEBFE-018 - Cập nhật giỏ hàng

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Giỏ hàng có item |
| Bước thực hiện | 1. Mở giỏ. 2. Tăng số lượng. 3. Giảm số lượng. 4. Xóa item. |
| Expected | Total cập nhật đúng, không cho số lượng âm, empty state đúng khi hết item. |
| Ghi chú | Tổng tiền sai là lỗi nghiêm trọng. |

### WEBFE-019 - Voucher hợp lệ

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có voucher hợp lệ và cart đủ điều kiện |
| Bước thực hiện | 1. Mở cart/checkout. 2. Nhập/chọn voucher. 3. Apply. |
| Expected | Discount đúng rule, tổng tiền cập nhật đúng. |
| Ghi chú | Cần kiểm min order, product/category targeting nếu có. |

### WEBFE-020 - Voucher không hợp lệ

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có voucher sai/hết hạn/không đủ điều kiện |
| Bước thực hiện | 1. Nhập voucher sai. 2. Nhập voucher hết hạn. 3. Nhập voucher không đủ điều kiện. |
| Expected | Không áp discount, message lỗi rõ, tổng tiền không sai. |
| Ghi chú | Không được để discount âm. |

### WEBFE-021 - Checkout desktop

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Cart có sản phẩm, viewport desktop |
| Bước thực hiện | 1. Mở cart. 2. Đi qua các bước checkout. 3. Nhập thông tin giao hàng. 4. Chọn payment. 5. Xác nhận đặt hàng. |
| Expected | UI checkout hoàn tất và điều hướng đúng sang trang thành công. Chỉ ghi "có mã đơn/đơn tạo thật" nếu quan sát được request tạo order qua API hoặc có service order ngoài được xác nhận. |
| Ghi chú | Source Web FE hiện thấy `handleOrder` redirect sang `/thanh-toan-thanh-cong`; chưa thấy API tạo order trong Web BE. Khi chưa có API order, case này pass ở mức UI flow và `Blocked` ở mức tạo đơn thật. |

### WEBFE-022 - Checkout mobile

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Cart có sản phẩm, viewport 375px |
| Bước thực hiện | 1. Mở cart mobile. 2. Đi qua checkout mobile. 3. Đặt hàng. |
| Expected | Flow mobile hoàn tất, nút không bị che, layout không overlap, điều hướng đúng sang trang thành công. Không kết luận tạo đơn thật nếu chưa có API/order service. |
| Ghi chú | Mobile fail là High/P0 tùy lượng user mobile. Nếu cần kiểm order thật, ghi `Blocked - Missing Web BE order/checkout integration` cho phần tạo đơn. |

### WEBFE-023 - Validation checkout

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Cart có sản phẩm |
| Bước thực hiện | 1. Mở checkout. 2. Để trống field bắt buộc. 3. Submit. |
| Expected | Field lỗi hiển thị rõ, không tạo đơn, dữ liệu đã nhập không mất. |
| Ghi chú | Kiểm số điện thoại/email/address nếu có. |

### WEBFE-024 - Login website trong flow mua hàng

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Website có login và có account test |
| Bước thực hiện | 1. Mở login. 2. Nhập account. 3. Submit. |
| Expected | Login thành công, UI hiển thị user/account state. |
| Ghi chú | Đây là login nằm trong flow mua hàng. Bộ case login/logout đầy đủ nằm ở nhóm WEBFE-AUTH. |

### WEBFE-025 - Logout website trong flow mua hàng

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | User đang login website |
| Bước thực hiện | 1. Bấm logout. 2. Reload trang. 3. Mở route cần auth nếu có. |
| Expected | Session/token bị xóa, cần login lại. |
| Ghi chú | Đây là logout nằm trong flow mua hàng. Bộ case login/logout đầy đủ nằm ở nhóm WEBFE-AUTH. |

### WEBFE-026 - Blog/news

| Mục | Nội dung |
|---|---|
| Priority | P2 |
| Tiền điều kiện | Có bài viết test |
| Bước thực hiện | 1. Mở `/tin-tuc`. 2. Mở category. 3. Mở article detail. |
| Expected | Listing, category, detail render đúng, không lỗi ảnh/nội dung. |
| Ghi chú | Không core checkout nhưng ảnh hưởng SEO/content. |

### WEBFE-027 - Static pages

| Mục | Nội dung |
|---|---|
| Priority | P2 |
| Tiền điều kiện | Web FE chạy |
| Bước thực hiện | 1. Mở giới thiệu. 2. Mở liên hệ. 3. Mở cửa hàng. 4. Mở chính sách. |
| Expected | Nội dung đúng, header/footer không lỗi. |
| Ghi chú | Link trong footer cần kiểm. |

### WEBFE-028 - SEO cơ bản

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Page có metadata |
| Bước thực hiện | 1. Mở homepage/PLP/PDP. 2. Kiểm title/meta/canonical. 3. Kiểm JSON-LD nếu có. |
| Expected | Metadata đúng page, canonical đúng URL, structured data không sai nghiêm trọng. |
| Ghi chú | Cần view-source hoặc DevTools. |

### WEBFE-029 - Responsive tổng thể

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Web FE chạy |
| Bước thực hiện | 1. Kiểm 375px. 2. Kiểm 768px. 3. Kiểm 1440px. 4. Chụp screenshot homepage/PLP/PDP/cart/checkout. |
| Expected | Không overlap, text không bị cắt, CTA bấm được. |
| Ghi chú | Bắt buộc evidence screenshot. |

## 4. Web BE - Kịch Bản Backend API

### WEBBE-001 - Health check

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Backend chạy |
| Bước thực hiện | 1. Gọi `GET /ping`. 2. Gọi `GET /version`. |
| Expected | Cả hai trả 200, đúng schema. |
| Ghi chú | Health fail thì dừng API test. |

### WEBBE-002 - Catalog search

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có ERP/data product |
| Bước thực hiện | 1. Gọi search keyword hợp lệ. 2. Gọi keyword không tồn tại. 3. Gọi keyword rỗng/sai format. |
| Expected | Keyword hợp lệ trả sản phẩm; keyword không có trả empty; input sai không 500. |
| Ghi chú | Nếu thiếu ERP DSN, ghi Blocked/Skipped with reason. |

### WEBBE-003 - Product list pagination

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có nhiều sản phẩm |
| Bước thực hiện | 1. Gọi `GET /v1/catalog/products?limit=...`. 2. Chuyển page/cursor nếu có. |
| Expected | Limit đúng, không trùng item, metadata pagination đúng. |
| Ghi chú | Dữ liệu lặp là bug API. |

### WEBBE-004 - Product detail

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có product slug hợp lệ |
| Bước thực hiện | 1. Gọi `GET /v1/catalog/products/:slug`. 2. Kiểm fields product. 3. Gọi slug sai. |
| Expected | Slug đúng trả product + enrichment; slug sai trả 404/error contract đúng. |
| Ghi chú | Không được panic/500 với slug sai. |

### WEBBE-005 - Products by collection slug

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có collection slug hợp lệ |
| Bước thực hiện | 1. Gọi `/v1/catalog/products/by-collection-slug/:slug`. 2. Kiểm products, breadcrumb, filters, SEO meta. |
| Expected | Response đủ dữ liệu PLP cần dùng. |
| Ghi chú | Đây là API core cho collection page. |

### WEBBE-006 - Navigation API

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có navigation data |
| Bước thực hiện | 1. Gọi `/v1/catalog/navigation`. 2. Kiểm tree category/menu. |
| Expected | Tree đúng schema, node có name/slug/children nếu có. |
| Ghi chú | Hot path nên kiểm cache header nếu có. |

### WEBBE-007 - Homepage bundle API

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có site config/homepage data |
| Bước thực hiện | 1. Gọi `/v1/homepage/bundle`. 2. Kiểm banners, flash sale, featured categories/products. |
| Expected | Bundle đúng schema, section rỗng không làm fail toàn bộ. |
| Ghi chú | Response sai làm hỏng homepage. |

### WEBBE-008 - Collection admin mutation

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có admin token và DB test |
| Bước thực hiện | 1. POST tạo collection không token. 2. POST tạo collection với admin token. 3. Kiểm GET lại. |
| Expected | Không token bị 401/403; admin token tạo thành công; data đọc lại đúng. |
| Ghi chú | Admin mutation không cần token là security bug. |

### WEBBE-009 - Product enrichment API

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có productId/product slug |
| Bước thực hiện | 1. GET product details. 2. GET images/badges/colors/relations. 3. POST update với admin token. |
| Expected | Đọc/ghi đúng productId, public PDP có thể dùng dữ liệu này. |
| Ghi chú | Cần phân biệt ERP product và enrichment DB. |

### WEBBE-010 - SEO APIs

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có metadata, redirect, sitemap data |
| Bước thực hiện | 1. GET metadata. 2. Lookup redirect hit/miss. 3. GET sitemap products/collections với limit/cursor. |
| Expected | Metadata đúng; redirect hit trả target; miss đúng contract; sitemap không lặp cursor. |
| Ghi chú | SEO lỗi ảnh hưởng crawl/index. |

### WEBBE-011 - User APIs

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có DB user test |
| Bước thực hiện | 1. Create/list/get user. 2. Create/list address. 3. Test validation fail. |
| Expected | Status code đúng, validation rõ, address gắn đúng user. |
| Ghi chú | Không leak sensitive data. |

### WEBBE-012 - Error handling và security response

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Backend chạy |
| Bước thực hiện | 1. Gửi payload thiếu required. 2. Gửi query sai kiểu. 3. Gọi route admin không token. |
| Expected | 400/401/403/422 đúng, không leak SQL/raw stack trace. |
| Ghi chú | Đây là gate security cơ bản. |

## 5. Admin FE - Kịch Bản Trang Quản Trị

## 5A. Admin FE - Login/Logout Admin

**Ghi chú:** Admin login/logout là phần bắt buộc. Nếu admin có thể vào protected route mà không login hoặc logout xong token vẫn dùng được, đây là lỗi High/Critical tùy mức độ.

### ADMINFE-AUTH-001 - Mở trang login admin

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Admin FE chạy được |
| Bước thực hiện | 1. Mở admin URL. 2. Nếu chưa login, quan sát trang login. |
| Expected | Trang/form login admin hiển thị đúng; không thấy dữ liệu dashboard khi chưa xác thực. |
| Ghi chú | Nếu auto redirect qua SSO thì ghi rõ URL/flow SSO. |

### ADMINFE-AUTH-002 - Login admin bằng account hợp lệ

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có admin account hợp lệ |
| Bước thực hiện | 1. Nhập username/email. 2. Nhập password/OTP. 3. Submit. |
| Expected | Login thành công; vào dashboard/admin shell; sidebar/header hiển thị đúng; token/session admin được tạo. |
| Ghi chú | Account test phải có quyền phù hợp với module cần kiểm. |

### ADMINFE-AUTH-003 - Login admin sai mật khẩu

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có admin account hoặc input test |
| Bước thực hiện | 1. Nhập username/email đúng. 2. Nhập password sai. 3. Submit. |
| Expected | Login thất bại; message lỗi rõ; không tạo token/session admin. |
| Ghi chú | Không được leak thông tin nhạy cảm như user tồn tại hay stack trace. |

### ADMINFE-AUTH-004 - Validation form login admin

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Form login admin hiển thị |
| Bước thực hiện | 1. Submit khi để trống field. 2. Nhập email sai format nếu dùng email. |
| Expected | Field error hiển thị đúng; không login; không crash. |
| Ghi chú | Đây là case form cơ bản. |

### ADMINFE-AUTH-005 - Truy cập protected route khi chưa login

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Clear token/session admin |
| Bước thực hiện | 1. Mở trực tiếp URL dashboard hoặc module admin. |
| Expected | Bị redirect về login hoặc thấy auth required; không thấy dữ liệu admin. |
| Ghi chú | Fail case này là security blocker. |

### ADMINFE-AUTH-006 - Reload sau khi login admin

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Đã login admin |
| Bước thực hiện | 1. Reload dashboard. 2. Reload một module admin. |
| Expected | Session còn hạn thì vẫn ở trạng thái login; sidebar/header/module render đúng. |
| Ghi chú | Nếu reload bị mất auth bất thường là bug session. |

### ADMINFE-AUTH-007 - Logout admin

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Đã login admin |
| Bước thực hiện | 1. Click logout. 2. Reload admin. 3. Mở route protected. |
| Expected | Token/session admin bị xóa hoặc vô hiệu; route protected yêu cầu login lại. |
| Ghi chú | Token admin còn hiệu lực sau logout là lỗi nghiêm trọng. |

### ADMINFE-AUTH-008 - Token admin hết hạn/invalid

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có thể giả lập token hết hạn hoặc sửa token invalid |
| Bước thực hiện | 1. Login admin. 2. Làm token invalid/expired. 3. Reload hoặc gọi API admin. |
| Expected | Bị logout/redirect hoặc refresh token đúng; không thấy data admin khi token invalid. |
| Ghi chú | Đây là case security bắt buộc cho admin. |

### ADMINFE-AUTH-009 - Role sau login admin

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có nhiều account admin với role khác nhau |
| Bước thực hiện | 1. Login role admin đầy đủ. 2. Login role hạn chế. 3. So sánh menu/action. |
| Expected | Menu/action hiển thị theo quyền; role hạn chế không thấy hoặc không gọi được action restricted. |
| Ghi chú | Đặc biệt quan trọng cho QC/KT/QLCH và mutation admin. |

### ADMINFE-001 - Login admin

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Admin FE chạy, có admin account |
| Bước thực hiện | 1. Mở admin. 2. Nhập account. 3. Submit login. |
| Expected | Login thành công, vào dashboard/admin shell. |
| Ghi chú | Case này là bản rút gọn trong nhóm admin chung. Bộ case login/logout đầy đủ nằm ở nhóm ADMINFE-AUTH. |

### ADMINFE-002 - Logout admin

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Đã login admin |
| Bước thực hiện | 1. Bấm logout. 2. Reload admin. 3. Mở route protected. |
| Expected | Session/token bị xóa, route protected yêu cầu login lại. |
| Ghi chú | Case này là bản rút gọn trong nhóm admin chung. Bộ case login/logout đầy đủ nằm ở nhóm ADMINFE-AUTH. |

### ADMINFE-003 - Protected route khi chưa login

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Chưa login hoặc đã clear token |
| Bước thực hiện | 1. Mở trực tiếp route admin protected. |
| Expected | Redirect login hoặc hiển thị auth required, không thấy dữ liệu admin. |
| Ghi chú | Security gate. |

### ADMINFE-004 - Sidebar/header/admin layout

| Mục | Nội dung |
|---|---|
| Priority | P2 |
| Tiền điều kiện | Đã login admin |
| Bước thực hiện | 1. Thu/mở sidebar. 2. Click nhiều menu. 3. Kiểm active menu/header. |
| Expected | Layout không vỡ, active menu đúng, header không overlap. |
| Ghi chú | Admin là tool vận hành nên UX phải ổn định. |

### ADMINFE-005 - Permission menu/action

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có user đủ quyền và user thiếu quyền |
| Bước thực hiện | 1. Login user thiếu quyền. 2. Mở menu/action restricted. 3. Gọi mutation nếu có. |
| Expected | User thiếu quyền bị chặn ở UI hoặc API; user đủ quyền thao tác được. |
| Ghi chú | Sai permission là High/Critical. |

### ADMINFE-006 - Collection CMS

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Admin có quyền catalog/CMS |
| Bước thực hiện | 1. Tạo collection root. 2. Tạo collection con. 3. Đổi parent. 4. Kiểm public collection. |
| Expected | Collection lưu đúng, breadcrumb/hierarchy đúng, public đọc được. |
| Ghi chú | Đổi parent cần kiểm kỹ vì BE dùng closure/breadcrumb. |

### ADMINFE-007 - Product enrichment

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có product test |
| Bước thực hiện | 1. Tạo/sửa product detail. 2. Thêm/sắp xếp ảnh. 3. Tạo badge/color/relation. 4. Kiểm PDP public. |
| Expected | Admin lưu thành công, Web FE/PDP hiển thị dữ liệu mới đúng. |
| Ghi chú | Đây là flow tích hợp Admin FE -> Web BE -> Web FE. |

### ADMINFE-008 - Homepage CMS

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Admin có quyền CMS |
| Bước thực hiện | 1. Sửa banner. 2. Sửa flash sale. 3. Sửa featured section. 4. Mở website. |
| Expected | Website cập nhật đúng sau cache/thời gian hợp lệ. |
| Ghi chú | Nếu có cache, ghi thời gian propagation. |

### ADMINFE-009 - Coupon/Voucher

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Admin có quyền promotion |
| Bước thực hiện | 1. Tạo coupon. 2. Set targeting. 3. Preview. 4. Apply ở website/cart nếu có API. |
| Expected | Coupon lưu đúng, preview đúng, discount áp đúng rule. |
| Ghi chú | Discount sai ảnh hưởng tiền, severity cao. |

### ADMINFE-010 - SEO Admin

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Admin có quyền SEO |
| Bước thực hiện | 1. Tạo metadata. 2. Tạo redirect. 3. Gọi public lookup/page. |
| Expected | Metadata/redirect public nhận đúng. |
| Ghi chú | Chú ý cache. |

### ADMINFE-011 - Upload media

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có upload endpoint/config |
| Bước thực hiện | 1. Upload ảnh hợp lệ. 2. Upload file sai định dạng. 3. Upload file quá lớn. |
| Expected | File hợp lệ thành công; file sai bị chặn với message rõ. |
| Ghi chú | Không cho upload file nguy hiểm. |

### ADMINFE-012 - Stocktake scan

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Có session kiểm kê |
| Bước thực hiện | 1. Scan IMEI match. 2. Scan duplicate. 3. Scan unknown. 4. Xóa scan. |
| Expected | Counter, warning, fallback SKU, variance cập nhật đúng. |
| Ghi chú | Có test guide riêng trong source cũ. |

### ADMINFE-013 - Variance workflow role QLCH/QC/KT

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có ticket variance ở các trạng thái |
| Bước thực hiện | 1. Login QLCH, kiểm checklist/action. 2. Login QC, kiểm duyệt/từ chối. 3. Login KT, kiểm hạch toán. 4. Login sai role, kiểm CTA. |
| Expected | Mỗi role chỉ thấy action đúng state; timeline/context đầy đủ. |
| Ghi chú | Source report từng ghi role gating fail, phải test kỹ. |

### ADMINFE-014 - Order management nếu có module đơn hàng

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Admin FE có route `/orders`, `/orders/[id]`, `/orders/create`; có sẵn dữ liệu đơn trong admin hoặc có API/service tạo đơn test |
| Bước thực hiện | 1. Login admin. 2. Mở quản lý đơn. 3. Search mã đơn. 4. Mở chi tiết. 5. Cập nhật trạng thái. |
| Expected | Tìm thấy đúng đơn có sẵn trong Admin FE, dữ liệu khớp theo nguồn order hiện có, trạng thái cập nhật và giữ sau reload. |
| Ghi chú | Source Admin FE có module order. Tuy nhiên source Web BE đang chưa thấy module `order/checkout`, nên không mặc định dùng đơn tạo từ Web FE; nếu cần đơn từ Web FE thì phụ thuộc E2E-001 và có thể bị Blocked. |

## 6. E2E Integration - Web FE -> Web BE -> Admin FE

### E2E-001 - Agent đặt hàng trên Website và Admin tìm thấy đơn

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Web FE, Web BE, Admin FE chạy; có account website/admin nếu website auth có thật; có product còn hàng; có API/service order thật được xác nhận |
| Bước thực hiện | 1. Xác nhận website có login route/modal thật; nếu không có thì ghi Blocked/NA cho login website. 2. Agent login website nếu flow có thật. 3. Chọn sản phẩm. 4. Thêm giỏ. 5. Checkout. 6. Quan sát Network/API để lấy order ID/mã đơn thật. 7. Logout website nếu flow có thật. 8. Login admin. 9. Mở `/orders` và search mã đơn. |
| Expected | Chỉ Pass khi có request tạo order thật, nhận được order ID/mã đơn thật, và Admin FE tìm thấy đúng đơn đó. |
| Ghi chú | Theo source đã rà soát: Web FE checkout hiện giống UI redirect; Web BE chưa thấy module `order/checkout`; Admin FE có module `/orders`. Vì vậy case này mặc định là `Blocked - Missing Web BE order/checkout integration` cho tới khi team cung cấp API/service order thật. |

### E2E-002 - Đối chiếu dữ liệu đơn giữa Website và Admin

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Có order ID thật từ E2E-001 hoặc có order test tồn tại trong Admin FE |
| Bước thực hiện | 1. Mở chi tiết đơn trong admin. 2. Đối chiếu khách hàng. 3. Đối chiếu SKU/tên sản phẩm. 4. Đối chiếu số lượng, giá, voucher, tổng tiền. |
| Expected | Dữ liệu admin khớp dữ liệu đặt hàng trên website. |
| Ghi chú | Sai tổng tiền, SKU, số lượng là High/Critical. Nếu E2E-001 bị Blocked vì thiếu order API, case này chỉ chạy được với order test có sẵn trong Admin FE và không được kết luận là Web FE -> Admin integration pass. |

### E2E-003 - Admin xử lý trạng thái đơn

| Mục | Nội dung |
|---|---|
| Priority | P0 |
| Tiền điều kiện | Admin có quyền xử lý đơn; có order test trong Admin FE |
| Bước thực hiện | 1. Mở order detail. 2. Chọn action xử lý. 3. Lưu trạng thái. 4. Reload. |
| Expected | Trạng thái đơn cập nhật đúng và giữ sau reload. |
| Ghi chú | Đây là case hợp lệ cho Admin FE vì source có module order. Nếu order không đến từ Web FE thì chỉ kết luận Admin order management pass, không kết luận E2E order pass. |

### E2E-004 - Logout cả Website và Admin

| Mục | Nội dung |
|---|---|
| Priority | P1 |
| Tiền điều kiện | Agent đã login admin; website login chỉ áp dụng nếu source/release có flow login website thật |
| Bước thực hiện | 1. Nếu website có login thật, logout website và reload route cần auth. 2. Login admin nếu chưa login. 3. Logout admin. 4. Reload admin protected route. |
| Expected | Admin logout luôn phải xóa/vô hiệu session/token. Website logout chỉ Pass/Fail khi flow login website tồn tại; nếu route/modal login website chưa có, ghi `Blocked - Website login/logout route not implemented` hoặc `Not Applicable`. |
| Ghi chú | Admin token còn hiệu lực sau logout là lỗi nghiêm trọng. Không gộp trạng thái website auth chưa implement thành fail của Admin FE. |

## 7. Báo cáo bắt buộc khi chạy các kịch bản

| Field | Bắt buộc ghi |
|---|---|
| Environment | Local/Staging/Production smoke |
| Build version/branch | Version hoặc branch test |
| Tester | Người chạy test |
| Date | Ngày chạy |
| Account | Website account/admin account |
| Product | SKU/slug test |
| Order ID | Mã đơn nếu có |
| Result | Pass/Fail/Blocked/Not Run |
| Evidence | Screenshot/log/API response |
| Bug ID | Nếu fail |

## 8. Điều kiện kết luận đầy đủ

| Phần | Pass khi |
|---|---|
| Web FE | Core UI, PLP, PDP, cart, checkout, responsive pass |
| Web BE | Health, catalog, homepage, SEO, admin auth, error handling pass |
| Admin FE | Auth, permission, CMS/product/order/stocktake flow pass theo scope |
| E2E | Chỉ Pass khi có API/service order thật: Web FE tạo được order, Web BE/service lưu được, Admin FE tìm/xử lý được. Nếu thiếu module order/checkout ở Web BE thì E2E order phải ghi `Blocked - Missing Web BE order/checkout integration`. |

**Kết luận:** Nếu một trong các phần Web FE, Web BE, Admin FE hoặc E2E còn P0/P1 fail thì không được kết luận tài liệu test đã pass đầy đủ.
