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>
692 lines
28 KiB
Markdown
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.
|
|
|