from django.contrib.auth import get_user_model from django.test import TestCase, override_settings from rest_framework.test import APIRequestFactory, force_authenticate from crop_zoning.models import CropArea from sensor_hub.views import SensorListCreateView AREA_GEOJSON = { "type": "Feature", "properties": {}, "geometry": { "type": "Polygon", "coordinates": [ [ [51.418934, 35.706815], [51.423054, 35.691062], [51.384258, 35.689389], [51.418934, 35.706815], ] ], }, } @override_settings( USE_EXTERNAL_API_MOCK=True, CROP_ZONE_CHUNK_AREA_SQM=200000, ) class SensorListCreateViewTests(TestCase): def setUp(self): self.factory = APIRequestFactory() self.user = get_user_model().objects.create_user( username="farmer", password="secret123", email="farmer@example.com", phone_number="09120000000", ) def test_create_sensor_with_area_geojson_creates_crop_zoning_payload(self): request = self.factory.post( "/api/sensor-hub/", { "name": "zone-sensor", "specifications": {"model": "SH-1"}, "power_source": {"type": "battery"}, "customized_sensors": {"report_interval_sec": 300}, "area_geojson": AREA_GEOJSON, }, format="json", ) force_authenticate(request, user=self.user) response = SensorListCreateView.as_view()(request) self.assertEqual(response.status_code, 201) self.assertEqual(response.data["code"], 201) self.assertEqual(response.data["data"]["name"], "zone-sensor") self.assertIn("zoning", response.data["data"]) self.assertGreater(response.data["data"]["zoning"]["zone_count"], 1) self.assertEqual( response.data["data"]["zoning"]["zone_count"], CropArea.objects.get().zone_count, ) self.assertEqual(CropArea.objects.count(), 1)