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>
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:
domain/entities/listing.entity.ts⚠️ HAS TESTS - listed.entity.spec.tsdomain/entities/property.entity.ts⚠️ HAS TESTS - property.entity.spec.tsdomain/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):
application/commands/create-listing/create-listing.command.ts- ✓ Tested via handlerapplication/commands/create-listing/create-listing.handler.ts- ✓ TESTEDapplication/commands/moderate-listing/moderate-listing.command.ts- ✓ Tested via handlerapplication/commands/moderate-listing/moderate-listing.handler.ts- ✓ TESTEDapplication/commands/update-listing-status/update-listing-status.command.ts- ✓ Tested via handlerapplication/commands/update-listing-status/update-listing-status.handler.ts- ✓ TESTEDapplication/commands/upload-media/upload-media.command.ts- ✓ Tested via handlerapplication/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:
-
infrastructure/services/media-storage.service.ts- ✗ NO TEST FILE- Handles file upload/storage operations
- Should test: upload success, error handling, path resolution
-
infrastructure/services/prisma-duplicate-detector.ts- ✗ NO TEST FILE- Implements domain duplicate detection interface
- Should test: database queries, similarity logic integration
-
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
-
infrastructure/repositories/prisma-property.repository.ts- ✗ NO TEST FILE- Data access for properties
- Should test: property creation, media operations
-
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:
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):
infrastructure/services/prisma-duplicate-detector.ts- Core duplicate detectioninfrastructure/services/prisma-price-validator.ts- Price validation logicinfrastructure/repositories/prisma-listing.repository.ts- Primary data access layerdomain/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):
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/*✓ TESTEDapplication/commands/export-user-data/*✓ TESTEDapplication/commands/force-delete-user/*✓ TESTEDapplication/commands/login-user/*✓ TESTEDapplication/commands/process-scheduled-deletions/*✓ TESTEDapplication/commands/refresh-token/*✓ TESTEDapplication/commands/register-user/*✓ TESTEDapplication/commands/request-user-deletion/*✓ TESTEDapplication/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):
infrastructure/services/oauth.service.ts⚠️ HAS TESTS - oauth.service.spec.tsinfrastructure/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
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
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):
presentation/controllers/auth.controller.ts- ✗ NO TEST FILE (covered by integration test)presentation/controllers/oauth.controller.ts- ✗ NO TEST FILEpresentation/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
-
presentation/guards/local-auth.guard.ts- ✗ NO TEST FILE- Local authentication guard
- Should test: authentication flow, user verification
-
presentation/guards/google-oauth.guard.ts- ✗ NO TEST FILE- OAuth guard for Google
- Should test: OAuth callback, user profile retrieval
-
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
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):
presentation/guards/jwt-auth.guard.ts- Token validation securitypresentation/guards/roles.guard.ts- Authorization enforcementinfrastructure/repositories/prisma-user.repository.ts- User data accessinfrastructure/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):
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):
application/commands/reindex-all/reindex-all.command.ts✓ Tested via handlerapplication/commands/reindex-all/reindex-all.handler.ts✓ TESTEDapplication/commands/sync-listing/sync-listing.command.ts✓ Tested via handlerapplication/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):
infrastructure/services/listing-indexer.service.ts⚠️ HAS TESTS - listing-indexer.service.spec.tsinfrastructure/services/resilient-search.repository.ts⚠️ HAS TESTS - resilient-search.repository.spec.tsinfrastructure/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
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):
infrastructure/event-handlers/listing-approved.handler.ts⚠️ HAS TESTS - listing-approved.handler.spec.tsinfrastructure/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!):
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
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):
infrastructure/services/typesense-client.service.ts- Typesense integrationinfrastructure/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:
- ⚠️
presentation/guards/jwt-auth.guard.ts- MUST TEST (token validation) - ⚠️
presentation/guards/roles.guard.ts- MUST TEST (authorization) - ⚠️
infrastructure/repositories/prisma-user.repository.ts- MUST TEST (data access) - ⚠️
infrastructure/strategies/jwt.strategy.ts- MUST TEST (authentication)
LISTINGS Module - BUSINESS LOGIC CRITICAL:
- ⚠️
infrastructure/services/prisma-duplicate-detector.ts- Duplicate detection - ⚠️
infrastructure/services/prisma-price-validator.ts- Price validation - ⚠️
infrastructure/repositories/prisma-listing.repository.ts- Listing data access - ⚠️
domain/services/moderation.service.ts- Moderation logic
SEARCH Module - INTEGRATION CRITICAL:
- ⚠️
infrastructure/services/typesense-client.service.ts- Search engine integration - ⚠️
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)
-
Create 5 critical tests for AUTH module:
presentation/guards/jwt-auth.guard.spec.tspresentation/guards/roles.guard.spec.tsinfrastructure/repositories/prisma-user.repository.spec.tsinfrastructure/strategies/jwt.strategy.spec.tsinfrastructure/strategies/local.strategy.spec.ts
-
Create 4 critical tests for LISTINGS module:
infrastructure/repositories/prisma-listing.repository.spec.tsinfrastructure/services/prisma-duplicate-detector.spec.tsinfrastructure/services/prisma-price-validator.spec.tsdomain/services/moderation.service.spec.ts
Short Term (Week 2-3)
-
Infrastructure Repository Tests:
- All Prisma repository implementations
- Search repository implementations
-
Integration/Event Tests:
- Event handler tests for all domain events
- Event publishing verification
-
Presentation Layer Tests:
- All controllers
- All guards and decorators
- DTO validation tests
Medium Term (Week 4+)
- 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.