Files
goodgo-platform/docs/audits/QUICK_REFERENCE_ROOT.md
Ho Ngoc Hai 11f2bf26e6
Some checks failed
CI / Lint → Typecheck → Test → Build (22) (push) Failing after 29s
CI / E2E Tests (push) Has been skipped
CodeQL Analysis / CodeQL (javascript-typescript) (push) Failing after 2m42s
Deploy / Build Web Image (push) Failing after 27s
Deploy / Build AI Services Image (push) Failing after 29s
E2E Tests / Playwright E2E (push) Failing after 43s
Deploy / Build API Image (push) Failing after 1m31s
Security Scanning / Dependency Audit (pnpm) (push) Failing after 6s
Security Scanning / Trivy Scan — API Image (push) Failing after 5m35s
Security Scanning / Trivy Scan — AI Services Image (push) Failing after 3m45s
Deploy / Deploy to Staging (push) Has been skipped
Deploy / Smoke Test Staging (push) Has been skipped
Deploy / Deploy to Production (push) Has been skipped
Deploy / Smoke Test Production (push) Has been skipped
Deploy / Rollback Staging (push) Has been skipped
Deploy / Rollback Production (push) Has been skipped
Security Scanning / Trivy Scan — Web Image (push) Failing after 13m51s
Security Scanning / Trivy Filesystem Scan (push) Failing after 14m46s
Security Scanning / Security Gate (push) Has been cancelled
chore: update project documentation, audit reports, and initialize IDE configuration files
2026-04-19 03:12:54 +07:00

90 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🎯 THAM KHẢO NHANH: 3 Tệp Test Còn Thiếu
## Ưu tiên: CAO - Tất cả đều cần viết test
### 1⃣ reject-listing.handler.spec.ts
**Vị trí:** `apps/api/src/modules/admin/application/__tests__/`
**Mẫu tham khảo:** `approve-listing.handler.spec.ts`
**Phạm vi test cần có:**
- ✅ Trường hợp thành công: Từ chối listing ở trạng thái PENDING_REVIEW thành công
- ✅ Lỗi: NotFoundException khi listing không tồn tại
- ✅ Lỗi: ValidationException khi trạng thái listing không hợp lệ
- ✅ Xác minh: listingRepo.update() được gọi đúng một lần
- ✅ Xác minh: ListingRejectedEvent được phát với dữ liệu chính xác
**Code quan trọng:**
- Command: RejectListingCommand(listingId, adminId, reason)
- Handler: RejectListingHandler
- Event: ListingRejectedEvent
- Kết quả trả về: { listingId, status: 'REJECTED', message }
---
### 2⃣ get-revenue-stats.handler.spec.ts
**Vị trí:** `apps/api/src/modules/admin/application/__tests__/`
**Mẫu tham khảo:** `get-dashboard-stats.handler.spec.ts`
**Phạm vi test cần có:**
- ✅ Query trả về RevenueStatsItem[] từ repository
- ✅ Xác minh: adminQueryRepo.getRevenueStats() được gọi với startDate, endDate, groupBy
- ✅ Hỗ trợ cả hai giá trị 'day' và 'month' cho groupBy
- ✅ Mặc định groupBy là 'month'
- ✅ Xử lý kết quả rỗng (mảng trống)
**Code quan trọng:**
- Query: GetRevenueStatsQuery(startDate, endDate, groupBy='month')
- Handler: GetRevenueStatsHandler
- Trả về: RevenueStatsItem[] với { period, totalRevenue, subscriptionRevenue, listingFeeRevenue, featuredListingRevenue, transactionCount }
---
### 3⃣ user-deactivated.listener.spec.ts
**Vị trí:** `apps/api/src/modules/admin/application/__tests__/`
**Mẫu tham khảo:** `user-banned.listener.spec.ts`
**Phạm vi test cần có:**
- ✅ Event listener xử lý sự kiện 'user.deactivated'
- ✅ Hết hạn các listing có trạng thái ACTIVE hoặc PENDING_REVIEW
- ✅ Chỉ cập nhật listing của người dùng bị vô hiệu hóa
- ✅ Ghi log ban đầu khi xử lý và kết quả
- ✅ Xử lý trường hợp 0 listing được cập nhật
- ✅ Xử lý trường hợp nhiều listing được cập nhật
**Code quan trọng:**
- Listener: UserDeactivatedListener
- Event: UserDeactivatedEvent (async: true)
- Hành động: prisma.listing.updateMany() với điều kiện sellerId khớp & status thuộc [ACTIVE, PENDING_REVIEW]
- Ghi log: Khởi tạo + số lượng kết quả
---
## Mẫu Thiết Lập Mock
### Dành cho Handler (Command):
```typescript
mockListingRepo = { findById, update, ... };
mockEventBus = { publish };
handler = new RejectListingHandler(mockListingRepo, mockEventBus);
```
### Dành cho Query Handler:
```typescript
mockAdminQueryRepo = { getRevenueStats };
handler = new GetRevenueStatsHandler(mockAdminQueryRepo);
```
### Dành cho Listener:
```typescript
mockPrisma = { listing: { updateMany }, user: { findUnique } };
mockLogger = { log };
listener = new UserDeactivatedListener(mockPrisma, mockLogger);
```
---
## Danh Sách Kiểm Tra Test
- [ ] reject-listing.handler.spec.ts đã được tạo
- [ ] get-revenue-stats.handler.spec.ts đã được tạo
- [ ] user-deactivated.listener.spec.ts đã được tạo
- [ ] Tất cả test đều vượt qua: `npm test admin`
- [ ] Báo cáo độ phủ hiển thị màu xanh cho cả 3 tệp