update docker deployment and changing seed kandang name
This commit is contained in:
1 parent
76f4d0106a
commit
74dd3faf60
40 files changed
+1253
-122
No files matched your search
@@ -1,6 +1,7 @@
|
||||
from datetime import date, timedelta
|
||||
from unittest.mock import patch
|
||||
|
||||
from django.test import TestCase
|
||||
from django.test import TestCase, override_settings
|
||||
from rest_framework.test import APIClient
|
||||
|
||||
from apps.accounts.models import User
|
||||
@@ -8,6 +9,7 @@ from apps.farms.models import Cycle, Flock, Kandang, Site
|
||||
from apps.operations.models import ChickenWeight, FeedSacks, IotPanel
|
||||
|
||||
|
||||
@override_settings(DASHBOARD_PUBLISH_HOUR=0)
|
||||
class OperationsAPITests(TestCase):
|
||||
def setUp(self):
|
||||
self.user = User.objects.create_user(user_name="tester", password="secret")
|
||||
@@ -306,6 +308,112 @@ class OperationsAPITests(TestCase):
|
||||
self.assertEqual(kpi.harvest_weight_total, 20.5)
|
||||
|
||||
|
||||
@override_settings(DASHBOARD_PUBLISH_HOUR=17, TIME_ZONE="Asia/Jakarta")
|
||||
class DashboardVisibilityTests(TestCase):
|
||||
def setUp(self):
|
||||
self.user = User.objects.create_user(user_name="tester", password="secret")
|
||||
self.client = APIClient()
|
||||
self.client.force_authenticate(self.user)
|
||||
site = Site.objects.create(site_name="Sukawarna", user=self.user)
|
||||
self.kandang = Kandang.objects.create(kandang_name="Kandang 1", site=site)
|
||||
self.cycle = Cycle.objects.create(
|
||||
kandang=self.kandang,
|
||||
total_days=35,
|
||||
start_date=date(2026, 8, 26),
|
||||
end_date=date(2026, 9, 29),
|
||||
doc_in_weight=40,
|
||||
doc_in_count=10000,
|
||||
status=Cycle.STATUS_ACTIVE,
|
||||
)
|
||||
|
||||
def test_hides_today_before_publish_time(self):
|
||||
FeedSacks.objects.create(
|
||||
cycle=self.cycle,
|
||||
date=date(2026, 8, 27),
|
||||
in_today=5,
|
||||
out_today=3,
|
||||
feed_use_today=3,
|
||||
feed_use_total=3,
|
||||
)
|
||||
FeedSacks.objects.create(
|
||||
cycle=self.cycle,
|
||||
date=date(2026, 8, 28),
|
||||
in_today=9,
|
||||
out_today=7,
|
||||
feed_use_today=7,
|
||||
feed_use_total=10,
|
||||
)
|
||||
with patch(
|
||||
"apps.operations.services.visibility.timezone.localtime",
|
||||
) as mock_localtime:
|
||||
from datetime import datetime
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
wib = ZoneInfo("Asia/Jakarta")
|
||||
mock_localtime.return_value = datetime(2026, 8, 28, 16, 30, tzinfo=wib)
|
||||
response = self.client.get("/api/v1/karungs/", {"cycle_id": self.cycle.pk})
|
||||
self.assertEqual(response.status_code, 200, response.data)
|
||||
results = response.data["results"] if isinstance(response.data, dict) else response.data
|
||||
self.assertEqual(len(results), 1)
|
||||
self.assertEqual(results[0]["date"], "2026-08-27")
|
||||
|
||||
def test_shows_today_after_publish_time(self):
|
||||
FeedSacks.objects.create(
|
||||
cycle=self.cycle,
|
||||
date=date(2026, 8, 28),
|
||||
in_today=9,
|
||||
out_today=7,
|
||||
feed_use_today=7,
|
||||
feed_use_total=10,
|
||||
)
|
||||
with patch(
|
||||
"apps.operations.services.visibility.timezone.localtime",
|
||||
) as mock_localtime:
|
||||
from datetime import datetime
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
wib = ZoneInfo("Asia/Jakarta")
|
||||
mock_localtime.return_value = datetime(2026, 8, 28, 17, 0, tzinfo=wib)
|
||||
response = self.client.get("/api/v1/karungs/latest/", {"cycle_id": self.cycle.pk})
|
||||
self.assertEqual(response.status_code, 200, response.data)
|
||||
self.assertEqual(response.data["date"], "2026-08-28")
|
||||
|
||||
def test_panel_iot_not_hidden_before_publish_time(self):
|
||||
flock = Flock.objects.create(flock_name="Flock A", cycle=self.cycle)
|
||||
IotPanel.objects.create(
|
||||
flock=flock,
|
||||
date=date(2026, 8, 28),
|
||||
average_temperature=28.5,
|
||||
)
|
||||
with patch(
|
||||
"apps.operations.services.visibility.timezone.localtime",
|
||||
) as mock_localtime:
|
||||
from datetime import datetime
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
wib = ZoneInfo("Asia/Jakarta")
|
||||
mock_localtime.return_value = datetime(2026, 8, 28, 10, 0, tzinfo=wib)
|
||||
response = self.client.get("/api/v1/panel-iot/", {"cycle_id": self.cycle.pk})
|
||||
self.assertEqual(response.status_code, 200, response.data)
|
||||
results = response.data["results"] if isinstance(response.data, dict) else response.data
|
||||
self.assertEqual(len(results), 1)
|
||||
self.assertEqual(results[0]["date"], "2026-08-28")
|
||||
|
||||
def test_health_includes_visible_through_date(self):
|
||||
with patch(
|
||||
"apps.operations.services.visibility.timezone.localtime",
|
||||
) as mock_localtime:
|
||||
from datetime import datetime
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
wib = ZoneInfo("Asia/Jakarta")
|
||||
mock_localtime.return_value = datetime(2026, 8, 28, 10, 0, tzinfo=wib)
|
||||
response = self.client.get("/api/v1/health/")
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.data["visible_through_date"], "2026-08-27")
|
||||
self.assertEqual(response.data["dashboard_publish_time"], "17:00")
|
||||
|
||||
|
||||
class ErdPrimaryKeyTests(TestCase):
|
||||
ERD_PRIMARY_KEYS = {
|
||||
"user_access": "user_id",
|
||||
|
||||
Reference in new issue
Block a user