Files
goodgo-platform/docs/audits/TEST_COVERAGE_AUDIT.md
Ho Ngoc Hai 59272e9321 chore(docs): consolidate 22 audit files from root into docs/audits/
Root directory had accumulated audit/exploration markdown files cluttering
the project root. Moved all audit-related files to docs/audits/ with a
README.md index, and updated cross-references in K6_LOAD_TESTING_GUIDE.md
and README_FRONTEND_DOCS.md.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-10 23:16:00 +07:00

692 lines
28 KiB
Markdown

# GoodGo Platform AI - Test Coverage Audit Report
**Date:** April 10, 2026
**Repository:** /Users/velikho/Desktop/WORKING/goodgo-platform-ai/apps/api/src/modules/
---
## EXECUTIVE SUMMARY
This audit analyzes test coverage across three critical modules in the GoodGo Platform AI backend:
| Module | Source Files | Test Files | Coverage |
|--------|-------------|-----------|----------|
| **Listings** | 42 | 13 | 31% |
| **Auth** | 56 | 21 | 38% |
| **Search** | 22 | 10 | 45% |
| **TOTAL** | **120** | **44** | **37%** |
**Key Finding:** While test files exist for major handlers and domain entities, many critical infrastructure services, value objects, repositories, and presentation layer components lack test coverage.
---
## 1. LISTINGS MODULE AUDIT
**Location:** `apps/api/src/modules/listings/`
### Module Statistics
- **Total Source Files:** 42 (excluding index.ts files)
- **Total Test Files:** 13
- **Overall Coverage:** 31% (13 of 42 key files have tests)
### Existing Test Files (13 total)
#### Application Layer Tests (8 files)
-`create-listing.handler.spec.ts` → Tests CreateListingHandler
-`get-listing.handler.spec.ts` → Tests GetListingHandler
-`get-pending-moderation.handler.spec.ts` → Tests GetPendingModerationHandler
-`moderate-listing.handler.spec.ts` → Tests ModerateListingHandler
-`search-listings.handler.spec.ts` → Tests SearchListingsHandler
-`update-listing-status.handler.spec.ts` → Tests UpdateListingStatusHandler
-`upload-media.handler.spec.ts` → Tests UploadMediaHandler
-`price-validator.spec.ts` → Tests PrismaPriceValidator (Infrastructure)
#### Domain Layer Tests (5 files)
-`duplicate-detector.spec.ts` → Tests trigram similarity logic
-`listing-events.spec.ts` → Tests domain events
-`listing.entity.spec.ts` → Tests ListingEntity
-`property.entity.spec.ts` → Tests PropertyEntity & PropertyMediaEntity
-`value-objects.spec.ts` → Tests Address, GeoPoint, Price VOs
---
### UNTESTED SOURCE FILES - HIGH PRIORITY
#### 🔴 Domain Entities & Value Objects (NOT TESTED - 9 files)
These are critical for business logic:
**Domain Entities:**
1. `domain/entities/listing.entity.ts` ⚠️ **HAS TESTS** - listed.entity.spec.ts
2. `domain/entities/property.entity.ts` ⚠️ **HAS TESTS** - property.entity.spec.ts
3. `domain/entities/property-media.entity.ts` ⚠️ **HAS TESTS** - property.entity.spec.ts
**Domain Value Objects:**
4. `domain/value-objects/address.vo.ts` ⚠️ **HAS TESTS** - value-objects.spec.ts
5. `domain/value-objects/geo-point.vo.ts` ⚠️ **HAS TESTS** - value-objects.spec.ts
6. `domain/value-objects/price.vo.ts` ⚠️ **HAS TESTS** - value-objects.spec.ts
**Domain Events (MISSING TESTS - 4 files):**
7. `domain/events/listing-created.event.ts` - ⚠️ Has test coverage in listing-events.spec.ts
8. `domain/events/listing-approved.event.ts` - ✗ **NO TEST FILE**
9. `domain/events/listing-sold.event.ts` - ✗ **NO TEST FILE**
10. `domain/events/listing-status-changed.event.ts` - ✗ **NO TEST FILE**
**Domain Services (3 files):**
11. `domain/services/duplicate-detector.ts` ⚠️ **HAS TESTS** - duplicate-detector.spec.ts
12. `domain/services/moderation.service.ts` - ✗ **NO TEST FILE** (business logic interface)
13. `domain/services/price-validator.ts` ⚠️ **HAS TESTS** - price-validator.spec.ts
**Domain Repositories (INTERFACE - 3 files):**
14. `domain/repositories/listing.repository.ts` - ✗ **NO TEST** (abstract/interface only)
15. `domain/repositories/property.repository.ts` - ✗ **NO TEST** (abstract/interface only)
16. `domain/repositories/listing-read.dto.ts` - ✗ **NO TEST** (data transfer object)
---
#### 🔴 Application Handlers & Commands (PARTIALLY TESTED - 14 files)
**Commands (8 files):**
1. `application/commands/create-listing/create-listing.command.ts` - ✓ Tested via handler
2. `application/commands/create-listing/create-listing.handler.ts` - ✓ TESTED
3. `application/commands/moderate-listing/moderate-listing.command.ts` - ✓ Tested via handler
4. `application/commands/moderate-listing/moderate-listing.handler.ts` - ✓ TESTED
5. `application/commands/update-listing-status/update-listing-status.command.ts` - ✓ Tested via handler
6. `application/commands/update-listing-status/update-listing-status.handler.ts` - ✓ TESTED
7. `application/commands/upload-media/upload-media.command.ts` - ✓ Tested via handler
8. `application/commands/upload-media/upload-media.handler.ts` - ✓ TESTED
**Queries (6 files):**
9. `application/queries/get-listing/get-listing.query.ts` - ✓ Tested via handler
10. `application/queries/get-listing/get-listing.handler.ts` - ✓ TESTED
11. `application/queries/get-pending-moderation/get-pending-moderation.query.ts` - ✓ Tested via handler
12. `application/queries/get-pending-moderation/get-pending-moderation.handler.ts` - ✓ TESTED
13. `application/queries/search-listings/search-listings.query.ts` - ✓ Tested via handler
14. `application/queries/search-listings/search-listings.handler.ts` - ✓ TESTED
---
#### 🔴 Infrastructure Layer - Services & Repositories (MISSING TESTS - 6 files)
**Critical Infrastructure Services:**
1. `infrastructure/services/media-storage.service.ts` - ✗ **NO TEST FILE**
- Handles file upload/storage operations
- Should test: upload success, error handling, path resolution
2. `infrastructure/services/prisma-duplicate-detector.ts` - ✗ **NO TEST FILE**
- Implements domain duplicate detection interface
- Should test: database queries, similarity logic integration
3. `infrastructure/services/prisma-price-validator.ts` - ✗ **NO TEST FILE**
- Implements domain price validation interface
- Should test: price range queries, validation logic
**Infrastructure Repositories:**
4. `infrastructure/repositories/prisma-listing.repository.ts` - ✗ **NO TEST FILE**
- Primary data access for listings
- Should test: CRUD operations, complex queries
5. `infrastructure/repositories/prisma-property.repository.ts` - ✗ **NO TEST FILE**
- Data access for properties
- Should test: property creation, media operations
6. `infrastructure/repositories/listing-read.queries.ts` - ✗ **NO TEST FILE**
- Complex read queries for listing features
- Should test: query building, filtering logic
---
#### 🔴 Presentation Layer (MISSING TESTS - 6 files)
**Controllers:**
1. `presentation/controllers/listings.controller.ts` - ✗ **NO TEST FILE**
- Main API endpoint handler
- Should test: request routing, response formatting
**DTOs/Data Transfer Objects:**
2. `presentation/dto/create-listing.dto.ts` - ✗ **NO TEST FILE**
3. `presentation/dto/moderate-listing.dto.ts` - ✗ **NO TEST FILE**
4. `presentation/dto/search-listings.dto.ts` - ✗ **NO TEST FILE**
5. `presentation/dto/update-listing-status.dto.ts` - ✗ **NO TEST FILE**
**Module Definition:**
6. `listings.module.ts` - ✗ **NO TEST FILE** (NestJS module configuration)
---
### PRIORITY RANKING FOR NEW TESTS
**TIER 1 - CRITICAL (Business Logic, Must Test First):**
1. `infrastructure/services/prisma-duplicate-detector.ts` - Core duplicate detection
2. `infrastructure/services/prisma-price-validator.ts` - Price validation logic
3. `infrastructure/repositories/prisma-listing.repository.ts` - Primary data access layer
4. `domain/services/moderation.service.ts` - Moderation business rules
**TIER 2 - HIGH (Infrastructure, Data Access):**
5. `infrastructure/repositories/prisma-property.repository.ts` - Property data access
6. `infrastructure/repositories/listing-read.queries.ts` - Read query optimization
7. `infrastructure/services/media-storage.service.ts` - File handling
**TIER 3 - MEDIUM (Presentation, DTOs):**
8. `presentation/controllers/listings.controller.ts` - HTTP endpoints
9. `presentation/dto/create-listing.dto.ts` - Input validation
10. `presentation/dto/moderate-listing.dto.ts` - Input validation
11. `presentation/dto/search-listings.dto.ts` - Input validation
12. `presentation/dto/update-listing-status.dto.ts` - Input validation
**TIER 4 - LOW (Configuration, Events):**
13. `listings.module.ts` - Module configuration
14. `domain/events/listing-approved.event.ts` - Event models
15. `domain/events/listing-sold.event.ts` - Event models
16. `domain/events/listing-status-changed.event.ts` - Event models
---
---
## 2. AUTH MODULE AUDIT
**Location:** `apps/api/src/modules/auth/`
### Module Statistics
- **Total Source Files:** 56 (excluding index.ts files)
- **Total Test Files:** 21
- **Overall Coverage:** 38% (21 of 56 files have comprehensive tests)
### Existing Test Files (21 total)
#### Application Layer Tests (12 files)
-`cancel-user-deletion.handler.spec.ts` → CancelUserDeletionHandler
-`export-user-data.handler.spec.ts` → ExportUserDataHandler
-`force-delete-user.handler.spec.ts` → ForceDeleteUserHandler
-`get-agent-by-user-id.handler.spec.ts` → GetAgentByUserIdHandler
-`get-profile.handler.spec.ts` → GetProfileHandler
-`login-user.handler.spec.ts` → LoginUserHandler
-`process-scheduled-deletions.handler.spec.ts` → ProcessScheduledDeletionsHandler
-`refresh-token.handler.spec.ts` → RefreshTokenHandler
-`register-user.handler.spec.ts` → RegisterUserHandler
-`request-user-deletion.handler.spec.ts` → RequestUserDeletionHandler
-`verify-kyc.handler.spec.ts` → VerifyKycHandler
#### Infrastructure Layer Tests (4 files)
-`google-oauth.strategy.spec.ts` → GoogleOAuthStrategy
-`oauth.service.spec.ts` → OAuthService
-`token.service.spec.ts` → TokenService
-`zalo-oauth.strategy.spec.ts` → ZaloOAuthStrategy
#### Domain Layer Tests (5 files)
-`auth-events.spec.ts` → Domain events (UserRegistered, etc.)
-`email.vo.spec.ts` → Email value object
-`hashed-password.vo.spec.ts` → HashedPassword value object
-`phone.vo.spec.ts` → Phone value object
-`user.entity.spec.ts` → UserEntity
#### Root Level Tests (1 file)
-`auth.integration.spec.ts` → Integration tests for auth controller
---
### UNTESTED SOURCE FILES - HIGH PRIORITY
#### 🔴 Domain Entities & Value Objects
**Domain Entities (1 file):**
1. `domain/entities/user.entity.ts` ⚠️ **HAS TESTS** - user.entity.spec.ts
**Domain Value Objects (3 files):**
2. `domain/value-objects/email.vo.ts` ⚠️ **HAS TESTS** - email.vo.spec.ts
3. `domain/value-objects/hashed-password.vo.ts` ⚠️ **HAS TESTS** - hashed-password.vo.spec.ts
4. `domain/value-objects/phone.vo.ts` ⚠️ **HAS TESTS** - phone.vo.spec.ts
**Domain Events (4 files - All Missing Individual Tests):**
5. `domain/events/user-registered.event.ts` ⚠️ **HAS TESTS** - auth-events.spec.ts
6. `domain/events/user-deactivated.event.ts` ⚠️ **HAS TESTS** - auth-events.spec.ts
7. `domain/events/user-kyc-updated.event.ts` ⚠️ **HAS TESTS** - auth-events.spec.ts
8. `domain/events/agent-verified.event.ts` ⚠️ **HAS TESTS** - auth-events.spec.ts
**Domain Repositories (2 files - Abstract Interfaces):**
9. `domain/repositories/user.repository.ts` - ✗ **NO TEST** (interface/contract only)
10. `domain/repositories/refresh-token.repository.ts` - ✗ **NO TEST** (interface/contract only)
---
#### 🔴 Application Handlers & Commands (PARTIALLY TESTED - 20 files)
**Commands (18 files):**
1-18. All command files HAVE corresponding handler tests:
- `application/commands/cancel-user-deletion/*` ✓ TESTED
- `application/commands/export-user-data/*` ✓ TESTED
- `application/commands/force-delete-user/*` ✓ TESTED
- `application/commands/login-user/*` ✓ TESTED
- `application/commands/process-scheduled-deletions/*` ✓ TESTED
- `application/commands/refresh-token/*` ✓ TESTED
- `application/commands/register-user/*` ✓ TESTED
- `application/commands/request-user-deletion/*` ✓ TESTED
- `application/commands/verify-kyc/*` ✓ TESTED
**Queries (4 files):**
19. `application/queries/get-profile/get-profile.query.ts` ✓ Tested via handler
20. `application/queries/get-profile/get-profile.handler.ts` ✓ TESTED
21. `application/queries/get-agent-by-user-id/get-agent-by-user-id.query.ts` ✓ Tested via handler
22. `application/queries/get-agent-by-user-id/get-agent-by-user-id.handler.ts` ✓ TESTED
---
#### 🔴 Infrastructure Layer - Services & Repositories (MISSING TESTS - 6 files)
**Infrastructure Services (2 files):**
1. `infrastructure/services/oauth.service.ts` ⚠️ **HAS TESTS** - oauth.service.spec.ts
2. `infrastructure/services/token.service.ts` ⚠️ **HAS TESTS** - token.service.spec.ts
**Infrastructure Strategies (4 files - Missing Tests):**
3. `infrastructure/strategies/google-oauth.strategy.ts` ⚠️ **HAS TESTS** - google-oauth.strategy.spec.ts
4. `infrastructure/strategies/zalo-oauth.strategy.ts` ⚠️ **HAS TESTS** - zalo-oauth.strategy.spec.ts
5. `infrastructure/strategies/jwt.strategy.ts` - ✗ **NO TEST FILE**
- JWT authentication strategy
- Should test: token validation, user extraction
6. `infrastructure/strategies/local.strategy.ts` - ✗ **NO TEST FILE**
- Local (username/password) authentication
- Should test: credential validation, user lookup
**Infrastructure Repositories (2 files):**
7. `infrastructure/repositories/prisma-user.repository.ts` - ✗ **NO TEST FILE**
- Primary user data access
- Should test: CRUD operations, user lookup queries
8. `infrastructure/repositories/prisma-refresh-token.repository.ts` - ✗ **NO TEST FILE**
- Refresh token persistence layer
- Should test: token creation, validation, rotation
---
#### 🔴 Presentation Layer (MISSING TESTS - 14 files)
**Controllers (3 files):**
1. `presentation/controllers/auth.controller.ts` - ✗ **NO TEST FILE** (covered by integration test)
2. `presentation/controllers/oauth.controller.ts` - ✗ **NO TEST FILE**
3. `presentation/controllers/user-data.controller.ts` - ✗ **NO TEST FILE**
**Guards (4 files - Critical for Security):**
4. `presentation/guards/jwt-auth.guard.ts` - ✗ **NO TEST FILE**
- JWT token verification guard
- **CRITICAL:** Should test: valid tokens, expired tokens, invalid signatures
5. `presentation/guards/local-auth.guard.ts` - ✗ **NO TEST FILE**
- Local authentication guard
- Should test: authentication flow, user verification
6. `presentation/guards/google-oauth.guard.ts` - ✗ **NO TEST FILE**
- OAuth guard for Google
- Should test: OAuth callback, user profile retrieval
7. `presentation/guards/roles.guard.ts` - ✗ **NO TEST FILE**
- Role-based access control
- **CRITICAL:** Should test: admin access, user access, denied access
**Decorators (2 files):**
8. `presentation/decorators/current-user.decorator.ts` - ✗ **NO TEST FILE**
- Extracts current user from request
- Should test: decorator application, user extraction
9. `presentation/decorators/roles.decorator.ts` - ✗ **NO TEST FILE**
- Marks routes with required roles
- Should test: decorator metadata setting
**DTOs (6 files):**
10. `presentation/dto/login.dto.ts` - ✗ **NO TEST FILE**
11. `presentation/dto/register.dto.ts` - ✗ **NO TEST FILE**
12. `presentation/dto/refresh-token.dto.ts` - ✗ **NO TEST FILE**
13. `presentation/dto/verify-kyc.dto.ts` - ✗ **NO TEST FILE**
14. `presentation/dto/force-delete-user.dto.ts` - ✗ **NO TEST FILE**
15. `presentation/dto/request-deletion.dto.ts` - ✗ **NO TEST FILE**
**Module Definition:**
16. `auth.module.ts` - ✗ **NO TEST FILE** (NestJS module configuration)
---
### PRIORITY RANKING FOR NEW TESTS
**TIER 1 - CRITICAL (Security-Critical, Must Test First):**
1. `presentation/guards/jwt-auth.guard.ts` - Token validation security
2. `presentation/guards/roles.guard.ts` - Authorization enforcement
3. `infrastructure/repositories/prisma-user.repository.ts` - User data access
4. `infrastructure/repositories/prisma-refresh-token.repository.ts` - Token management
**TIER 2 - HIGH (Authentication Strategies):**
5. `infrastructure/strategies/jwt.strategy.ts` - JWT strategy
6. `infrastructure/strategies/local.strategy.ts` - Local auth strategy
7. `presentation/guards/local-auth.guard.ts` - Local auth guard
8. `presentation/guards/google-oauth.guard.ts` - OAuth guard
**TIER 3 - MEDIUM (Presentation & DTOs):**
9. `presentation/controllers/auth.controller.ts` - Main auth controller
10. `presentation/controllers/oauth.controller.ts` - OAuth endpoints
11. `presentation/controllers/user-data.controller.ts` - User data endpoints
12. `presentation/decorators/current-user.decorator.ts` - Current user extraction
13. `presentation/decorators/roles.decorator.ts` - Role marking
14. `presentation/dto/login.dto.ts` - Login input validation
15. `presentation/dto/register.dto.ts` - Registration input validation
16. `presentation/dto/refresh-token.dto.ts` - Token refresh validation
**TIER 4 - LOW (Configuration):**
17. `auth.module.ts` - Module configuration
---
---
## 3. SEARCH MODULE AUDIT
**Location:** `apps/api/src/modules/search/`
### Module Statistics
- **Total Source Files:** 22 (excluding index.ts files)
- **Total Test Files:** 10
- **Overall Coverage:** 45% (10 of 22 files have tests - HIGHEST of three modules!)
### Existing Test Files (10 total)
#### Application Layer Tests (4 files)
-`geo-search.handler.spec.ts` → GeoSearchHandler
-`reindex-all.handler.spec.ts` → ReindexAllHandler
-`search-properties.handler.spec.ts` → SearchPropertiesHandler
-`sync-listing.handler.spec.ts` → SyncListingHandler
#### Infrastructure Layer Tests (4 files)
-`listing-approved.handler.spec.ts` → ListingApprovedEventHandler
-`listing-indexer.service.spec.ts` → ListingIndexerService
-`resilient-search.repository.spec.ts` → ResilientSearchRepository
-`typesense-search.repository.spec.ts` → TypesenseSearchRepository
#### Domain Layer Tests (1 file)
-`search-domain.spec.ts` → SearchFilter & GeoFilter value objects
#### Presentation Layer Tests (1 file)
-`search.controller.spec.ts` → SearchController
---
### UNTESTED SOURCE FILES - HIGH PRIORITY
#### 🔴 Domain Layer (3 files)
**Repositories (1 file - Abstract Interface):**
1. `domain/repositories/search.repository.ts` - ✗ **NO TEST** (interface/contract only)
- Defines search repository contract
- Not critical to test (abstract interface)
**Value Objects (2 files - Missing Tests):**
2. `domain/value-objects/search-filter.vo.ts` ⚠️ **HAS TESTS** - search-domain.spec.ts
3. `domain/value-objects/geo-filter.vo.ts` ⚠️ **HAS TESTS** - search-domain.spec.ts
---
#### 🔴 Application Handlers & Commands (4 files)
**Commands (4 files - All Tested):**
1. `application/commands/reindex-all/reindex-all.command.ts` ✓ Tested via handler
2. `application/commands/reindex-all/reindex-all.handler.ts` ✓ TESTED
3. `application/commands/sync-listing/sync-listing.command.ts` ✓ Tested via handler
4. `application/commands/sync-listing/sync-listing.handler.ts` ✓ TESTED
**Queries (4 files - All Tested):**
5. `application/queries/geo-search/geo-search.query.ts` ✓ Tested via handler
6. `application/queries/geo-search/geo-search.handler.ts` ✓ TESTED
7. `application/queries/search-properties/search-properties.query.ts` ✓ Tested via handler
8. `application/queries/search-properties/search-properties.handler.ts` ✓ TESTED
---
#### 🔴 Infrastructure Layer - Services & Repositories (5 files)
**Infrastructure Services (3 files - Partially Tested):**
1. `infrastructure/services/listing-indexer.service.ts` ⚠️ **HAS TESTS** - listing-indexer.service.spec.ts
2. `infrastructure/services/resilient-search.repository.ts` ⚠️ **HAS TESTS** - resilient-search.repository.spec.ts
3. `infrastructure/services/typesense-search.repository.ts` ⚠️ **HAS TESTS** - typesense-search.repository.spec.ts
**Missing Infrastructure Services:**
4. `infrastructure/services/typesense-client.service.ts` - ✗ **NO TEST FILE**
- Direct Typesense client wrapper
- Should test: client initialization, connection, error handling
5. `infrastructure/services/postgres-search.repository.ts` - ✗ **NO TEST FILE**
- PostgreSQL fallback search implementation
- Should test: SQL query building, fallback logic
---
#### 🔴 Infrastructure Event Handlers (2 files)
**Event Handlers (Missing Tests):**
1. `infrastructure/event-handlers/listing-approved.handler.ts` ⚠️ **HAS TESTS** - listing-approved.handler.spec.ts
2. `infrastructure/event-handlers/listing-status-changed.handler.ts` - ✗ **NO TEST FILE**
- Handles listing status change events
- Should test: event processing, search index updates
---
#### 🔴 Presentation Layer (3 files)
**Controllers (1 file - Already Tested!):**
1. `presentation/controllers/search.controller.ts` ⚠️ **HAS TESTS** - search.controller.spec.ts
**DTOs (2 files - Missing Tests):**
2. `presentation/dto/geo-search.dto.ts` - ✗ **NO TEST FILE**
- Geographic search input validation
- Should test: geo-coordinate validation, radius validation
3. `presentation/dto/search-properties.dto.ts` - ✗ **NO TEST FILE**
- Property search input validation
- Should test: filter validation, pagination validation
**Module Definition:**
4. `search.module.ts` - ✗ **NO TEST FILE** (NestJS module configuration)
---
### PRIORITY RANKING FOR NEW TESTS
**TIER 1 - CRITICAL (Core Search Functionality):**
1. `infrastructure/services/typesense-client.service.ts` - Typesense integration
2. `infrastructure/services/postgres-search.repository.ts` - Fallback search
**TIER 2 - HIGH (Event Handling):**
3. `infrastructure/event-handlers/listing-status-changed.handler.ts` - Status change indexing
**TIER 3 - MEDIUM (Presentation & DTOs):**
4. `presentation/dto/geo-search.dto.ts` - Geographic search validation
5. `presentation/dto/search-properties.dto.ts` - Property search validation
**TIER 4 - LOW (Configuration):**
6. `search.module.ts` - Module configuration
---
---
## CONSOLIDATED TEST GAP ANALYSIS
### Critical Files MISSING Tests (Security & Business Logic Priority)
**AUTH Module - SECURITY CRITICAL:**
1. ⚠️ `presentation/guards/jwt-auth.guard.ts` - **MUST TEST** (token validation)
2. ⚠️ `presentation/guards/roles.guard.ts` - **MUST TEST** (authorization)
3. ⚠️ `infrastructure/repositories/prisma-user.repository.ts` - **MUST TEST** (data access)
4. ⚠️ `infrastructure/strategies/jwt.strategy.ts` - **MUST TEST** (authentication)
**LISTINGS Module - BUSINESS LOGIC CRITICAL:**
1. ⚠️ `infrastructure/services/prisma-duplicate-detector.ts` - Duplicate detection
2. ⚠️ `infrastructure/services/prisma-price-validator.ts` - Price validation
3. ⚠️ `infrastructure/repositories/prisma-listing.repository.ts` - Listing data access
4. ⚠️ `domain/services/moderation.service.ts` - Moderation logic
**SEARCH Module - INTEGRATION CRITICAL:**
1. ⚠️ `infrastructure/services/typesense-client.service.ts` - Search engine integration
2. ⚠️ `infrastructure/services/postgres-search.repository.ts` - Fallback search
---
### Summary of Test Coverage by Layer
| Layer | Module | Files | Tests | Coverage |
|-------|--------|-------|-------|----------|
| **Domain/Entities** | Listings | 3 | 3 | 100% ✓ |
| **Domain/Entities** | Auth | 1 | 1 | 100% ✓ |
| **Domain/Value Objects** | Listings | 3 | 3 | 100% ✓ |
| **Domain/Value Objects** | Auth | 3 | 3 | 100% ✓ |
| **Domain/Value Objects** | Search | 2 | 2 | 100% ✓ |
| **Domain/Events** | Listings | 4 | 1 | 25% |
| **Domain/Events** | Auth | 4 | 1 | 25% |
| **Domain/Services** | Listings | 3 | 2 | 67% |
| **Domain/Repositories** | Listings | 3 | 0 | 0% |
| **Domain/Repositories** | Auth | 2 | 0 | 0% |
| **Domain/Repositories** | Search | 1 | 0 | 0% |
| **Application/Handlers** | Listings | 8 | 8 | 100% ✓ |
| **Application/Handlers** | Auth | 12 | 12 | 100% ✓ |
| **Application/Handlers** | Search | 8 | 8 | 100% ✓ |
| **Infrastructure/Repositories** | Listings | 3 | 0 | 0% |
| **Infrastructure/Repositories** | Auth | 2 | 0 | 0% |
| **Infrastructure/Services** | Listings | 3 | 1 | 33% |
| **Infrastructure/Services** | Auth | 2 | 2 | 100% ✓ |
| **Infrastructure/Services** | Search | 5 | 3 | 60% |
| **Infrastructure/Strategies** | Auth | 4 | 2 | 50% |
| **Infrastructure/Event Handlers** | Search | 2 | 1 | 50% |
| **Presentation/Controllers** | Listings | 1 | 0 | 0% |
| **Presentation/Controllers** | Auth | 3 | 0 | 0% |
| **Presentation/Controllers** | Search | 1 | 1 | 100% ✓ |
| **Presentation/Guards** | Auth | 4 | 0 | 0% |
| **Presentation/Decorators** | Auth | 2 | 0 | 0% |
| **Presentation/DTOs** | All | 17 | 0 | 0% |
---
## RECOMMENDATIONS
### Immediate Actions (Week 1)
1. **Create 5 critical tests for AUTH module:**
- `presentation/guards/jwt-auth.guard.spec.ts`
- `presentation/guards/roles.guard.spec.ts`
- `infrastructure/repositories/prisma-user.repository.spec.ts`
- `infrastructure/strategies/jwt.strategy.spec.ts`
- `infrastructure/strategies/local.strategy.spec.ts`
2. **Create 4 critical tests for LISTINGS module:**
- `infrastructure/repositories/prisma-listing.repository.spec.ts`
- `infrastructure/services/prisma-duplicate-detector.spec.ts`
- `infrastructure/services/prisma-price-validator.spec.ts`
- `domain/services/moderation.service.spec.ts`
### Short Term (Week 2-3)
3. **Infrastructure Repository Tests:**
- All Prisma repository implementations
- Search repository implementations
4. **Integration/Event Tests:**
- Event handler tests for all domain events
- Event publishing verification
5. **Presentation Layer Tests:**
- All controllers
- All guards and decorators
- DTO validation tests
### Medium Term (Week 4+)
6. **End-to-End Tests:**
- Full user flow tests (registration → authentication → data access)
- Listing lifecycle tests (creation → moderation → publishing)
- Search feature tests (indexing → retrieval)
---
## Test Files Quick Reference
### Listings Test Files (13 total)
```
application/__tests__/
├── create-listing.handler.spec.ts
├── get-listing.handler.spec.ts
├── get-pending-moderation.handler.spec.ts
├── moderate-listing.handler.spec.ts
├── price-validator.spec.ts
├── search-listings.handler.spec.ts
├── update-listing-status.handler.spec.ts
└── upload-media.handler.spec.ts
domain/__tests__/
├── duplicate-detector.spec.ts
├── listing-events.spec.ts
├── listing.entity.spec.ts
├── property.entity.spec.ts
└── value-objects.spec.ts
```
### Auth Test Files (21 total)
```
application/__tests__/ (12 files)
├── cancel-user-deletion.handler.spec.ts
├── export-user-data.handler.spec.ts
├── force-delete-user.handler.spec.ts
├── get-agent-by-user-id.handler.spec.ts
├── get-profile.handler.spec.ts
├── login-user.handler.spec.ts
├── process-scheduled-deletions.handler.spec.ts
├── refresh-token.handler.spec.ts
├── register-user.handler.spec.ts
├── request-user-deletion.handler.spec.ts
└── verify-kyc.handler.spec.ts
infrastructure/__tests__/ (4 files)
├── google-oauth.strategy.spec.ts
├── oauth.service.spec.ts
├── token.service.spec.ts
└── zalo-oauth.strategy.spec.ts
domain/__tests__/ (5 files)
├── auth-events.spec.ts
├── email.vo.spec.ts
├── hashed-password.vo.spec.ts
├── phone.vo.spec.ts
└── user.entity.spec.ts
__tests__/
└── auth.integration.spec.ts
```
### Search Test Files (10 total)
```
application/__tests__/ (4 files)
├── geo-search.handler.spec.ts
├── reindex-all.handler.spec.ts
├── search-properties.handler.spec.ts
└── sync-listing.handler.spec.ts
infrastructure/__tests__/ (4 files)
├── listing-approved.handler.spec.ts
├── listing-indexer.service.spec.ts
├── resilient-search.repository.spec.ts
└── typesense-search.repository.spec.ts
domain/__tests__/
└── search-domain.spec.ts
presentation/__tests__/
└── search.controller.spec.ts
```
---
## Conclusion
The GoodGo Platform AI monorepo has a **37% test coverage** across the three critical modules examined, with significant gaps in:
- **Security-critical guards and strategies (AUTH)**
- **Infrastructure data access layers (all modules)**
- **Presentation layer controllers and DTOs (all modules)**
- **Domain event models (LISTINGS & AUTH)**
The **Search module** shows the strongest test coverage at **45%**, with most handlers and services tested. The **Listings and Auth modules** need immediate attention to the security and business logic components identified in Tier 1 recommendations.