rsnarsna
fifth commit
bccb680
Raw
History Blame Contribute Delete
5.01 kB
"""
Tests for Intelligence App — Phase 6.
"""
from django.test import TestCase
from django.contrib.auth import get_user_model
from apps.accounts.services import register_user
from apps.organizations.services import create_org
from apps.intelligence.models import EventLog, ChatSession
from apps.intelligence.services import log_event, get_events
from django.urls import reverse
User = get_user_model()
class EventLoggingTests(TestCase):
def test_log_event_direct(self):
"""Test direct usage of log_event service."""
user = User.objects.create_user("test@example.com", "password")
log_event(
event_type="manual_test",
actor=user,
metadata={"foo": "bar"}
)
log = EventLog.objects.last()
self.assertEqual(log.event_type, "manual_test")
self.assertEqual(log.actor_user, user)
self.assertEqual(log.metadata["foo"], "bar")
def test_user_registration_logging(self):
"""Test that registering a user creates a user_registered event."""
email = "logger@example.com"
register_user(email, "StrongPass123!Safe", org_name="Test Org", business_type="SaaS")
log = EventLog.objects.get(event_type="user_registered")
self.assertEqual(log.actor_user.email, email)
self.assertEqual(log.metadata["email_domain"], "example.com")
def test_org_creation_logging(self):
"""Test that creating an org creates an org_created event."""
user = register_user("owner@example.com", "StrongPass123!", org_name="Test Org", business_type="SaaS")
org = create_org("Logging Corp", user)
log = EventLog.objects.get(event_type="org_created")
self.assertEqual(log.org, org)
self.assertEqual(log.actor_user, user)
self.assertEqual(log.metadata["name"], "Logging Corp")
def test_get_events_filter(self):
"""Test filtering events."""
user = register_user("filter@example.com", "Pass123!", org_name="Test Org", business_type="SaaS")
log_event("type_a", actor=user)
log_event("type_b", actor=user)
events_a = get_events(event_type="type_a")
self.assertEqual(events_a.count(), 1)
self.assertEqual(events_a.first().event_type, "type_a")
class AIServiceTests(TestCase):
def test_chat_flow(self):
"""Test creating a session and exchanging messages."""
user = register_user("ai_user@example.com", "StrongPass123!", org_name="Test Org", business_type="SaaS")
# 1. Create Session
from apps.intelligence.services import create_session, generate_response
session = create_session(user, title="Test Chat", system_prompt="You are a bot.")
self.assertEqual(session.title, "Test Chat")
# 2. Send Message
response_msg = generate_response(session.pk, "Hello AI")
# 3. Verify interaction
self.assertEqual(response_msg.role, "assistant")
self.assertIn("Mock AI Response to: Hello AI", response_msg.content)
self.assertEqual(session.messages.count(), 2) # User + AI
class IntelligenceViewTests(TestCase):
def setUp(self):
from apps.audit.services import record_consent
self.user = register_user("view_ai@example.com", "StrongPass123!", org_name="Test Org", business_type="SaaS")
record_consent(self.user, "1.0")
self.client.force_login(self.user)
def test_event_log_view(self):
"""Test event log page."""
log_event("test_view", actor=self.user)
response = self.client.get(reverse("intelligence:event-log"))
self.assertEqual(response.status_code, 200)
# Jinja2 templates are not tracked by assertTemplateUsed,
# so we verify rendered content instead.
self.assertContains(response, "test_view")
def test_chat_views(self):
"""Test chat flow views."""
# 1. Start Chat — creates session and redirects
start_url = reverse("intelligence:chat-start")
response = self.client.get(start_url)
self.assertEqual(response.status_code, 302) # Redirect to detail
session = ChatSession.objects.filter(user=self.user).last()
self.assertIsNotNone(session, "start_chat_view should create a ChatSession")
detail_url = reverse("intelligence:chat-detail", args=[session.id])
# 2. View Detail
response = self.client.get(detail_url)
self.assertEqual(response.status_code, 200)
self.assertContains(response, "New Chat")
# 3. Send Message (HTMX)
msg_url = reverse("intelligence:chat-message-create", args=[session.id])
response = self.client.post(msg_url, {"content": "Hello View"})
self.assertEqual(response.status_code, 200)
self.assertContains(response, "Hello View") # User msg
self.assertContains(response, "Mock AI Response") # AI msg