# Báo cáo kiểm thử R6 — Consolidation và Student Dashboard

> Prototype tĩnh, dữ liệu minh họa. Kiểm thử bằng script trong Chromium của ứng dụng (iframe cùng gốc, đổi độ rộng, `?lang=`, `?data=`/`?state=`), phím thật cho một số thao tác, và xem screenshot. **Chưa kiểm trên thiết bị thật, chưa dùng trình đọc màn hình, chưa kiểm Safari/Firefox.** Tách thành các lượt nhỏ theo yêu cầu. Không tự đánh dấu là đã duyệt.
> Kiểm tự động mỗi lần: tràn ngang trang, phần tử vượt mép phải, chữ bị cắt, **tương phản chữ ≥4.5:1 (lớn ≥3:1) tính từ màu thực**, khóa dịch hiện thô, tham số `{x}` chưa thay (bộ kiểm tra đã từng được kiểm chứng bằng lỗi giả ở R4).

## Lượt 1 — Consolidation
| Kiểm tra | Kết quả |
|---|---|
| Exam Results, trạng thái “Viết chưa chấm”, 5 ngôn ngữ | Chữ “Đã nộp bài”, “Chờ kết quả” (Nghe, Đọc), “Chưa chấm” (Viết), “Kết quả chưa hoàn tất”; **không có** chữ số 62/58/191/300, không tổng điểm, không thanh điểm, không số câu đúng/sai (kiểm DOM từng ngôn ngữ) |
| Xem lại ở trạng thái đó | Không thẻ “Đáp án đúng”, không “Đúng/Sai”, có ô “đáp án chưa công bố”; Viết hiện “Chưa chấm” |
| Ba tình huống còn lại của Exam Results | Đủ điểm: 191/300 + số câu; không điểm hợp lệ: ẩn; thiếu lời giải: như cũ |
| Skill Library: hai lớp phân loại | Hai nhóm lọc riêng (Cấp mục tiêu: Tất cả + Cấp 3–6 với số bộ; Độ khó: Tất cả, Làm quen, Củng cố, Thử thách); TOPIK I chỉ Cấp 1, 2; thẻ có hai dòng riêng; bộ chưa gán hiện “Chưa gán”; lọc cấp 3 → 2 bộ, thêm “Thử thách” → 0 bộ (trạng thái “không có bộ ở mức này”); khi lọc `robots=noindex,follow` |
| Skill Practice | Hai huy hiệu riêng ở đầu trang (“Cấp độ mục tiêu: Chưa gán” cho bộ chưa gán); sau khi xem đáp án 4/4 lựa chọn bị vô hiệu; câu thông báo khóa không còn ghi “đề xuất”; ghi chú hướng lưu tiến độ production (đề xuất) |
| Quét tự động | Skill Library (vi/th/en × 375/1024 × mọi chế độ xem kể cả lọc cấp 6): 0 lỗi; Skill Practice (vi/ko/th × 375/1024 × mọi câu × trước/sau xem đáp án × có/thiếu lời giải) 0 lỗi; Exam Results (5 ngôn ngữ × 375/1024 × 4 tình huống) 0 lỗi; Answer Review (vi, en, ko, zh-Hans, th × 375/1024 × 4 tình huống × 18 câu) 0 lỗi |
| Không lộ lời giải trước thời điểm / mất bài làm | Giữ nguyên các kiểm tra R5 trên bản đã sửa (0 lỗi) |

## Lượt 2 — Dashboard desktop (1024px)
- 5 ngôn ngữ × 5 tình huống (có hoạt động, chỉ Luyện kỹ năng, chưa có hoạt động, đang tải, lỗi): **0 lỗi**.
- Tình huống (ngôn ngữ ko): có hoạt động → 2 thẻ Tiếp tục, 5 mục (Tiếp tục, Tổng quan, Luyện đề, Luyện kỹ năng, Hoạt động gần đây), **điểm duy nhất hiển thị là 191/300 của đề đã công bố**, dòng đề đang chờ kết quả chỉ ghi “điểm chưa được công bố”; chỉ Luyện kỹ năng → 1 thẻ Tiếp tục, khu vực Luyện đề trống; chưa có hoạt động → thẻ trống + 2 CTA; đang tải → 2 khung xương; lỗi → hộp lỗi, nút Thử lại làm hiện lại dữ liệu.
- Không có chữ streak/leaderboard/predict/probability/rank/% trong nội dung (kiểm DOM tiếng Anh). `robots = noindex,nofollow`.
- Mọi liên kết trong nội dung giữ `lang` (kiểm ko).

## Lượt 3 — Dashboard mobile (375px)
- 5 ngôn ngữ × 5 tình huống: **0 lỗi** (không tràn ngang, không chữ bị cắt, tương phản đạt).
- Bố cục một cột: thẻ Tiếp tục xếp dọc, hai nhóm chỉ số xếp dọc (2 cột chỉ số), hai khu vực xếp dọc, dòng hoạt động gần đây xuống dòng nhãn loại.

## Lượt 4 — 5 ngôn ngữ
- vi, en, ko, zh-Hans, th: tiêu đề, chỉ số và nguồn, chip trạng thái, danh sách, hoạt động gần đây, trạng thái dữ liệu đều đổi ngôn ngữ; tên đề/ngày theo `Intl` theo ngôn ngữ; tên bộ bài tập kế thừa từ Skill Library. Đổi ngôn ngữ ở header vẽ lại tại chỗ.
- **Header 961 / 1000 / 1100px × 5 ngôn ngữ** trên Dashboard, Homepage, Skill Library, Thư viện đề (nay có thêm mục “Học tập của tôi”, hai mega menu): một hàng cao 64px, không tràn, mọi mục cùng hàng, nút ngôn ngữ trong khung.
- Ảnh chụp mẫu: vi (desktop, mobile), en (desktop, chỉ Luyện kỹ năng), th (mobile).

## Lượt 5 — Regression các màn có chỉnh sửa
Exam Results, Answer Review, Skill Library, Skill Practice: 0 lỗi ở 375/1024 (bảng lượt 1). Homepage và Thư viện đề: **chỉ kiểm header/điều hướng** ở 961/1000/1100px × 5 ngôn ngữ trong vòng này (quét toàn trang Homepage đã chạy ở R5, trước khi thêm mục “Học tập của tôi”; chưa quét lại toàn trang). `exam-taking.html` không đổi (md5 `cb434bc65c2a65b92c84dde4fb5de09c`); 11 trang danh mục `thu-vien-de/**`, `library.*`, `catalog.js`, `tokens.css`, `site.css` không đổi. `site.js` chỉ thêm một mục điều hướng và một khóa dịch; `skills.js` thêm hai lớp phân loại; `results.js` chỉ sửa trạng thái 2.

## Giới hạn và phát hiện
1. **Bàn phím/focus:** Dashboard dùng liên kết và nút gốc với kiểu focus toàn cục (viền xanh 3px); chưa đi hết thứ tự Tab bằng phím thật cho Dashboard (đã kiểm phím thật ở Skill Practice, R5).
2. **Số câu của bộ (thư viện) và phiên mẫu không khớp** (ví dụ “12 câu” trong thư viện nhưng phiên mẫu chỉ 4 câu) vì phiên là mẫu rút gọn; đã nêu trong ghi chú dữ liệu minh họa.
3. Dashboard dùng một ô hiển thị điểm đã công bố (191/300) để minh họa trạng thái “có kết quả”; có hiển thị điểm trên Dashboard hay không là câu hỏi mở (câu 88).
4. Chưa kiểm: thiết bị thật, trình đọc màn hình, Safari/Firefox, cỡ chữ hệ thống lớn, tương phản viền/biểu tượng; bản dịch UI mới (~100 chuỗi Dashboard + ~15 Skill) và nhãn menu “Học tập của tôi” chưa người bản ngữ duyệt.
5. 320px: header dùng chung có sẵn tràn ~18–25px (không sửa, ngoài phạm vi); 375px đạt.
6. Không có đăng nhập/quyền truy cập: dữ liệu minh họa hiện cho mọi người; production phải kiểm soát ở máy chủ.

## Ảnh chụp (`screenshots-dashboard/`)
D1–D6 Dashboard desktop (đầu trang, hai khu vực, chỉ Luyện kỹ năng en, chưa có hoạt động, đang tải, lỗi) · M1–M2 Dashboard mobile (vi, th) · A1–A4: Consolidation (Exam Results chưa hoàn tất desktop/mobile, Skill Library hai lớp phân loại, Skill Practice hai huy hiệu + khóa). Ảnh từ khung xem trước (độ phân giải thấp).


> **Cập nhật R7:** Dashboard đổi tên “Học tập của tôi”, không hiển thị điểm trực tiếp, và **mặc định yêu cầu đăng nhập (mô phỏng)**: kiểm thử Dashboard cần `?auth=in`. Không còn mục điều hướng công khai “Bảng học tập”. Xem `TEST-REPORT-AUTH.md`.
