Files

67 lines
2.4 KiB
Python
Raw Permalink Normal View History

2026-05-11 03:27:21 +03:30
from __future__ import annotations
from types import SimpleNamespace
from unittest.mock import patch
from django.test import TestCase, override_settings
from rest_framework.test import APIClient
@override_settings(ROOT_URLCONF="location_data.urls")
class NdviHealthApiTests(TestCase):
def setUp(self):
self.client = APIClient()
@patch("location_data.views.apps.get_app_config")
def test_ndvi_health_api_returns_payload(self, mock_get_app_config):
mock_service = SimpleNamespace(
get_ndvi_health=lambda **_kwargs: {
"ndviIndex": 0.68,
"mean_ndvi": 0.68,
"ndvi_map": {"grid": [[0.61, 0.7]]},
"vegetation_health_class": "Healthy vegetation",
"observation_date": "2026-04-02",
"satellite_source": "sentinel-2",
"healthData": [
{
"title": "سلامت پوشش گیاهی",
"value": "Healthy vegetation",
"color": "success",
"icon": "tabler-plant",
}
],
}
)
mock_get_app_config.return_value = SimpleNamespace(
get_ndvi_health_service=lambda: mock_service
)
response = self.client.post(
"/ndvi-health/",
data={"farm_uuid": "550e8400-e29b-41d4-a716-446655440000"},
format="json",
)
self.assertEqual(response.status_code, 200)
payload = response.json()["data"]
self.assertEqual(payload["mean_ndvi"], 0.68)
self.assertEqual(payload["vegetation_health_class"], "Healthy vegetation")
@patch("location_data.views.apps.get_app_config")
def test_ndvi_health_api_returns_404_for_missing_farm(self, mock_get_app_config):
mock_service = SimpleNamespace(
get_ndvi_health=lambda **_kwargs: (_ for _ in ()).throw(ValueError("Farm not found."))
)
mock_get_app_config.return_value = SimpleNamespace(
get_ndvi_health_service=lambda: mock_service
)
response = self.client.post(
"/ndvi-health/",
data={"farm_uuid": "550e8400-e29b-41d4-a716-446655440000"},
format="json",
)
self.assertEqual(response.status_code, 404)
self.assertEqual(response.json()["msg"], "Farm not found.")