update ai insight root cause

This commit is contained in:
Alberto-Audrix committed 2026-10-06 14:26:26 +07:00
1 parent 7e8c06d36f
commit 15ebdcce78
7 files changed
+297 -48

No files matched your search

+89
View File
@@ -478,3 +478,92 @@ class ErdPrimaryKeyTests(TestCase):
live_pks = [row[1] for row in cursor.fetchall() if row[5]]
self.assertEqual(live_pks, [pk_name], table)
class AIInsightAPITests(TestCase):
def setUp(self):
import json
self.user = User.objects.create_user(user_name="insight_tester", password="secret")
self.client = APIClient()
self.client.force_authenticate(self.user)
site = _linked_site(self.user, site_name="Site A", code="site-a")
self.kandang = Kandang.objects.create(kandang_name="Kandang 01", site=site)
self.cycle = Cycle.objects.create(
kandang=self.kandang,
total_days=35,
start_date=date.today() - timedelta(days=5),
doc_in_weight=40,
doc_in_count=10000,
status=Cycle.STATUS_ACTIVE,
)
def test_cached_extracts_akar_masalah_from_daily_json(self):
import json
from apps.operations.models import AIInsight
clean_insight = "Lakukan penyesuaian tirai kandang dan ventilasi minimal."
akar_masalah = "Suhu brooding terlalu dingin di malam hari (26C vs 32C)."
daily_json = json.dumps({"akar_masalah": akar_masalah, "insight": clean_insight}, ensure_ascii=False)
stored_text = f"{clean_insight}\n\n<!--daily_json-->\n{daily_json}"
AIInsight.objects.create(
cycle=self.cycle,
kandang=self.kandang,
topic="fcr",
report_type="page",
report_period="current",
date=date.today(),
summary="FCR tinggi pada hari ke-7.",
insight_text=stored_text,
alert="warning",
)
response = self.client.get(
"/api/v1/ai-insights/cached/",
{
"cycle_id": self.cycle.pk,
"kandang_id": self.kandang.pk,
"topic": "fcr",
"report_type": "page",
"report_period": "current",
},
)
self.assertEqual(response.status_code, 200)
self.assertTrue(response.data["success"])
self.assertEqual(response.data["summary"], "FCR tinggi pada hari ke-7.")
self.assertEqual(response.data["akar_masalah"], akar_masalah)
self.assertEqual(response.data["insight"], clean_insight)
self.assertIn(akar_masalah, response.data["insight_text"])
self.assertIn(clean_insight, response.data["insight_text"])
def test_cached_legacy_fallback_without_akar_masalah(self):
from apps.operations.models import AIInsight
AIInsight.objects.create(
cycle=self.cycle,
kandang=self.kandang,
topic="fcr",
report_type="page",
report_period="current",
date=date.today(),
summary="Data normal.",
insight_text="Pertahankan SOP saat ini.",
alert="healthy",
)
response = self.client.get(
"/api/v1/ai-insights/cached/",
{
"cycle_id": self.cycle.pk,
"kandang_id": self.kandang.pk,
"topic": "fcr",
"report_type": "page",
"report_period": "current",
},
)
self.assertEqual(response.status_code, 200)
self.assertTrue(response.data["success"])
self.assertEqual(response.data["summary"], "Data normal.")
self.assertEqual(response.data["akar_masalah"], "")
self.assertEqual(response.data["insight"], "Pertahankan SOP saat ini.")