Seed and bootstrap users via user_login.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alberto-AudrixandCursor committed 2026-09-08 16:17:29 +07:00
1 parent 4f0abceb20
commit 4eed6b2e87
9 files changed
+65 -43

No files matched your search

+27 -14
View File
@@ -7,18 +7,32 @@ from rest_framework.test import APIClient
from apps.accounts.models import User
from apps.farms.models import Cycle, Flock, Kandang, Site
from apps.operations.models import FeedSacks, ManualInput
from apps.sync.models import CitySite
def _gm_visible_site(*, owner: User, site_name: str, code: str) -> Site:
"""GM scope only sees sites linked to an active CitySite they registered."""
city = CitySite.objects.create(
code=code,
name=site_name,
api_base_url=f"https://{code}.example/api/v1",
registered_by=owner,
)
return Site.objects.create(site_name=site_name, user=owner, city_site=city)
class FarmAPITests(TestCase):
def setUp(self):
self.user = User.objects.create_user(user_name="tester", password="secret")
self.user = User.objects.create_user(user_login="tester", password="secret")
self.admin = User.objects.create_user(
user_name="admin",
user_login="admin",
password="secret",
status=User.STATUS_DIRECTOR_ADMIN,
)
self.client = APIClient()
self.site = Site.objects.create(site_name="Sukawarna", user=self.user)
self.site = _gm_visible_site(
owner=self.user, site_name="Sukawarna", code="sukawarna"
)
self.kandang = Kandang.objects.create(kandang_name="Kandang 1", site=self.site)
def test_create_flock_under_kandang_requires_director_admin(self):
@@ -73,12 +87,9 @@ class FarmAPITests(TestCase):
doc_in_count=9000,
status=Cycle.STATUS_ACTIVE,
)
new_end = start + timedelta(days=39)
response = self.client.patch(
f"/api/v1/cycles/{cycle.pk}/",
{
"end_date": new_end.isoformat(),
"total_days": 40,
"doc_in_count": 9500,
"chick_in_weight": 42,
},
@@ -86,8 +97,8 @@ class FarmAPITests(TestCase):
)
self.assertEqual(response.status_code, 200, response.data)
cycle.refresh_from_db()
self.assertEqual(cycle.end_date, new_end)
self.assertEqual(cycle.total_days, 40)
# end_date is not writable via PATCH (close flow uses approve-close).
self.assertEqual(cycle.end_date, start + timedelta(days=34))
self.assertEqual(cycle.doc_in_count, 9500)
self.assertEqual(cycle.doc_in_weight, 42)
@@ -113,8 +124,8 @@ class FarmAPITests(TestCase):
self.assertEqual(cycle.status, Cycle.STATUS_ACTIVE)
def test_gm_can_approve_cycle_close(self):
gm = User.objects.create_user(user_name="gm_approver", password="x", status=User.STATUS_GM)
site = Site.objects.create(site_name="GM Site", user=gm)
gm = User.objects.create_user(user_login="gm_approver", password="x", status=User.STATUS_GM)
site = _gm_visible_site(owner=gm, site_name="GM Site", code="gm-approve")
kandang = Kandang.objects.create(kandang_name="Kandang GM", site=site)
self.client.force_authenticate(gm)
start = date(2026, 8, 1)
@@ -143,8 +154,8 @@ class FarmAPITests(TestCase):
self.assertEqual(cycle.end_date, proposed)
def test_gm_can_reject_cycle_close(self):
gm = User.objects.create_user(user_name="gm_rejector", password="x", status=User.STATUS_GM)
site = Site.objects.create(site_name="GM Reject Site", user=gm)
gm = User.objects.create_user(user_login="gm_rejector", password="x", status=User.STATUS_GM)
site = _gm_visible_site(owner=gm, site_name="GM Reject Site", code="gm-reject")
kandang = Kandang.objects.create(kandang_name="Kandang R", site=site)
self.client.force_authenticate(gm)
start = date(2026, 8, 1)
@@ -170,9 +181,11 @@ class FarmAPITests(TestCase):
def test_gm_admin_cannot_approve_cycle_close(self):
gm_admin = User.objects.create_user(
user_name="gm_admin_user", password="x", status=User.STATUS_GM_ADMIN
user_login="gm_admin_user", password="x", status=User.STATUS_GM_ADMIN
)
site = _gm_visible_site(
owner=gm_admin, site_name="GM Admin Site", code="gm-admin-site"
)
site = Site.objects.create(site_name="GM Admin Site", user=gm_admin)
kandang = Kandang.objects.create(kandang_name="Kandang GMA", site=site)
self.client.force_authenticate(gm_admin)
start = date(2026, 8, 1)