67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
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.")
|