Seed and bootstrap users via user_login.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
4f0abceb20
commit
4eed6b2e87
9 files changed
+65
-43
No files matched your search
+27
-14
@@ -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)
|
||||
|
||||
Reference in new issue
Block a user