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.")