Skip to content

Task 3-1: Integration Test - Admin Auth Flow

Phase: 3 - Testing Priority: Medium Depends on: task-1-1, task-1-2 Reference: SPEC.md — xem mục 5 (Acceptance Criteria: "Admin login với email/password → nhận JWT", "Unauthorized request → 401", "Admin với wrong role → 403") và mục 4 (ADM-F-01 Admin auth riêng)

Background

Test toàn bộ admin authentication: login, JWT validation, và rejection cases.

Test scenarios

Setup note: Tạo test class AdminAuthIntegrationTest (hoặc AuthControllerIntegrationTest) trong admin/src/test/java/. Sử dụng @SpringBootTest(webEnvironment = RANDOM_PORT) + TestRestTemplate hoặc MockMvc tùy pattern hiện tại của project. Cần seed ít nhất một admin account trong test database trước khi chạy test (dùng @BeforeEach với repository hoặc SQL script).

Happy path

  • [ ] POST /api/admin/auth/login với valid email/password → nhận JWT

    Verify response body chứa field token (hoặc accessToken) và HTTP status 200

  • [ ] JWT dùng được cho GET /api/admin/users → data returned

    Set Authorization: Bearer {token} header, verify HTTP 200 và response body không rỗng

  • [ ] JWT expired → 401

    Có thể mock thời gian hoặc dùng token đã expire sẵn (hardcoded) để test case này

Wrong credentials

  • [ ] Sai password → 401 INVALID_PASSWORD
  • [ ] Email không tồn tại → 401 ADMIN_NOT_FOUND
  • [ ] Admin bị disable → 401 ADMIN_DISABLED

    Với mỗi case, verify cả HTTP status (401) và error code trong response body

No auth

  • [ ] Request không có Authorization header → 401
  • [ ] Request với user JWT (không phải admin JWT) → 401/403

    User JWT khác admin JWT ở issuer hoặc claim — xem SecurityJwtService để biết cách phân biệt

JWT validation

  • [ ] Tampered JWT → 401

    Dùng valid JWT nhưng thay đổi payload (base64 decode → edit → encode lại), verify server reject

  • [ ] Expired JWT → 401

    Xem property admin.jwt.expiration trong config để biết TTL, hoặc generate token với expiry trong quá khứ

Verification / Acceptance Criteria

  • [ ] Tất cả test scenarios pass: Chạy AdminAuthIntegrationTest → 0 failures
  • [ ] Happy path trả JWT hợp lệ: Token decode được và chứa đúng adminId / roles claims
  • [ ] Wrong credentials đều trả đúng error code: Mỗi case 401 trả error code riêng biệt (không chỉ generic 401)
  • [ ] No-auth request bị reject trước khi chạm business logic: Verify bằng cách kiểm tra không có log [ADMIN_AUDIT] khi request không có token
  • [ ] User JWT bị reject: Gửi user token đến admin endpoint → không thể access (401 hoặc 403)
  • [ ] Test class tham khảo: AdminAuthIntegrationTest — đặt trong admin/src/test/java/.../controller/auth/

Files to Modify

(Test-only task — không modify production code, chỉ tạo/cập nhật test files)

  • admin/src/test/java/.../controller/auth/AdminAuthIntegrationTest.java (new hoặc update)