---
description: Testing Guidelines
globs: ["tests/**/*.py"]
alwaysApply: false
---
# Testing Standards

## Framework and Requirements
- Use pytest for all tests
- Minimum code coverage: 80%
- Excluded from coverage: scripts/*, examples/*

## Test Types
- Unit tests: Test individual functions and classes in isolation
- Integration tests: Test components working together
- MCP protocol tests: Verify correct implementation of the MCP protocol

## File Organization
- Test files should be named `test_*.py`
- Each file in `src/` should have a corresponding test file in `tests/`
- Structure tests to mirror the source directory structure

## Best Practices
- Use fixtures to set up test environments
- Use parametrized tests for multiple test cases
- Mock external dependencies (especially API calls)
- Keep tests fast and independent of each other

## Example
```python
import pytest
from unittest.mock import AsyncMock, patch

from src.api.cluster import list_clusters

@pytest.fixture
def mock_client():
    client = AsyncMock()
    client.make_request.return_value = {"clusters": [{"cluster_id": "abc123"}]}
    return client

@pytest.mark.asyncio
async def test_list_clusters(mock_client):
    """Test that list_clusters returns expected format."""
    result = await list_clusters(mock_client)
    
    assert isinstance(result, list)
    assert len(result) == 1
    assert result[0]["cluster_id"] == "abc123"
    mock_client.make_request.assert_called_once()
```