from rest_framework.test import APITestCase
from rest_framework import status
from apps.core.models.area import Area
[docs]class DeviceTestCase(APITestCase):
[docs] def setUp(self):
self.cpu_parent_area = Area.objects.create(
office_name="CPU",
)
self.aula_parent_area = Area.objects.create(
office_name="Aula",
)
self.lvt_parent_area = Area.objects.create(
office_name="LVT",
)
[docs] def test_add_new_area(self):
data = {
"office_name": "CPU-A",
"parent_area": self.cpu_parent_area.id,
}
response = self.client.post(f"/api/areas", data=data, format="json")
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(response.data["office_name"], "CPU-A")
self.assertEqual(response.data["parent_area"], self.cpu_parent_area.id)
data = {
"office_name": "CPU-A",
"parent_area": self.cpu_parent_area.id,
}
response = self.client.post(f"/api/areas", data=data, format="json")
# cannot add new area if the name already exists in db
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
[docs] def test_get_list_of_areas(self):
response = self.client.get(f"/api/areas", format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data), 3)
[docs] def test_get_specific_area(self):
response = self.client.get(
f"/api/areas/{self.cpu_parent_area.id}", format="json"
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data["office_name"], "CPU")
random_id = "a1113288-2c73-488d-baff-df53dec2c6b3"
response = self.client.get(f"/api/areas/{random_id}", format="json")
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
[docs] def test_update_specific_area(self):
data = {
"office_name": "test-area",
}
test_area = self.client.post(f"/api/areas", data=data, format="json")
self.assertEqual(test_area.status_code, status.HTTP_201_CREATED)
self.assertEqual(test_area.data["parent_area"], None)
data = {
"office_name": "test-area-new-name",
"parent_area": self.aula_parent_area.id,
}
response = self.client.put(
f"/api/areas/{test_area.data['id']}", data=data, format="json"
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data["parent_area"], self.aula_parent_area.id)
self.assertEqual(response.data["office_name"], "test-area-new-name")
data = {"office_name": "CPU", "parent_area": self.aula_parent_area.id}
# cannot update the name if already exists
response = self.client.put(
f"/api/areas/{test_area.data['id']}", data=data, format="json"
)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
[docs] def test_delete_area(self):
parent_area_data = {
"office_name": "PARENT_AREA",
"parent_area": None
}
parent_area = self.client.post(f"/api/areas", data=parent_area_data, format="json")
data = {
"office_name": "CPU-B",
"parent_area": parent_area.data['id'],
}
cpu_b = self.client.post(f"/api/areas", data=data, format="json")
# delete parent area
response = self.client.delete(f"/api/areas/{parent_area.data['id']}")
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
response = self.client.get(f"/api/areas/{parent_area.data['id']}")
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
# check if children was deleted too
# Cascade delete do not work with soft delete
# response = self.client.get(f"/api/areas/{cpu_b.data['id']}")
# self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)