Spaces:
Build error
Build error
Download tests/api/test_graph_debugger_view.py from MissawB/animetix-web: direct link, hf CLI and curl.
- Browser
- Download file 2.45 kB
-
https://huggingface.co/spaces/MissawB/animetix-web/resolve/main/tests/api/test_graph_debugger_view.py
- Command line
-
hf download hf://spaces/MissawB/animetix-web/tests/api/test_graph_debugger_view.py
-
curl -L -o test_graph_debugger_view.py https://huggingface.co/spaces/MissawB/animetix-web/resolve/main/tests/api/test_graph_debugger_view.py
2.45 kB
| """`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 | |
| def admin_client(db): | |
| client = APIClient() | |
| user = User.objects.create_superuser(username="graphadmin", password="pw") | |
| client.force_authenticate(user=user) | |
| return client | |
| 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() | |
| 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") | |
| 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() | |
| 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 | |