Files
ENI-PythonAdvanced_10/tests/etape7_erreurs.py
2025-12-17 13:29:14 +01:00

51 lines
1.7 KiB
Python

"""
Tests de validation pour l'Étape 7 (Bonus) : Gestion fine des erreurs métier
Objectif :
1. Vérifier que le service V2 lève bien une `NotFoundBLLException`
si le `movie_repository` retourne `None`.
Prérequis :
- La logique de gestion d'erreur est en place dans
`app/services/movie_analyzer_v2.py`.
"""
import pytest
from unittest.mock import AsyncMock, MagicMock
from app.core.exceptions import NotFoundBLLException
@pytest.mark.asyncio
async def test_service_v2_raises_not_found(mocker):
"""
Vérifie que le service `analyze_movie` lève une `NotFoundBLLException`
si le film n'est pas trouvé dans le repository.
"""
# 1. Mocker les dépendances (repositories)
mock_movie_repo = AsyncMock()
mock_movie_repo.find_by_id.return_value = None # Simule un film non trouvé
mocker.patch('app.services.movie_analyzer_v2.movie_repository', mock_movie_repo)
mock_llm = MagicMock()
# 2. Appel du service en s'attendant à une exception
from app.services.movie_analyzer_v2 import analyze_movie
with pytest.raises(NotFoundBLLException) as exc_info:
await analyze_movie(
movie_id="999",
ai_summary=True, # Peu importe les drapeaux
ai_opinion_summary=False,
ai_best_genre=False,
ai_tags=False,
llm=mock_llm
)
# 3. Assertions
# Vérifie que le repo a bien été appelé
mock_movie_repo.find_by_id.assert_called_once_with("999")
# Vérifie que le type d'exception est correct
assert exc_info.type is NotFoundBLLException
# Vérifie que le message d'erreur contient l'ID
assert "999" in str(exc_info.value)
assert "Movie" in str(exc_info.value)