78 lines
3.0 KiB
Python
78 lines
3.0 KiB
Python
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)
|