# Báo cáo kiểm thử — Kết quả thi và Xem lại đáp án (R4)

> Prototype tĩnh, dữ liệu minh họa. Kiểm thử bằng script chạy trong Chromium của ứng dụng (iframe cùng gốc, đổi độ rộng, đổi `?lang=`/`?state=`) 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.** Không tự đánh dấu là đã duyệt.

## 1. Ma trận đã chạy

| Phạm vi | Chi tiết | Kết quả |
|---|---|---|
| Trang | `exam-results.html`, `answer-review.html` | |
| Ngôn ngữ giao diện | vi, en, ko, zh-Hans, th | |
| Tình huống dữ liệu | 1 đủ điểm · 2 Viết chưa chấm · 3 chưa có điểm hợp lệ · 4 thiếu lời giải đã duyệt | |
| Độ rộng | 375px, 1024px (bắt buộc); thêm 768px; 320px (thăm dò) | 375 và 1024: 5 ngôn ngữ, **không lỗi**. 768 và 320: chỉ vi và th (đã chạy); 768 không lỗi; 320: xem mục 3 |
| 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ữ tính từ màu thực (≥4.5:1, chữ lớn ≥3:1)**, khóa dịch hiện thô (`rv.xxx`), tham số `{n}` chưa thay, **chuỗi “DRAFT” của lời giải chưa duyệt có trong DOM không** | 0 lỗi ở 375 và 1024 (5 ngôn ngữ); 768 (vi, th) |
| Xem lại đáp án | duyệt **cả 18 câu** trong mỗi tổ hợp (ngôn ngữ × tình huống × độ rộng) và kiểm tự động sau mỗi câu | 0 lỗi ở 375 và 1024 (5 ngôn ngữ); 768 (vi, th) |
| Kiểm chứng bộ kiểm tra | chèn phần tử rộng 600px + chữ tương phản 2.2:1 vào trang | Bộ kiểm tra bắt được cả hai (xác nhận không “xanh giả”) |
| Header 961 / 1000 / 1100px | vi (cả 4 ngôn ngữ còn lại ở 3 độ rộng) | Một hàng cao 64px, không tràn, menu desktop hiển thị |

## 2. Hành vi đã xác nhận bằng script

**Điều hướng Kết quả → Xem lại đáp án**
- Nút chính trên Kết quả mang `lang`, `state`, `src`, `bare` sang trang xem lại (kiểm `th` + `partial`: trang mở đúng ngôn ngữ Thái, tiêu đề Thái, mặc định câu 1).
- Nút “Xem phần …” mở đúng câu đầu phần (`#q=R21` v.v.). Nút “Quay lại kết quả” giữ ngôn ngữ và tình huống. Đổi ngôn ngữ ngay trên trang xem lại (Thái → Anh) giữ nguyên câu đang xem, đổi toàn bộ chữ, thông báo `aria-live` đổi ngôn ngữ.
- Bấm “Câu sau” chuyển focus về tiêu đề câu (`h2` có `tabindex=-1`), thông báo cho trình đọc màn hình.

**Bốn tình huống bắt buộc (kiểm cấu trúc DOM, ngôn ngữ en)**
| Tình huống | Tổng điểm | Số đúng/sai | Chip “chưa chấm” | Nút chính | Xem lại |
|---|---|---|---|---|---|
| 1 đủ điểm | 191 / 300 | có (Nghe, Đọc) | 0 | “Review answers” | thẻ đáp án đúng + lời giải đã duyệt (khi có) |
| 2 Viết chưa chấm | **không có số** (“Chưa chấm” + lý do) | có (Nghe, Đọc) | 1 (Viết) | “Review answers” | ô Viết: “chưa chấm, không có điểm hay nhận xét” |
| 3 chưa có điểm hợp lệ | **không có số** | **ẩn hoàn toàn** | 0 | “Review what you answered” + giải thích | **không có thẻ đáp án đúng, không có lời giải/bản dịch**, hộp “đáp án chưa công bố” |
| 4 thiếu lời giải đã duyệt | 191 / 300 | có | 0 | “Review answers” | ô báo thiếu cho câu không có lời giải; lời giải đã duyệt hiện ở câu có |

**Không lộ nội dung chưa duyệt:** dữ liệu mẫu cố ý chứa một lời giải AI ở trạng thái *nháp* (câu Đọc 26). Mọi tổ hợp đã quét (5 ngôn ngữ × 4 tình huống × 375/1024px × 18 câu) không có chuỗi này trong DOM; câu đó hiện ô “chưa có lời giải đã duyệt”.

**Không lộ đáp án trong Exam Taking:** `exam-taking.html` **không thay đổi** (md5 `cb434bc65c2a65b92c84dde4fb5de09c`, giống R2/R3), không tham chiếu `results.js`, `answer-review`, `exam-results` hay trường `verdict`; dữ liệu đáp án đúng của màn xem lại nằm trong tệp riêng `results.js` mà trang thi không tải. Kiểm tra này là tĩnh (so khóa, grep); chưa chạy một phiên thi đầy đủ để quan sát DOM lúc làm bài.

**Các tệp R3 giữ nguyên:** `homepage.html`, `thu-vien-de/**`, `library.*`, `catalog.js`, `site.js`, `site.css`, `tokens.css` không bị sửa (đối chiếu checksum trước/sau).

## 3. Phát hiện chưa sửa

1. **Header dùng chung bị tràn ở 320px** (nút menu vượt mép phải 18–25px ở vi và th): lỗi có sẵn trong `site.css`/`site.js` (logo + nút ngôn ngữ + nút menu), không do hai màn mới. Không sửa vì ngoài phạm vi vòng này (không chỉnh Homepage/Library R3). Yêu cầu bắt buộc là 375px và đạt.
2. **Phần Viết trên mobile:** giấy 원고지 có 30 ô/hàng, ô 22px nên rộng 660px; hiển thị trong vùng cuộn ngang có `tabindex`, có nhãn và bản chữ thường cho trình đọc màn hình. Người dùng phải cuộn ngang để xem hết hàng. Cần reviewer xem lại (có muốn chữ nhỏ hơn không cuộn, hay xem dạng văn bản?).
3. **Đề rút gọn:** chỉ 6 câu Nghe, 4 câu Viết, 8 câu Đọc (đề thật 50/4/50). Lưới điều hướng 50 ô chưa được thử; có thể cần cuộn trong thanh bên.
4. **Ghim đề dùng chung trên mobile:** chiếm tối đa 24% chiều cao màn hình, có nút “Thu gọn”. Khi cuộn, khung ghim che phần đầu thẻ câu hỏi (đúng bản chất của khung ghim) — cần reviewer xem trên thiết bị thật.
5. **Âm thanh:** prototype không có âm thanh; chỉ có khung giữ chỗ. Chưa thiết kế điều khiển nghe lại.

## 4. Chưa kiểm thử

- Trình đọc màn hình (NVDA/VoiceOver/TalkBack) và toàn bộ thứ tự Tab; mới kiểm chuyển focus khi bấm Câu trước/sau và vùng cuộn có thể focus.
- Thiết bị cảm ứng thật; Safari, Firefox; kích thước chữ hệ thống lớn; chế độ tối (không có).
- Tương phản viền/biểu tượng/focus bằng công cụ ngoài (chỉ kiểm chữ).
- Nội dung tiếng Hàn của đề/câu hỏi/lời thoại/bài viết mẫu do Claude soạn minh họa, **cần người biết tiếng Hàn kiểm tra**.
- Bản dịch giao diện 5 ngôn ngữ do Claude soạn, **chưa có người bản ngữ duyệt**.
- Định dạng ngày/giờ theo locale chỉ dùng `Intl.DateTimeFormat` cho một ngày giả định.

## 5. Ảnh chụp (`screenshots-results/`)

| Tệp | Nội dung |
|---|---|
| A1–A4 | Kết quả, desktop 1024: đủ điểm / Viết chưa chấm / chưa có điểm hợp lệ / thiếu lời giải đã duyệt (vi) |
| B1–B5 | Xem lại, desktop 1024: câu sai + đề dùng chung ghim / câu Nghe chưa trả lời + khung âm thanh + lời thoại / Viết chưa chấm / Viết đã chấm / câu có bản dịch duyệt nhưng thiếu lời giải |
| C1–C4 | Kết quả, mobile 375, bốn tình huống (vi) |
| D1–D4 | Xem lại, mobile 375: đề dùng chung ghim / Viết chưa chấm / đáp án chưa công bố / danh sách câu mở |
| E1–E4 | Đa ngôn ngữ: Thái (xem lại, mobile), Hàn (kết quả, mobile), Trung (kết quả, nguồn đề theo kỳ, desktop), Anh (xem lại, lời giải nháp không hiện, desktop) |

Ảnh chụp ở khung của cửa sổ xem trước (độ phân giải thấp, đôi khi bị co); chỉ có ảnh vi ở đủ bốn tình huống × hai độ rộng, ngôn ngữ khác chỉ chụp mẫu đại diện, phần còn lại do quét tự động.

> **Cập nhật R6:** trạng thái 2 (“Viết chưa chấm”) trong báo cáo này đã được **thay thế** — nay không hiển thị điểm Nghe/Đọc, tổng điểm hay số câu đúng/sai. Xem `TEST-REPORT-DASHBOARD.md` và `DESIGN-PHASE2.md` mục 4h.1. Các mô tả “Nghe/Đọc có điểm khi Viết chưa chấm” ở trên không còn đúng.
