# Tests

This directory contains all test files for the Siumai project, organized by functionality.

## Directory Structure

```
tests/
├── README.md                           # This file
├── streaming/                          # Streaming functionality tests
│   ├── stream_start_event_test.rs     # StreamStart event generation tests
│   ├── complete_stream_events_test.rs # Complete streaming event sequence tests
│   ├── streaming_integration_test.rs  # General streaming integration tests
│   └── tool_call_streaming_integration_test.rs # Tool call streaming tests
├── providers/                          # Provider-specific tests
│   ├── provider_interface_test.rs     # Provider interface compliance tests
│   ├── provider_headers_test.rs       # HTTP header validation tests
│   └── gemini_thinking_test.rs        # Gemini thinking capability tests
├── capabilities/                       # Feature capability tests
│   ├── audio_capability_test.rs       # Audio processing capability tests
│   ├── tool_capability_test.rs        # Tool calling capability tests
│   ├── vision_capability_test.rs      # Vision/image processing capability tests
│   ├── image_generation_test.rs       # Image generation capability tests
│   └── embedding_integration_tests.rs # Embedding generation tests
├── parameters/                         # Parameter handling tests
│   ├── parameter_validation_test.rs   # Parameter validation tests
│   ├── parameter_advanced_tests.rs    # Advanced parameter handling tests
│   ├── parameter_mapping_consistency.rs # Parameter mapping consistency tests
│   ├── parameter_internal_verification_test.rs # Internal parameter verification
│   └── siumai_parameter_passing_test.rs # Parameter passing tests
├── mock/                              # Mock testing framework
│   ├── mock_framework.rs             # HTTP mock testing framework
│   └── mock_streaming_provider.rs    # Mock streaming provider for testing
├── core/                              # Core functionality tests
│   ├── clone_support_test.rs         # Clone trait implementation tests
│   ├── config_validation_tests.rs    # Configuration validation tests
│   ├── concurrency_tests.rs          # Concurrency and thread safety tests
│   ├── network_error_tests.rs        # Network error handling tests
│   └── resource_management_tests.rs  # Resource management tests
├── integration/                       # Integration tests
│   └── siliconflow_rerank_test.rs    # SiliconFlow rerank integration tests
├── integration_tests.rs              # Core integration tests
├── real_llm_integration_test.rs       # Tests with real LLM providers (requires API keys)
├── request_builder_integration_test.rs # Request builder integration tests
├── request_builder_consistency.rs     # Request builder consistency tests
├── siumai_unified_interface_test.rs   # Unified interface tests
├── unified_reasoning_test.rs          # Unified reasoning capability tests
├── max_tokens_default_test.rs         # Max tokens default behavior tests
└── url_compatibility_test.rs          # URL compatibility tests
```

## Test Categories

### 🌊 Streaming Tests (`tests/streaming/`)
Tests for streaming functionality across all providers:
- **StreamStart Event Tests** - Verify metadata emission at stream beginning
- **Complete Event Sequence Tests** - Test full streaming event flows
- **Integration Tests** - General streaming functionality
- **Tool Call Streaming** - Tool call specific streaming tests

### 🔌 Provider Tests (`tests/providers/`)
Tests for provider-specific functionality:
- **Interface Compliance** - Ensure providers implement required interfaces
- **Header Validation** - HTTP header handling tests
- **Provider-Specific Features** - Tests for unique provider capabilities

### 🎯 Capability Tests (`tests/capabilities/`)
Tests for specific AI capabilities:
- **Audio Processing** - Audio input/output handling
- **Tool Calling** - Function calling capabilities
- **Vision** - Image processing and analysis
- **Image Generation** - Image creation capabilities
- **Embeddings** - Text embedding generation

### ⚙️ Parameter Tests (`tests/parameters/`)
Tests for parameter handling and validation:
- **Validation** - Parameter validation logic
- **Advanced Handling** - Complex parameter scenarios
- **Mapping Consistency** - Parameter mapping across providers
- **Internal Verification** - Internal parameter processing

### 🎭 Mock Tests (`tests/mock/`)
Mock testing framework and utilities:
- **HTTP Mock Framework** - Mock server for HTTP requests
- **Streaming Mock Provider** - Mock provider for streaming tests

### 🏗️ Core Tests (`tests/core/`)
Core functionality and infrastructure tests:
- **Clone Support** - Clone trait implementations
- **Configuration** - Configuration validation
- **Concurrency** - Thread safety and concurrent access
- **Network Errors** - Error handling and recovery
- **Resource Management** - Memory and resource cleanup

## Running Tests

### All Tests
```bash
cargo test
```

### By Category
```bash
# Streaming tests
cargo test --test "streaming/*"

# Provider tests
cargo test --test "providers/*"

# Capability tests
cargo test --test "capabilities/*"

# Parameter tests
cargo test --test "parameters/*"

# Mock tests
cargo test --test "mock/*"

# Core tests
cargo test --test "core/*"
```

### Individual Test Files
```bash
# StreamStart event tests
cargo test --test streaming/stream_start_event_test

# Complete streaming sequence tests
cargo test --test streaming/complete_stream_events_test

# Mock streaming provider tests
cargo test --test mock/mock_streaming_provider
```

## Test Requirements

Some tests require environment variables:
- `OPENAI_API_KEY` - For OpenAI integration tests
- `ANTHROPIC_API_KEY` - For Anthropic integration tests
- `GEMINI_API_KEY` - For Google/Gemini integration tests

## Mock Testing

The mock framework provides utilities for:
- **HTTP Mock Servers** - Simulate API responses
- **Error Injection** - Test error handling scenarios
- **Network Failure Simulation** - Test network resilience
- **Rate Limiting Simulation** - Test rate limit handling
- **Authentication Failure Testing** - Test auth error scenarios
- **Streaming Event Simulation** - Test complete streaming flows

## Adding New Tests

When adding new tests, place them in the appropriate category:

1. **Streaming-related** → `tests/streaming/`
2. **Provider-specific** → `tests/providers/`
3. **Capability/feature** → `tests/capabilities/`
4. **Parameter handling** → `tests/parameters/`
5. **Mock/testing utilities** → `tests/mock/`
6. **Core functionality** → `tests/core/`

Follow the naming convention: `{feature}_{type}_test.rs`

## Recent Additions

### StreamStart Event Fix (v0.9.2)
- Added comprehensive StreamStart event tests
- Fixed missing StreamStart events across all providers
- Created complete streaming event sequence tests
- Added mock streaming provider for testing

The streaming tests now verify that all providers correctly emit:
1. **StreamStart** - With proper metadata at stream beginning
2. **ContentDelta** - Incremental content updates
3. **ToolCallDelta** - Tool call information (where supported)
4. **ThinkingDelta** - Reasoning content (where supported)
5. **UsageUpdate** - Token usage information
6. **StreamEnd** - Final response with complete data
