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ặcAuthControllerIntegrationTest) trongadmin/src/test/java/. Sử dụng@SpringBootTest(webEnvironment = RANDOM_PORT)+TestRestTemplatehoặcMockMvctù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@BeforeEachvới repository hoặc SQL script).
Happy path
- [ ]
POST /api/admin/auth/loginvới valid email/password → nhận JWTVerify response body chứa field
token(hoặcaccessToken) và HTTP status 200 - [ ] JWT dùng được cho
GET /api/admin/users→ data returnedSet
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_DISABLEDVớ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.expirationtrong 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/rolesclaims - [ ] 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 trongadmin/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)