Files
Logic/Modules/Ai/irrigation/test_irrigation_recommend_api.py
2026-05-11 03:27:21 +03:30

65 lines
2.3 KiB
Python

from __future__ import annotations
from unittest.mock import patch
from django.test import TestCase, override_settings
from rest_framework.test import APIClient
@override_settings(ROOT_URLCONF="irrigation.urls")
class IrrigationRecommendApiTests(TestCase):
def setUp(self):
self.client = APIClient()
@patch("rag.services.irrigation.get_irrigation_recommendation")
def test_recommend_api_returns_water_balance(self, mock_get_irrigation_recommendation):
mock_get_irrigation_recommendation.return_value = {
"plan": {
"frequencyPerWeek": 4,
"durationMinutes": 38,
"bestTimeOfDay": "05:30 تا 08:00 صبح",
"moistureLevel": 72,
"warning": "در ساعات گرم روز آبیاری انجام نشود",
},
"water_balance": {
"active_kc": 0.93,
"crop_profile": {
"kc_initial": 0.55,
"kc_mid": 1.05,
"kc_end": 0.78,
},
"daily": [
{
"forecast_date": "2025-02-12",
"et0_mm": 5.4,
"etc_mm": 4.9,
"effective_rainfall_mm": 0,
"gross_irrigation_mm": 17,
"irrigation_timing": "05:30 - 07:00",
}
],
},
"timeline": [],
"sections": [],
"simulation_optimizer": {"engine": "crop_simulation_heuristic"},
"selected_irrigation_method": {"name": "آبیاری قطره‌ای"},
}
response = self.client.post(
"/recommend/",
data={
"farm_uuid": "11111111-1111-1111-1111-111111111111",
"plant_name": "گوجه‌فرنگی",
"growth_stage": "گلدهی",
"irrigation_method_name": "آبیاری قطره‌ای",
},
format="json",
)
self.assertEqual(response.status_code, 200)
data = response.json()["data"]
self.assertIn("water_balance", data)
self.assertEqual(data["water_balance"]["active_kc"], 0.93)
self.assertNotIn("simulation_optimizer", data)
self.assertNotIn("selected_irrigation_method", data)