Files
dashboard-cpsp/backend/apps/operations/tests_iot_sync.py
T

87 lines
3.2 KiB
Python

from datetime import timedelta
from django.test import Client, TestCase
from django.utils import timezone
from apps.accounts.models import User
from apps.farms.models import Cycle, Flock, Kandang, Site
from apps.operations.models import IotPanel
SAMPLE_PUSH_PAYLOAD = {
"suhu": "30.0",
"kelembapan": "70.0",
"wind": "5.0",
"flow": "12.0",
"total": "0.00",
}
class IotPanelPushTests(TestCase):
def setUp(self):
self.owner = User.objects.create_user(user_name="owner", password="secret")
self.site = Site.objects.create(site_name="Site A", user=self.owner)
self.kandang = Kandang.objects.create(kandang_name="Kandang 1", site=self.site)
self.flock = Flock.objects.create(
flock_name="Lantai 1",
kandang=self.kandang,
iot_api_url="http://192.168.1.100:1123/",
)
today = timezone.localdate()
Cycle.objects.create(
kandang=self.kandang,
start_date=today - timedelta(days=5),
end_date=today + timedelta(days=30),
doc_in_weight=40,
doc_in_count=10000,
)
self.client = Client()
def test_push_creates_panel(self):
response = self.client.post(
f"/api/v1/panel-iot/push/{self.flock.pk}/",
SAMPLE_PUSH_PAYLOAD,
content_type="application/json",
)
self.assertEqual(response.status_code, 200, response.content)
data = response.json()
self.assertTrue(data["ok"])
self.assertIsNotNone(data["panel_id"])
panel = IotPanel.objects.get(pk=data["panel_id"])
self.assertEqual(panel.flock_id, self.flock.pk)
self.assertAlmostEqual(panel.average_temperature, 30.0)
self.assertAlmostEqual(panel.humidity, 70.0)
self.assertAlmostEqual(panel.wind_speed, 5.0)
self.assertAlmostEqual(panel.water_total, 12.0)
def test_push_divides_by_10_when_over_100(self):
response = self.client.post(
f"/api/v1/panel-iot/push/{self.flock.pk}/",
{"suhu": "300", "kelembapan": "700", "wind": "50", "flow": "12.0", "total": "0"},
content_type="application/json",
)
self.assertEqual(response.status_code, 200, response.content)
panel = IotPanel.objects.get(pk=response.json()["panel_id"])
self.assertAlmostEqual(panel.average_temperature, 30.0)
self.assertAlmostEqual(panel.humidity, 70.0)
self.assertAlmostEqual(panel.wind_speed, 50.0)
def test_push_nonexistent_flock_returns_404(self):
response = self.client.post(
"/api/v1/panel-iot/push/99999/",
SAMPLE_PUSH_PAYLOAD,
content_type="application/json",
)
self.assertEqual(response.status_code, 404)
def test_push_computes_experience_temperature(self):
response = self.client.post(
f"/api/v1/panel-iot/push/{self.flock.pk}/",
SAMPLE_PUSH_PAYLOAD,
content_type="application/json",
)
self.assertEqual(response.status_code, 200)
panel = IotPanel.objects.get(pk=response.json()["panel_id"])
self.assertIsNotNone(panel.experience_temperature)
self.assertIsInstance(panel.experience_temperature, float)