51 lines
1.7 KiB
Python
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) |