Files

190 lines
6.3 KiB
Markdown

# Dashboard Integration Tests
This directory contains integration tests for the dashboard functionality, following the Clean Integration Testing strategy defined in `plans/clean_integration_strategy.md`.
## Test Philosophy
These tests focus on **Use Case orchestration** and **business logic**, not UI rendering. They verify that:
1. **Use Cases correctly orchestrate** interactions between their Ports (Repositories, Event Publishers)
2. **Data flows correctly** from repositories through use cases to presenters
3. **Error handling works** at the business logic level
4. **In-Memory adapters** are used for speed and determinism
## Test Files
### 1. [`dashboard-use-cases.integration.test.ts`](dashboard-use-cases.integration.test.ts)
Tests the orchestration logic of dashboard-related Use Cases.
**Focus:** Use Case orchestration patterns
- GetDashboardUseCase: Retrieves driver statistics, upcoming races, standings, and activity
- Validates that Use Cases correctly interact with their Ports
- Tests success paths and edge cases
**Scenarios:**
- Driver with complete data
- New driver with no history
- Driver with many upcoming races (limited to 3)
- Driver in multiple championships
- Driver with recent activity sorted by timestamp
- Edge cases: no upcoming races, no championships, no activity
- Error cases: driver not found, invalid ID, repository errors
### 2. [`dashboard-data-flow.integration.test.ts`](dashboard-data-flow.integration.test.ts)
Tests the complete data flow from repositories to DTOs.
**Focus:** Data transformation and flow
- Repository → Use Case → Presenter → DTO
- Data validation and transformation
- DTO structure and formatting
**Scenarios:**
- Complete data flow for driver with all data
- Complete data flow for new driver with no data
- Data consistency across multiple calls
- Maximum upcoming races handling
- Many championship standings
- Many recent activities
- Mixed race statuses
- DTO structure validation
### 3. [`dashboard-error-handling.integration.test.ts`](dashboard-error-handling.integration.test.ts)
Tests error handling and edge cases at the Use Case level.
**Focus:** Error orchestration and handling
- Repository errors (driver not found, data access errors)
- Validation errors (invalid driver ID, invalid parameters)
- Business logic errors (permission denied, data inconsistencies)
- Error recovery and fallbacks
**Scenarios:**
- Driver not found errors
- Validation errors (empty, null, undefined, malformed IDs)
- Repository query errors (driver, race, league, activity)
- Event publisher error handling
- Business logic error handling (corrupted data, inconsistencies)
- Error recovery and fallbacks
- Error propagation
- Error logging and observability
## Directory Structure
```
tests/integration/dashboard/
├── dashboard-use-cases.integration.test.ts # Use Case orchestration tests
├── dashboard-data-flow.integration.test.ts # Data flow tests
├── dashboard-error-handling.integration.test.ts # Error handling tests
└── README.md # This file
```
## Test Pattern
All tests follow the Clean Integration Test pattern:
```typescript
describe('Feature - Test Scenario', () => {
let harness: IntegrationTestHarness;
let inMemoryRepository: InMemoryRepository;
let useCase: UseCase;
beforeAll(() => {
// Initialize In-Memory adapters
// inMemoryRepository = new InMemoryRepository();
// useCase = new UseCase({ repository: inMemoryRepository });
});
beforeEach(() => {
// Clear In-Memory repositories
// inMemoryRepository.clear();
});
it('should [expected behavior]', async () => {
// TODO: Implement test
// Given: Setup test data in In-Memory repositories
// When: Execute the Use Case
// Then: Verify orchestration (repository calls, event emissions)
// And: Verify result structure and data
});
});
```
## Key Principles
### 1. Use In-Memory Adapters
- All tests use In-Memory repositories for speed and determinism
- No external database or network dependencies
- Tests run in milliseconds
### 2. Focus on Orchestration
- Tests verify **what** the Use Case does, not **how** it does it
- Verify repository calls, event emissions, and data flow
- Don't test UI rendering or visual aspects
### 3. Zero Implementation
- These are **placeholders** with TODO comments
- No actual implementation logic
- Just the test framework and structure
### 4. Business Logic Only
- Tests are for business logic, not UI
- Focus on Use Case orchestration
- Verify data transformation and error handling
## Running Tests
```bash
# Run all dashboard integration tests
npm test -- tests/integration/dashboard/
# Run specific test file
npm test -- tests/integration/dashboard/dashboard-use-cases.integration.test.ts
# Run with verbose output
npm test -- tests/integration/dashboard/ --reporter=verbose
```
## Related Files
- [`plans/clean_integration_strategy.md`](../../../plans/clean_integration_strategy.md) - Clean Integration Testing strategy
- [`tests/e2e/bdd/dashboard/`](../../e2e/bdd/dashboard/) - BDD E2E tests (user outcomes)
- [`tests/integration/harness/`](../harness/) - Integration test harness
- [`tests/integration/league/`](../league/) - Example integration tests
## Observations
Based on the BDD E2E tests, the dashboard functionality requires integration test coverage for:
1. **Driver Statistics Calculation**
- Rating, rank, starts, wins, podiums, leagues
- Derived from race results and league participation
2. **Upcoming Race Management**
- Retrieval of scheduled races
- Limiting to 3 races
- Sorting by scheduled date
- Time-until-race calculation
3. **Championship Standings**
- League participation tracking
- Position and points calculation
- Driver count per league
4. **Recent Activity Feed**
- Activity type categorization (race_result, etc.)
- Timestamp sorting (newest first)
- Status assignment (success, info)
5. **Error Handling**
- Driver not found scenarios
- Invalid driver ID validation
- Repository error propagation
- Event publisher error handling
6. **Edge Cases**
- New drivers with no data
- Drivers with partial data
- Maximum data limits (upcoming races)
- Data inconsistencies
These integration tests will provide fast, deterministic verification of the dashboard business logic before UI implementation.