# 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.