← Quay lại mục lục

Bài 8 — Form cập nhật thông tin tài khoản

Form profile với avatar upload, name, birthday (≥18 tuổi), gender, email (check duplicate). Tổng hợp file validation + age calculation + email uniqueness.

Khó #form #profile #avatar #upload #age-validation #email-uniqueness #boundary

👤 Bài 8: Form cập nhật thông tin tài khoản

Người dùng đã đăng nhập muốn cập nhật thông tin profile của mình: avatar, tên, năm sinh, giới tính và email. Bài này tổng hợp nhiều kỹ thuật test: file upload validation, boundary value, age calculation, email uniqueness.

📅 Today's date: 2026-04-27 — dùng làm mốc để tính tuổi 18+. Test các edge case quanh ngày sinh nhật.

📌 Test data có sẵn

Thông tin user hiện tại (đã load sẵn vào form):

  • Name: Nguyen Van A
  • Birthday: 1995-06-15
  • Gender: Male
  • Email: user@example.com (email hiện tại của user — KHÔNG bị tính là duplicate)

Email đã được dùng bởi user khác trong hệ thống:

  • admin@itlearn.com
  • tester@itlearn.com
  • contact@company.com

📋 Bảng đặc tả (Specification)

# Tên Loại Control Bắt Buộc Mô Tả
1 Avatar File upload No
  • Chỉ chấp nhận file ảnh: .jpg, .jpeg, .png, .gif.
  • Kích thước tối đa: 2 MB (2,097,152 bytes).
  • Nếu không upload, giữ avatar hiện tại.
2 Name Text box Yes
  • Độ dài: 2–50 ký tự (sau khi trim).
  • Chỉ chứa chữ cái (cả Unicode tiếng Việt) và một dấu cách giữa các từ (không cho phép 2+ dấu cách liên tiếp).
  • Tự động trim khoảng trắng đầu/cuối.
3 Birthday Date picker Yes
  • Phải đủ 18 tuổi tính đến ngày hiện tại.
  • Không được trong tương lai.
  • Tính tuổi chính xác đến ngày, không chỉ năm.
4 Gender Radio Yes 3 lựa chọn: Male / Female / Other.
5 Email Text box Yes
  • Đúng định dạng email (local@domain.tld).
  • Tối đa 100 ký tự.
  • Không trùng với email của user khác trong hệ thống. Nếu giữ nguyên email cũ thì OK.
  • Email không phân biệt hoa thường khi check duplicate.
6 Save Button Validate tất cả các trường và lưu thông tin nếu hợp lệ.

📝 Message expected

Trường hợpMessage
Avatar sai định dạngAvatar must be an image file (jpg, png, gif)
Avatar quá lớnAvatar size must not exceed 2 MB
Name rỗngPlease input name
Name ngoài 2–50 ký tựName must be from 2 to 50 characters
Name có ký tự không hợp lệName can only contain letters and single spaces
Birthday rỗngPlease input birthday
Chưa đủ 18 tuổiYou must be at least 18 years old
Birthday trong tương laiBirthday cannot be in the future
Gender chưa chọnPlease select gender
Email rỗngPlease input email
Email sai định dạngPlease input valid email
Email đã tồn tại (user khác)Email is already used by another account
Lưu thành côngProfile updated successfully

🎯 Yêu cầu công việc

  1. Đọc kỹ Specification + Message expected.
  2. Thiết kế test case bao trùm:
    • Avatar: không upload (giữ default), file đúng (jpg/png), file sai (pdf/txt/exe), file >2MB.
    • Name: rỗng, 1 ký tự (dưới biên), 2 ký tự (đúng biên dưới), 50 ký tự (đúng biên trên), 51 ký tự (trên biên), có số "Tuan 99", có ký tự đặc biệt, có 2 space liên tiếp giữa từ.
    • Birthday — Boundary 18 tuổi:
      • Hôm nay là 2026-04-27. Đủ 18 tuổi cần sinh ngày ≤ 2008-04-27.
      • Test: 2008-04-26 (đủ 18, pass), 2008-04-27 (đúng đủ 18 hôm sinh nhật, pass), 2008-04-28 (chưa đủ 18 — thiếu 1 ngày, fail), 2008-12-31 (chưa đủ 18 — sinh nhật chưa tới, fail).
      • Đặc biệt chú ý case 2008-12-31 — năm OK nhưng ngày/tháng chưa tới sinh nhật → phải fail!
    • Email:
      • Giữ nguyên user@example.com → phải pass (không tính duplicate).
      • Đổi sang admin@itlearn.com → fail (duplicate).
      • Đổi sang ADMIN@itlearn.com hoặc Admin@ITLearn.com → phải fail (case-insensitive).
      • Format không hợp lệ: abc, abc@, abc@xyz (thiếu .tld), @xyz.com.
      • Hợp lệ: new.user@gmail.com, my+tag@example.org.
  3. Sang tab "🧪 Form thực hành" để thực hiện test.
  4. Ghi nhận các bug phát hiện được.
💡 Gợi ý kỹ thuật test:
  • Boundary Value Analysis cho Name length (1/2/50/51) và Birthday (xung quanh 2008-04-27).
  • Equivalence Partitioning cho file types Avatar (image valid / image invalid extension / non-image).
  • Decision Table cho các tổ hợp lỗi nhiều trường cùng lúc — quan sát thứ tự ưu tiên.
  • Domain knowledge: tính tuổi không chỉ là year — phải so sánh đầy đủ ngày + tháng + năm.
  • Case-insensitivity của email: chuẩn RFC 5321 nói local-part có thể case-sensitive nhưng domain-part case-insensitive. Trong thực tế các hệ thống đa số đều coi cả email là case-insensitive.
  • File size testing: sử dụng file đúng 2MB (boundary) và 2MB + 1 byte (vượt biên).
⚠️ Lưu ý: Đây là bài tổng hợp với nhiều loại validation. Bug được cài cắm tập trung vào: age calculation logic, email duplicate check, file upload validation và name validation. Hãy đọc kỹ spec từng dòng và đối chiếu chính xác.
🔐

Vui lòng đăng nhập để nộp bài.

Đăng nhập
🔐

Tab dành cho giảng viên

Tab này chứa danh sách các lỗi đã cài cắm trong form. Vui lòng nhập mã giảng viên để mở khóa. Mã sẽ ghi nhớ trong phiên làm việc — chỉ cần nhập 1 lần cho cả 3 bài.