# Tests pour Ohm Stream Downloader

Ce dossier contient la suite de tests unitaires pour le projet Ohm Stream Downloader.

## Structure

```
tests/
├── __init__.py              # Package initialization
├── conftest.py              # Pytest configuration et fixtures
├── test_models.py           # Tests pour les modèles Pydantic
├── test_downloaders.py      # Tests pour les downloaders
├── test_download_manager.py # Tests pour DownloadManager
├── test_favorites.py        # Tests pour le système de favoris
└── test_api.py              # Tests pour les endpoints FastAPI
```

## Lancer les tests

### Tous les tests
```bash
pytest
```

### Avec couverture de code
```bash
pytest --cov=app --cov-report=html
```

### Uniquement les tests unitaires (rapides)
```bash
pytest -m "unit"
```

### Uniquement les tests d'intégration
```bash
pytest -m "integration"
```

### Exclure les tests lents
```bash
pytest -m "not slow"
```

### Mode verbeux
```bash
pytest -v
```

### Afficher le print debugging
```bash
pytest -s
```

## Fixtures disponibles

Les fixtures sont définies dans `conftest.py` :

- `temp_dir` : Répertoire temporaire pour les tests
- `temp_download_dir` : Répertoire de téléchargement temporaire
- `sample_download_task` : Exemple de tâche de téléchargement
- `sample_download_request` : Exemple de requête de téléchargement
- `download_manager` : Instance de DownloadManager configurée
- `favorites_manager` : Instance de FavoritesManager configurée
- `mock_httpx_client` : Mock pour httpx.AsyncClient
- `sample_anime_metadata` : Exemple de métadonnées anime
- `sample_favorite_data` : Exemple de favori

## Marqueurs (Markers)

Les tests sont marqués automatiquement :

- `unit` : Tests unitaires (isolés, rapides)
- `integration` : Tests d'intégration (API endpoints)
- `asyncio` : Tests asynchrones
- `slow` : Tests lents (à marquer manuellement)
- `network` : Tests nécessitant un accès réseau

## Couverture de code

Le rapport de couverture est généré dans `htmlcov/index.html` après avoir lancé :
```bash
pytest --cov=app --cov-report=html
```

## Notes

- Les tests utilisent des mocks pour éviter les appels réseau réels
- Les fichiers temporaires sont nettoyés automatiquement après chaque test
- La base de données de favoris utilise des fichiers temporaires
- Les tests asynchrones utilisent `pytest-asyncio`
