Files
bakery-ia/services/training/tests/README.md
2025-07-19 16:59:37 +02:00

263 lines
7.7 KiB
Markdown

# Training Service - Complete Testing Suite
## 📁 Test Structure
```
services/training/tests/
├── conftest.py # Test configuration and fixtures
├── test_api.py # API endpoint tests
├── test_ml.py # ML component tests
├── test_service.py # Service layer tests
├── test_messaging.py # Messaging tests
└── test_integration.py # Integration tests
```
## 🧪 Test Coverage
### **1. API Tests (`test_api.py`)**
- ✅ Health check endpoints (`/health`, `/health/ready`, `/health/live`)
- ✅ Metrics endpoint (`/metrics`)
- ✅ Training job creation and management
- ✅ Single product training
- ✅ Job status tracking and cancellation
- ✅ Data validation endpoints
- ✅ Error handling and edge cases
- ✅ Authentication integration
**Key Test Classes:**
- `TestTrainingAPI` - Basic API functionality
- `TestTrainingJobsAPI` - Training job management
- `TestSingleProductTrainingAPI` - Single product workflows
- `TestErrorHandling` - Error scenarios
- `TestAuthenticationIntegration` - Security tests
### **2. ML Component Tests (`test_ml.py`)**
- ✅ Data processor functionality
- ✅ Prophet manager operations
- ✅ ML trainer orchestration
- ✅ Feature engineering validation
- ✅ Model training and validation
**Key Test Classes:**
- `TestBakeryDataProcessor` - Data preparation and feature engineering
- `TestBakeryProphetManager` - Prophet model management
- `TestBakeryMLTrainer` - ML training orchestration
- `TestIntegrationML` - ML component integration
**Key Features Tested:**
- Spanish holiday detection
- Temporal feature engineering
- Weather and traffic data integration
- Model validation and metrics
- Data quality checks
### **3. Service Layer Tests (`test_service.py`)**
- ✅ Training service business logic
- ✅ Database operations
- ✅ External service integration
- ✅ Job lifecycle management
- ✅ Error recovery and resilience
**Key Test Classes:**
- `TestTrainingService` - Core business logic
- `TestTrainingServiceDataFetching` - External API integration
- `TestTrainingServiceExecution` - Training workflow execution
- `TestTrainingServiceEdgeCases` - Edge cases and error conditions
### **4. Messaging Tests (`test_messaging.py`)**
- ✅ Event publishing functionality
- ✅ Message structure validation
- ✅ Error handling in messaging
- ✅ Integration with shared components
**Key Test Classes:**
- `TestTrainingMessaging` - Basic messaging operations
- `TestMessagingErrorHandling` - Error scenarios
- `TestMessagingIntegration` - Shared component integration
- `TestMessagingPerformance` - Performance and reliability
### **5. Integration Tests (`test_integration.py`)**
- ✅ End-to-end workflow testing
- ✅ Service interaction validation
- ✅ Error handling across boundaries
- ✅ Performance and scalability
- ✅ Security and compliance
**Key Test Classes:**
- `TestTrainingWorkflowIntegration` - Complete workflows
- `TestServiceInteractionIntegration` - Cross-service communication
- `TestErrorHandlingIntegration` - Error propagation
- `TestPerformanceIntegration` - Performance characteristics
- `TestSecurityIntegration` - Security validation
- `TestRecoveryIntegration` - Recovery scenarios
- `TestComplianceIntegration` - GDPR and audit compliance
## 🔧 Test Configuration (`conftest.py`)
### **Fixtures Provided:**
- `test_engine` - Test database engine
- `test_db_session` - Database session for tests
- `test_client` - HTTP test client
- `mock_messaging` - Mocked messaging system
- `mock_data_service` - Mocked external data services
- `mock_ml_trainer` - Mocked ML trainer
- `mock_prophet_manager` - Mocked Prophet manager
- `mock_data_processor` - Mocked data processor
- `training_job_in_db` - Sample training job in database
- `trained_model_in_db` - Sample trained model in database
### **Helper Functions:**
- `assert_training_job_structure()` - Validate job data structure
- `assert_model_structure()` - Validate model data structure
## 🚀 Running Tests
### **Run All Tests:**
```bash
cd services/training
pytest tests/ -v
```
### **Run Specific Test Categories:**
```bash
# API tests only
pytest tests/test_api.py -v
# ML component tests
pytest tests/test_ml.py -v
# Service layer tests
pytest tests/test_service.py -v
# Messaging tests
pytest tests/test_messaging.py -v
# Integration tests
pytest tests/test_integration.py -v
```
### **Run with Coverage:**
```bash
pytest tests/ --cov=app --cov-report=html --cov-report=term
```
### **Run Performance Tests:**
```bash
pytest tests/test_integration.py::TestPerformanceIntegration -v
```
### **Skip Slow Tests:**
```bash
pytest tests/ -v -m "not slow"
```
## 📊 Test Scenarios Covered
### **Happy Path Scenarios:**
- ✅ Complete training workflow (start → progress → completion)
- ✅ Single product training
- ✅ Data validation and preprocessing
- ✅ Model training and storage
- ✅ Event publishing and messaging
- ✅ Job status tracking and cancellation
### **Error Scenarios:**
- ✅ Database connection failures
- ✅ External service unavailability
- ✅ Invalid input data
- ✅ ML training failures
- ✅ Messaging system failures
- ✅ Authentication and authorization errors
### **Edge Cases:**
- ✅ Concurrent job execution
- ✅ Large datasets
- ✅ Malformed configurations
- ✅ Network timeouts
- ✅ Memory pressure scenarios
- ✅ Rapid successive requests
### **Security Tests:**
- ✅ Tenant isolation
- ✅ Input validation
- ✅ SQL injection protection
- ✅ Authentication enforcement
- ✅ Data access controls
### **Compliance Tests:**
- ✅ Audit trail creation
- ✅ Data retention policies
- ✅ GDPR compliance features
- ✅ Backward compatibility
## 🎯 Test Quality Metrics
### **Coverage Goals:**
- **API Layer:** 95%+ coverage
- **Service Layer:** 90%+ coverage
- **ML Components:** 85%+ coverage
- **Integration:** 80%+ coverage
### **Test Types Distribution:**
- **Unit Tests:** ~60% (isolated component testing)
- **Integration Tests:** ~30% (service interaction testing)
- **End-to-End Tests:** ~10% (complete workflow testing)
### **Performance Benchmarks:**
- All unit tests complete in <5 seconds
- Integration tests complete in <30 seconds
- End-to-end tests complete in <60 seconds
## 🔧 Mocking Strategy
### **External Dependencies Mocked:**
- **Data Service:** HTTP calls mocked with realistic responses
- **RabbitMQ:** Message publishing mocked for isolation
- **Database:** SQLite in-memory for fast testing
- **Prophet Models:** Training mocked for speed
- **File System:** Model storage mocked
### **Real Components Tested:**
- **FastAPI Application:** Real app instance
- **Pydantic Validation:** Real validation logic
- **SQLAlchemy ORM:** Real database operations
- **Business Logic:** Real service layer code
## 🛡️ Continuous Integration
### **CI Pipeline Tests:**
```yaml
# Example CI configuration
test_matrix:
- python: "3.11"
database: "postgresql"
- python: "3.11"
database: "sqlite"
test_commands:
- pytest tests/ --cov=app --cov-fail-under=85
- pytest tests/test_integration.py -m "not slow"
- pytest tests/ --maxfail=1 --tb=short
```
### **Quality Gates:**
- All tests must pass
- Coverage must be >85%
- ✅ No critical security issues
- ✅ Performance benchmarks met
## 📈 Test Maintenance
### **Regular Updates:**
- ✅ Add tests for new features
- ✅ Update mocks when APIs change
- ✅ Review and update test data
- ✅ Maintain realistic test scenarios
### **Monitoring:**
- ✅ Test execution time tracking
- ✅ Flaky test identification
- ✅ Coverage trend monitoring
- ✅ Test failure analysis
This comprehensive test suite ensures the training service is robust, reliable, and ready for production deployment! 🎉