mirror of
https://github.com/i701/sarlink-portal-api.git
synced 2025-04-20 05:56:52 +00:00
All checks were successful
Build and Push Docker Images / Build and Push Docker Images (push) Successful in 2m23s
80 lines
3.4 KiB
Python
80 lines
3.4 KiB
Python
from rest_framework.test import APITestCase
|
|
from rest_framework import status
|
|
from django.contrib.auth import get_user_model
|
|
from .models import Device
|
|
from django.contrib.auth.models import Permission
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
class DeviceAPITestCase(APITestCase):
|
|
def setUp(self):
|
|
self.user = User.objects.create_user(username="testuser", password="password")
|
|
self.user.user_permissions.add(
|
|
Permission.objects.get(codename="add_device"),
|
|
Permission.objects.get(codename="delete_device"),
|
|
Permission.objects.get(codename="view_device"),
|
|
Permission.objects.get(codename="change_device"),
|
|
)
|
|
self.superuser = User.objects.create_superuser(
|
|
username="admin", password="password", email="admin@example.com"
|
|
)
|
|
self.device = Device.objects.create(
|
|
name="Test Device", mac="00:1A:2B:3C:4D:5E", user=self.user
|
|
)
|
|
self.client.login(
|
|
username="testuser", password="password", email="admin@example.com"
|
|
)
|
|
self.token = self.client.post(
|
|
"/api/auth/login/",
|
|
{"username": "admin@example.com", "password": "password"},
|
|
).data["token"]
|
|
|
|
def test_list_devices(self):
|
|
self.client.credentials(HTTP_AUTHORIZATION=f"Token {self.token}")
|
|
response = self.client.get("/api/devices/")
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
|
|
def test_create_device(self):
|
|
self.client.credentials(HTTP_AUTHORIZATION=f"Token {self.token}")
|
|
data = {"name": "New Device", "mac": "11:22:33:44:55:66"}
|
|
response = self.client.post("/api/devices/", data)
|
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
|
|
|
def test_create_device_invalid_mac(self):
|
|
self.client.credentials(HTTP_AUTHORIZATION=f"Token {self.token}")
|
|
data = {"name": "Invalid Device", "mac": "invalid-mac"}
|
|
response = self.client.post("/api/devices/", data)
|
|
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
|
|
self.assertIn("Invalid mac address.", response.data["message"])
|
|
|
|
def test_update_device(self):
|
|
self.client.credentials(HTTP_AUTHORIZATION=f"Token {self.token}")
|
|
data = {"name": "Updated Device"}
|
|
response = self.client.patch(f"/api/devices/{self.device.pk}/update/", data)
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
self.device.refresh_from_db()
|
|
self.assertEqual(self.device.name, "Updated Device")
|
|
|
|
def test_block_device(self):
|
|
self.client.credentials(HTTP_AUTHORIZATION=f"Token {self.token}")
|
|
data = {
|
|
"blocked": True, # also use Python boolean here, not a string
|
|
"reason_for_blocking": "hello",
|
|
"blocked_by": "ADMIN",
|
|
}
|
|
response = self.client.put(
|
|
f"/api/devices/{self.device.pk}/block/",
|
|
data,
|
|
format="json", # ✅ this is crucial!
|
|
)
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
self.device.refresh_from_db()
|
|
self.assertTrue(self.device.blocked)
|
|
|
|
def test_delete_device(self):
|
|
self.client.credentials(HTTP_AUTHORIZATION=f"Token {self.token}")
|
|
response = self.client.delete(f"/api/devices/{self.device.pk}/delete/")
|
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
|
self.assertFalse(Device.objects.filter(pk=self.device.pk).exists())
|