UPDATE
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.test import TestCase
|
||||
from rest_framework.test import APIRequestFactory, force_authenticate
|
||||
|
||||
from farm_hub.models import FarmHub, FarmSensor, FarmType
|
||||
from sensor_catalog.models import SensorCatalog
|
||||
from sensor_external_api.models import SensorExternalRequestLog
|
||||
|
||||
from dashboard.services import get_farm_dashboard_cards
|
||||
|
||||
from .services import get_sensor_7_in_1_summary_data
|
||||
from .views import Sensor7In1SummaryView
|
||||
|
||||
|
||||
class Sensor7In1BaseTestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.factory = APIRequestFactory()
|
||||
self.user = get_user_model().objects.create_user(
|
||||
username="sensor-7-in-1-user",
|
||||
password="secret123",
|
||||
email="sensor7@example.com",
|
||||
phone_number="09120000017",
|
||||
)
|
||||
self.farm_type = FarmType.objects.create(name="مزرعه سنسور 7 در 1")
|
||||
self.farm = FarmHub.objects.create(
|
||||
owner=self.user,
|
||||
farm_type=self.farm_type,
|
||||
name="Farm Sensor 7 in 1",
|
||||
farm_uuid="11111111-1111-1111-1111-111111111111",
|
||||
)
|
||||
self.sensor_catalog = SensorCatalog.objects.create(
|
||||
code="sensor-7-in-1",
|
||||
name="7 in 1 Soil Sensor",
|
||||
returned_data_fields=[
|
||||
"soil_moisture",
|
||||
"soil_temperature",
|
||||
"soil_ph",
|
||||
"electrical_conductivity",
|
||||
"nitrogen",
|
||||
"phosphorus",
|
||||
"potassium",
|
||||
],
|
||||
)
|
||||
self.sensor = FarmSensor.objects.create(
|
||||
farm=self.farm,
|
||||
sensor_catalog=self.sensor_catalog,
|
||||
physical_device_uuid="33333333-3333-3333-3333-333333333333",
|
||||
name="Soil Sensor 7-in-1",
|
||||
sensor_type="soil_7_in_1",
|
||||
)
|
||||
SensorExternalRequestLog.objects.create(
|
||||
farm_uuid=self.farm.farm_uuid,
|
||||
sensor_catalog_uuid=self.sensor_catalog.uuid,
|
||||
physical_device_uuid=self.sensor.physical_device_uuid,
|
||||
payload={
|
||||
"soil_moisture": 41.0,
|
||||
"soil_temperature": 21.0,
|
||||
"soil_ph": 6.5,
|
||||
"electrical_conductivity": 1.0,
|
||||
"nitrogen": 28.0,
|
||||
"phosphorus": 14.0,
|
||||
"potassium": 19.0,
|
||||
},
|
||||
)
|
||||
self.latest_log = SensorExternalRequestLog.objects.create(
|
||||
farm_uuid=self.farm.farm_uuid,
|
||||
sensor_catalog_uuid=self.sensor_catalog.uuid,
|
||||
physical_device_uuid=self.sensor.physical_device_uuid,
|
||||
payload={
|
||||
"soil_moisture": 48.5,
|
||||
"soil_temperature": 23.2,
|
||||
"soil_ph": 6.8,
|
||||
"electrical_conductivity": 1.4,
|
||||
"nitrogen": 31.0,
|
||||
"phosphorus": 16.0,
|
||||
"potassium": 24.0,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
class Sensor7In1ServiceTests(Sensor7In1BaseTestCase):
|
||||
def test_summary_returns_latest_specific_sensor_data(self):
|
||||
data = get_sensor_7_in_1_summary_data(self.farm)
|
||||
|
||||
self.assertEqual(data["sensor"]["name"], "Soil Sensor 7-in-1")
|
||||
self.assertEqual(data["sensor"]["physicalDeviceUuid"], str(self.sensor.physical_device_uuid))
|
||||
self.assertEqual(data["sensorValuesList"]["sensors"][0]["id"], "soil_moisture")
|
||||
self.assertEqual(data["avgSoilMoisture"]["stats"], "48.5%")
|
||||
self.assertEqual(data["sensorComparisonChart"]["currentValue"], 48.5)
|
||||
self.assertEqual(data["soilMoistureHeatmap"]["series"][0]["name"], "Soil Sensor 7-in-1")
|
||||
|
||||
def test_dashboard_cards_use_sensor_service_outputs(self):
|
||||
cards = get_farm_dashboard_cards(self.farm)
|
||||
|
||||
self.assertEqual(cards["sensorValuesList"]["sensor"]["physicalDeviceUuid"], str(self.sensor.physical_device_uuid))
|
||||
self.assertEqual(cards["sensorValuesList"]["sensors"][0]["title"], "48.5%")
|
||||
self.assertEqual(cards["sensorRadarChart"]["series"][0]["name"], "اکنون")
|
||||
self.assertEqual(cards["soilMoistureHeatmap"]["series"][0]["name"], "Soil Sensor 7-in-1")
|
||||
self.assertEqual(cards["farmOverviewKpis"]["kpis"][2]["stats"], "48.5%")
|
||||
|
||||
|
||||
class Sensor7In1ViewTests(Sensor7In1BaseTestCase):
|
||||
def test_summary_view_returns_sensor_cards(self):
|
||||
request = self.factory.get(f"/api/sensor-7-in-1/summary/?farm_uuid={self.farm.farm_uuid}")
|
||||
force_authenticate(request, user=self.user)
|
||||
|
||||
response = Sensor7In1SummaryView.as_view()(request)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.data["code"], 200)
|
||||
self.assertEqual(response.data["data"]["sensor"]["sensorCatalogCode"], "sensor-7-in-1")
|
||||
|
||||
def test_summary_view_requires_farm_uuid(self):
|
||||
request = self.factory.get("/api/sensor-7-in-1/summary/")
|
||||
force_authenticate(request, user=self.user)
|
||||
|
||||
response = Sensor7In1SummaryView.as_view()(request)
|
||||
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertEqual(response.data["farm_uuid"][0], "This field is required.")
|
||||
Reference in New Issue
Block a user