Spaces:
Running
Running
| from contextlib import contextmanager | |
| from unittest.mock import MagicMock, patch | |
| from animetix.api.cognition import ( | |
| AIDebateArenaView, | |
| ArchetypeNexusView, | |
| NeuroMemoryManagementView, | |
| ) | |
| from animetix.containers import get_container | |
| from django.test import RequestFactory | |
| container = get_container() | |
| def _override(**services): | |
| """Override core/persistence providers by name, reset on exit (provider-level).""" | |
| providers_map = { | |
| "drift_service": container.core.archetype_drift_service, | |
| "profiler": container.core.neuro_symbolic_user_profiler, | |
| "feedback_port": container.persistence.feedback_adapter, | |
| "debate_service": container.core.self_play_debate_service, | |
| } | |
| touched = [] | |
| try: | |
| for name, mock in services.items(): | |
| provider = providers_map[name] | |
| provider.override(mock) | |
| touched.append(provider) | |
| yield | |
| finally: | |
| for provider in touched: | |
| provider.reset_last_overriding() | |
| def test_archetype_nexus_view_unauthenticated(): | |
| factory = RequestFactory() | |
| request = factory.get("/api/v1/cognition/archetype-nexus/") | |
| with _override( | |
| drift_service=MagicMock(), profiler=MagicMock(), feedback_port=MagicMock() | |
| ): | |
| view = ArchetypeNexusView.as_view() | |
| response = view(request) | |
| assert response.status_code in [401, 403] | |
| def test_archetype_nexus_view_authenticated(): | |
| factory = RequestFactory() | |
| request = factory.get("/api/v1/cognition/archetype-nexus/") | |
| user = MagicMock() | |
| user.id = 1 | |
| user.is_authenticated = True | |
| request.user = user | |
| drift_service = MagicMock() | |
| drift_service.calculate_drift.return_value = MagicMock( | |
| archetype_id="The Sage", | |
| primary_accent="blue", | |
| aura_type="calm", | |
| aura_intensity=0.8, | |
| font_vibe="serif", | |
| ) | |
| profiler = MagicMock() | |
| profiler.deduce_preference_rules.return_value = ["Likes action"] | |
| feedback_port = MagicMock() | |
| feedback_port.get_user_feedback.return_value = [ | |
| {"input_context": "test", "is_positive": True} | |
| ] | |
| with ( | |
| patch("animetix.api.cognition.ArchetypeDriftSnapshot.objects.filter"), | |
| patch("animetix.api.cognition.ArchetypeDriftSnapshot.objects.create"), | |
| _override( | |
| drift_service=drift_service, | |
| profiler=profiler, | |
| feedback_port=feedback_port, | |
| ), | |
| ): | |
| with patch.object(ArchetypeNexusView, "permission_classes", []): | |
| from rest_framework.test import force_authenticate # noqa: E402 | |
| view = ArchetypeNexusView.as_view() | |
| force_authenticate(request, user=user) | |
| response = view(request) | |
| assert response.status_code == 200 | |
| assert response.data["archetype"]["id"] == "The Sage" | |
| assert response.data["logical_rules"] == ["Likes action"] | |
| assert len(response.data["recent_signals"]) == 1 | |
| def test_ai_debate_arena_view(): | |
| factory = RequestFactory() | |
| request = factory.post( | |
| "/api/v1/cognition/debate-arena/", | |
| {"media_title": "Naruto", "topic": "Best Ninja"}, | |
| content_type="application/json", | |
| ) | |
| user = MagicMock() | |
| user.is_authenticated = True | |
| request.user = user | |
| debate_service = MagicMock() | |
| debate_service.run_debate.return_value = { | |
| "status": "success", | |
| "debate": "Naruto vs Sasuke", | |
| } | |
| with ( | |
| _override(debate_service=debate_service), | |
| patch("animetix.api.cognition.deduct_berrix"), | |
| ): | |
| with patch.object(AIDebateArenaView, "permission_classes", []): | |
| from rest_framework.test import force_authenticate # noqa: E402 | |
| view = AIDebateArenaView.as_view() | |
| force_authenticate(request, user=user) | |
| response = view(request) | |
| assert response.status_code == 200 | |
| assert response.data["status"] == "success" | |
| assert response.data["debate"] == "Naruto vs Sasuke" | |
| def test_neuro_memory_management_view_get(): | |
| factory = RequestFactory() | |
| request = factory.get("/api/v1/cognition/neuro-memory/") | |
| user = MagicMock() | |
| user.id = 1 | |
| user.is_authenticated = True | |
| request.user = user | |
| profiler = MagicMock() | |
| profiler.deduce_preference_rules.return_value = ["Rule 1", "Rule 2"] | |
| feedback_port = MagicMock() | |
| feedback_port.get_user_feedback.return_value = [{}, {}] | |
| with _override(profiler=profiler, feedback_port=feedback_port): | |
| with patch.object(NeuroMemoryManagementView, "permission_classes", []): | |
| from rest_framework.test import force_authenticate # noqa: E402 | |
| view = NeuroMemoryManagementView.as_view() | |
| force_authenticate(request, user=user) | |
| response = view(request) | |
| assert response.status_code == 200 | |
| assert response.data["status"] == "success" | |
| assert len(response.data["deduced_rules"]) == 2 | |
| assert response.data["total_signals"] == 2 | |
| def test_neuro_memory_management_view_post(): | |
| factory = RequestFactory() | |
| request = factory.post( | |
| "/api/v1/cognition/neuro-memory/", | |
| {"action": "reset"}, | |
| content_type="application/json", | |
| ) | |
| user = MagicMock() | |
| user.is_authenticated = True | |
| request.user = user | |
| with ( | |
| _override(profiler=MagicMock(), feedback_port=MagicMock()), | |
| patch.object(NeuroMemoryManagementView, "permission_classes", []), | |
| patch("animetix.api.cognition.AIFeedback"), | |
| ): | |
| from rest_framework.test import force_authenticate # noqa: E402 | |
| view = NeuroMemoryManagementView.as_view() | |
| force_authenticate(request, user=user) | |
| response = view(request) | |
| assert response.status_code == 200 | |
| assert response.data["status"] == "success" | |
| assert response.data["message"] == "Neuro-Symbolic profile reset." | |