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

28 KiB

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
  1. infrastructure/repositories/prisma-property.repository.ts - ✗ NO TEST FILE

    • Data access for properties
    • Should test: property creation, media operations
  2. 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
  1. 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
  1. 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
  1. presentation/guards/local-auth.guard.ts - ✗ NO TEST FILE

    • Local authentication guard
    • Should test: authentication flow, user verification
  2. presentation/guards/google-oauth.guard.ts - ✗ NO TEST FILE

    • OAuth guard for Google
    • Should test: OAuth callback, user profile retrieval
  3. 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
  1. 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
  1. 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
  1. 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)

  1. Infrastructure Repository Tests:

    • All Prisma repository implementations
    • Search repository implementations
  2. Integration/Event Tests:

    • Event handler tests for all domain events
    • Event publishing verification
  3. Presentation Layer Tests:

    • All controllers
    • All guards and decorators
    • DTO validation tests

Medium Term (Week 4+)

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