This commit is contained in:
2026-05-05 21:02:12 +03:30
parent 5301071df5
commit 1679825ae2
47 changed files with 1347 additions and 1403 deletions
+27
View File
@@ -8,6 +8,7 @@ from django.test import TestCase, override_settings
from django.utils import timezone
from rest_framework.test import APIClient
from rag.failure_contract import RAGServiceError
from soile.services import SoilMoistureHeatmapService
@@ -128,6 +129,32 @@ class SoilAnomalyDetectionApiTests(TestCase):
self.assertEqual(response.status_code, 404)
self.assertEqual(response.json()["msg"], "Farm not found.")
@patch("soile.views.apps.get_app_config")
def test_anomaly_api_returns_structured_failure_for_invalid_llm_json(self, mock_get_app_config):
mock_service = SimpleNamespace(
get_anomaly_detection=lambda **_kwargs: (_ for _ in ()).throw(
RAGServiceError(
error_code="invalid_json",
message="Soil anomaly LLM response was not valid JSON.",
source="llm",
retriable=True,
http_status=502,
)
)
)
mock_get_app_config.return_value = SimpleNamespace(
get_soil_anomaly_service=lambda: mock_service
)
response = self.client.post(
"/anomaly-detection/",
data={"farm_uuid": "550e8400-e29b-41d4-a716-446655440000"},
format="json",
)
self.assertEqual(response.status_code, 502)
self.assertEqual(response.json()["data"]["error_code"], "invalid_json")
class SoilMoistureHeatmapServiceTests(TestCase):
@patch("soile.services.SensorData.objects")
+6
View File
@@ -6,6 +6,7 @@ from rest_framework.response import Response
from rest_framework.views import APIView
from config.openapi import build_envelope_serializer, build_response
from rag.failure_contract import RAGServiceError
from .serializers import (
SoilAnomalyDetectionRequestSerializer,
@@ -179,6 +180,11 @@ class SoilAnomalyDetectionView(APIView):
{"code": 404, "msg": str(exc), "data": None},
status=status.HTTP_404_NOT_FOUND,
)
except RAGServiceError as exc:
return Response(
{"code": exc.http_status, "msg": exc.contract.message, "data": exc.to_dict()},
status=exc.http_status,
)
except Exception as exc:
return Response(
{"code": 500, "msg": f"خطا در تحلیل ناهنجاری خاک: {exc}", "data": None},