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

70 lines
2.4 KiB
Python

"""
Tests de validation pour l'Étape 3 : Mise en place GraphQL (Version 1 - Statique)
Objectif :
1. Vérifier que le service `movie_analyzer_v1` retourne bien un dict "mock".
2. Vérifier que le resolver `analyze_movie_v1` appelle ce service et
construit correctement l'objet `MovieAnalysis`.
Prérequis :
- Les TODOs de `app/services/movie_analyzer_v1.py` sont complétés.
- Les TODOs de `app/graphql/resolvers/analyze_movie_v1.py` sont complétés.
- Le champ `analyzeMovie` est bien ajouté à `app/graphql/queries.py`
(en utilisant le resolver V1).
"""
import pytest
import strawberry
from unittest.mock import AsyncMock
from app.graphql.types.movie_analysis import MovieAnalysis
@pytest.mark.asyncio
async def test_service_v1_analyze_movie():
"""
Teste le service V1. Il doit retourner un dictionnaire
contenant les clés requises et l'ID correct.
"""
from app.services.movie_analyzer_v1 import analyze_movie
movie_id = "123"
analysis_data = await analyze_movie(movie_id)
assert isinstance(analysis_data, dict)
assert analysis_data["id"] == movie_id
assert "aiSummary" in analysis_data
assert "aiOpinionSummary" in analysis_data
assert "aiBestGenre" in analysis_data
assert "aiTags" in analysis_data
assert isinstance(analysis_data["aiTags"], list)
@pytest.mark.asyncio
async def test_resolver_v1_analyze_movie_by_id(mocker):
"""
Teste le resolver V1. Il doit appeler le service V1 et
retourner un objet `MovieAnalysis` typé.
"""
# 1. Mock du service V1 que le resolver est censé appeler
mock_service_data = {
"id": "1",
"aiSummary": "Mock summary",
"aiOpinionSummary": "Mock opinion",
"aiBestGenre": "Mock genre",
"aiTags": ["mock", "test"]
}
mock_analyze_service = AsyncMock(return_value=mock_service_data)
mocker.patch('app.graphql.resolvers.analyze_movie_v1.analyze_movie', mock_analyze_service)
# 2. Appel du resolver
from app.graphql.resolvers.analyze_movie_v1 import analyze_movie_by_id
result = await analyze_movie_by_id(movie_id=strawberry.ID("1"))
# 3. Assertions
# Vérifie que le service a bien été appelé
mock_analyze_service.assert_called_once_with(movie_id="1")
# Vérifie que le résultat est du bon type
assert isinstance(result, MovieAnalysis)
assert result.id == strawberry.ID("1")
assert result.aiSummary == "Mock summary"
assert result.aiTags == ["mock", "test"]