from django.test import Client, TestCase from apps.accounts.models import User from apps.farms.models import Kandang, Site class KandangFeedInButtonUrlTests(TestCase): def setUp(self): self.owner = User.objects.create_user(user_name="owner", password="secret") self.admin = User.objects.create_user( user_name="admin", password="admin123", status=User.STATUS_SUPERADMIN, is_superuser=True, ) self.staff = User.objects.create_user( user_name="staff", password="staff123", status=User.STATUS_ACTIVE, is_staff=True, ) 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.payload = { "feed_in_button_urls": [{"label": "Gudang A", "url": "http://192.168.1.10:8080/"}] } def _csrf_headers(self, client: Client) -> dict[str, str]: token = client.cookies["csrftoken"].value return {"HTTP_X_CSRFTOKEN": token} def _login(self, client: Client, user_name: str, password: str) -> None: client.get("/api/v1/auth/csrf/") response = client.post( "/api/v1/auth/login/", {"user_name": user_name, "password": password}, content_type="application/json", **self._csrf_headers(client), ) self.assertEqual(response.status_code, 200, response.content) def test_superadmin_can_save_feed_in_button_urls(self): client = Client(enforce_csrf_checks=True) self._login(client, "admin", "admin123") response = client.patch( f"/api/v1/kandangs/{self.kandang.pk}/", self.payload, content_type="application/json", **self._csrf_headers(client), ) self.assertEqual(response.status_code, 200, response.content) self.kandang.refresh_from_db() self.assertEqual(self.kandang.feed_in_button_urls, self.payload["feed_in_button_urls"]) def test_staff_cannot_save_feed_in_button_urls(self): client = Client(enforce_csrf_checks=True) self._login(client, "staff", "staff123") response = client.patch( f"/api/v1/kandangs/{self.kandang.pk}/", self.payload, content_type="application/json", **self._csrf_headers(client), ) self.assertEqual(response.status_code, 403, response.content) self.kandang.refresh_from_db() self.assertEqual(self.kandang.feed_in_button_urls, []) def test_staff_cannot_rename_kandang(self): client = Client(enforce_csrf_checks=True) self._login(client, "staff", "staff123") response = client.patch( f"/api/v1/kandangs/{self.kandang.pk}/", {"kandang_name": "Renamed"}, content_type="application/json", **self._csrf_headers(client), ) self.assertEqual(response.status_code, 403, response.content)