Files
Backend/farm_ai_assistant/tests.py
T

75 lines
3.2 KiB
Python
Raw Normal View History

2026-03-29 13:40:23 +03:30
from django.contrib.auth import get_user_model
from django.test import TestCase, override_settings
from rest_framework.test import APIRequestFactory, force_authenticate
2026-04-02 23:25:39 +03:30
from farm_hub.models import FarmHub, FarmType
2026-03-29 13:40:23 +03:30
from .models import Conversation, Message
from .views import ChatTaskStatusView
@override_settings(USE_EXTERNAL_API_MOCK=True)
class ChatTaskStatusViewTests(TestCase):
def setUp(self):
self.factory = APIRequestFactory()
self.user = get_user_model().objects.create_user(
username="farmer",
password="secret123",
email="farmer@example.com",
phone_number="09120000000",
)
2026-04-02 23:25:39 +03:30
self.farm_type, _ = FarmType.objects.get_or_create(name="زراعی")
self.farm = FarmHub.objects.create(
owner=self.user,
farm_type=self.farm_type,
name="Farm 1",
)
2026-03-29 13:40:23 +03:30
self.conversation = Conversation.objects.create(
owner=self.user,
2026-04-02 23:25:39 +03:30
farm=self.farm,
2026-03-29 13:40:23 +03:30
title="Irrigation chat",
farm_context={},
)
self.user_message = Message.objects.create(
conversation=self.conversation,
2026-04-02 23:25:39 +03:30
farm=self.farm,
2026-03-29 13:40:23 +03:30
role=Message.ROLE_USER,
content="What is the best irrigation plan?",
raw_response={
"task_id": "farm-ai-chat-task-123",
"status": "PENDING",
"status_url": "/api/tasks/farm-ai-chat-task-123/status/",
2026-04-02 23:25:39 +03:30
"farm_uuid": str(self.farm.farm_uuid),
2026-03-29 13:40:23 +03:30
},
)
def test_status_success_uses_chat_mock_result_and_persists_assistant_message(self):
2026-04-02 23:25:39 +03:30
request = self.factory.get(
f"/api/farm-ai-assistant/chat/task/farm-ai-chat-task-123/status/?farm_uuid={self.farm.farm_uuid}"
)
2026-03-29 13:40:23 +03:30
force_authenticate(request, user=self.user)
response = ChatTaskStatusView.as_view()(request, task_id="farm-ai-chat-task-123")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.data["status"], "success")
self.assertEqual(response.data["data"]["task_id"], "farm-ai-chat-task-123")
self.assertEqual(response.data["data"]["status"], "SUCCESS")
self.assertEqual(response.data["data"]["conversation_id"], str(self.conversation.uuid))
2026-04-02 23:25:39 +03:30
self.assertEqual(response.data["data"]["farm_uuid"], str(self.farm.farm_uuid))
2026-03-29 13:40:23 +03:30
self.assertEqual(response.data["data"]["result"]["content"], "Here is the recommended plan.")
self.assertEqual(len(response.data["data"]["result"]["sections"]), 3)
self.assertEqual(response.data["data"]["result"]["task_id"], "farm-ai-chat-task-123")
assistant_message = (
self.conversation.messages.filter(role=Message.ROLE_ASSISTANT)
.order_by("-created_at")
.first()
)
self.assertIsNotNone(assistant_message)
2026-04-02 23:25:39 +03:30
self.assertEqual(assistant_message.farm_id, self.farm.id)
2026-03-29 13:40:23 +03:30
self.assertEqual(assistant_message.content, "Here is the recommended plan.")
self.assertEqual(assistant_message.raw_response["task_id"], "farm-ai-chat-task-123")
2026-04-02 23:25:39 +03:30
self.assertEqual(assistant_message.raw_response["farm_uuid"], str(self.farm.farm_uuid))
2026-03-29 13:40:23 +03:30
self.assertEqual(len(assistant_message.raw_response["sections"]), 3)