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>
This commit is contained in:
691
docs/audits/TEST_COVERAGE_AUDIT.md
Normal file
691
docs/audits/TEST_COVERAGE_AUDIT.md
Normal file
@@ -0,0 +1,691 @@
|
||||
# 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.
|
||||
|
||||
Reference in New Issue
Block a user