update api configuration for panel iot and adjust ai insight
This commit is contained in:
1 parent
a2b5b10977
commit
20d04acb3e
20 files changed
+814
-177
No files matched your search
@@ -0,0 +1,96 @@
|
||||
from django.test import Client, TestCase
|
||||
|
||||
from apps.accounts.models import User
|
||||
from apps.farms.models import Flock, Kandang, Site
|
||||
|
||||
|
||||
class FlockIotApiUrlTests(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.flock = Flock.objects.create(flock_name="Lantai 1", kandang=self.kandang)
|
||||
|
||||
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_set_iot_api_url(self):
|
||||
client = Client(enforce_csrf_checks=True)
|
||||
self._login(client, "admin", "admin123")
|
||||
url = "https://example.test/iot/lantai-1"
|
||||
response = client.patch(
|
||||
f"/api/v1/flocks/{self.flock.pk}/",
|
||||
{"iot_api_url": f" {url} "},
|
||||
content_type="application/json",
|
||||
**self._csrf_headers(client),
|
||||
)
|
||||
self.assertEqual(response.status_code, 200, response.content)
|
||||
self.assertEqual(response.json()["iot_api_url"], url)
|
||||
self.flock.refresh_from_db()
|
||||
self.assertEqual(self.flock.iot_api_url, url)
|
||||
|
||||
def test_superadmin_can_clear_iot_api_url(self):
|
||||
self.flock.iot_api_url = "https://example.test/iot/lantai-1"
|
||||
self.flock.save(update_fields=["iot_api_url"])
|
||||
client = Client(enforce_csrf_checks=True)
|
||||
self._login(client, "admin", "admin123")
|
||||
response = client.patch(
|
||||
f"/api/v1/flocks/{self.flock.pk}/",
|
||||
{"iot_api_url": ""},
|
||||
content_type="application/json",
|
||||
**self._csrf_headers(client),
|
||||
)
|
||||
self.assertEqual(response.status_code, 200, response.content)
|
||||
self.flock.refresh_from_db()
|
||||
self.assertEqual(self.flock.iot_api_url, "")
|
||||
|
||||
def test_staff_cannot_set_iot_api_url(self):
|
||||
client = Client(enforce_csrf_checks=True)
|
||||
self._login(client, "staff", "staff123")
|
||||
response = client.patch(
|
||||
f"/api/v1/flocks/{self.flock.pk}/",
|
||||
{"iot_api_url": "https://example.test/iot/lantai-1"},
|
||||
content_type="application/json",
|
||||
**self._csrf_headers(client),
|
||||
)
|
||||
self.assertEqual(response.status_code, 403, response.content)
|
||||
self.flock.refresh_from_db()
|
||||
self.assertEqual(self.flock.iot_api_url, "")
|
||||
|
||||
def test_create_flock_without_iot_api_url(self):
|
||||
client = Client(enforce_csrf_checks=True)
|
||||
self._login(client, "admin", "admin123")
|
||||
response = client.post(
|
||||
"/api/v1/flocks/",
|
||||
{"flock_name": "Lantai 2", "kandang": self.kandang.pk},
|
||||
content_type="application/json",
|
||||
**self._csrf_headers(client),
|
||||
)
|
||||
self.assertEqual(response.status_code, 201, response.content)
|
||||
data = response.json()
|
||||
self.assertEqual(data.get("iot_api_url", ""), "")
|
||||
flock = Flock.objects.get(pk=data["id"])
|
||||
self.assertEqual(flock.iot_api_url, "")
|
||||
Reference in new issue
Block a user