Spaces:
Build error
Build error
File size: 2,445 Bytes
31d339a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | """`GraphDebuggerView` — la vue n'avait aucun test, et son action `heal` était
cassée à 100 % (`heal_node` appelait un `repository.get_media_by_id` qui
n'existait sur aucune classe du dépôt).
Le mock du service est ici contraint par `spec=GraphHealerService` : un appel
avec une signature que le service n'accepte pas lève, au lieu d'être avalé
silencieusement par un `MagicMock` nu — c'est ce dernier comportement qui avait
laissé passer le bug d'origine.
"""
from unittest.mock import MagicMock
import pytest
from animetix.containers import get_container
from core.domain.services.graph_healer_service import GraphHealerService
from django.contrib.auth.models import User
from django.urls import reverse
from rest_framework.test import APIClient
@pytest.fixture
def admin_client(db):
client = APIClient()
user = User.objects.create_superuser(username="graphadmin", password="pw")
client.force_authenticate(user=user)
return client
@pytest.fixture
def healer():
mock = MagicMock(spec=GraphHealerService)
container = get_container()
container.core.graph_healer_service.override(mock)
yield mock
container.core.graph_healer_service.reset_last_overriding()
@pytest.mark.django_db
def test_heal_forwards_the_media_type_to_the_healer(admin_client, healer):
"""La clé d'un média est (type, id) : sans le type, la vue ne peut pas
désigner le nœud à reconstruire."""
res = admin_client.post(
reverse("api_graph_debugger"),
{"action": "heal", "media_id": "42", "media_type": "Anime"},
format="json",
)
assert res.status_code == 200, res.data
healer.heal_node.assert_called_once_with("42", "Anime")
@pytest.mark.django_db
def test_heal_without_a_media_type_is_refused(admin_client, healer):
"""Plutôt qu'un type deviné : un id AniList existe pour plusieurs types,
guérir « le premier trouvé » reconstruirait le mauvais nœud."""
res = admin_client.post(
reverse("api_graph_debugger"),
{"action": "heal", "media_id": "42"},
format="json",
)
assert res.status_code == 400
healer.heal_node.assert_not_called()
@pytest.mark.django_db
def test_audit_is_served(admin_client, healer):
healer.audit_graph_quality.return_value = {"isolated_nodes": 3}
res = admin_client.get(reverse("api_graph_debugger"))
assert res.status_code == 200
assert res.data["isolated_nodes"] == 3
|