old_console/devices/tests/test_group_devices_api.py
2024-11-02 14:12:45 +03:00

133 lines
5.5 KiB
Python

from unittest.mock import patch
import pytest
from rest_framework import status
from rest_framework.reverse import reverse
from devices.enums import DeviceType
from devices.models.device import Device, DeviceGroup
from devices.models.endpoint_device import EndpointModel
from devices.tests.endpoint_utils import mock_redis_return_online
@pytest.mark.unit
@pytest.mark.django_db
class TestDeviceGroupAPI:
@pytest.fixture(autouse=True)
def setup_tests(self, django_user_model):
self.admin_user = django_user_model.objects.get(username='admin')
self.device1 = Device.objects.create(ip='1.1.1.1', port='1500', type='firewall')
self.device2 = Device.objects.create(ip='2.2.2.2', port='5555', type='firewall')
DeviceGroup.objects.create(name='group1')
DeviceGroup.objects.create(name='group2', description='description2')
def test_getting_list_of_device_group(self, api_client):
api_client.force_authenticate(self.admin_user)
response = api_client.get(reverse('device-groups-list'))
assert response.data['count'] == 2
assert response.data['results'][0]['name'] == 'group1'
assert response.data['results'][0]['description'] is None
assert response.data['results'][1]['name'] == 'group2'
assert response.data['results'][1]['description'] == 'description2'
def test_getting_device_group(self, api_client):
api_client.force_authenticate(self.admin_user)
group = DeviceGroup.objects.create(name='group')
response = api_client.get(reverse('device-groups-detail', kwargs={'pk': group.pk}))
assert response.status_code == status.HTTP_200_OK
assert response.data['name'] == 'group'
def test_updating_device_group_with_valid_data(self, api_client):
api_client.force_authenticate(self.admin_user)
group = DeviceGroup.objects.create(name='group')
response = api_client.patch(
reverse('device-groups-detail', kwargs={'pk': group.pk}),
data={'name': 'new_name_group', 'description': 'description'}
)
assert response.status_code == status.HTTP_200_OK
assert response.data['name'] == 'new_name_group'
assert response.data['description'] == 'description'
group = DeviceGroup.objects.get(pk=group.pk)
assert group.name == 'new_name_group'
assert group.description == 'description'
def test_updating_device_with_invalid_data(self, api_client):
api_client.force_authenticate(self.admin_user)
group = DeviceGroup.objects.create(name='group')
group_id = group.pk
response = api_client.patch(
reverse('device-groups-detail', kwargs={'pk': group_id}),
data={'name': '', 'description': 'test'} # invalid name
)
assert response.status_code == status.HTTP_400_BAD_REQUEST
assert 'name' in response.data
# device doesnt update
group = DeviceGroup.objects.get(pk=group_id)
assert group.name == 'group'
assert group.description is None
def test_deleting_device_group(self, api_client):
api_client.force_authenticate(self.admin_user)
group = DeviceGroup.objects.create(name='group')
group_pk = group.pk
response = api_client.delete(
reverse('device-groups-detail', kwargs={'pk': group_pk}),
)
assert response.status_code == status.HTTP_204_NO_CONTENT
response = api_client.get(
reverse('device-groups-detail', kwargs={'pk': group_pk}),
)
assert response.status_code == status.HTTP_404_NOT_FOUND
def test_manage_device_in_group(self, api_client):
api_client.force_authenticate(self.admin_user)
group = DeviceGroup.objects.create(name='group')
assert group.devices.count() == 0
self.device1.group = group
self.device1.save()
response = api_client.get(reverse('device-groups-detail', kwargs={'pk': group.pk}))
assert response.status_code == status.HTTP_200_OK
assert response.data['devices'] == [{'id': self.device1.pk, 'name': self.device2.name}]
# add device to group
response = api_client.patch(
reverse('device-groups-detail', kwargs={'pk': group.pk}),
data={'devices': [self.device1.pk, self.device2.pk]}
)
assert response.status_code == status.HTTP_200_OK
assert response.data['devices'] == [
{'id': self.device1.pk, 'name': self.device1.name},
{'id': self.device2.pk, 'name': self.device2.name},
]
# remove one device
response = api_client.patch(
reverse('device-groups-detail', kwargs={'pk': group.pk}),
data={'devices': [self.device2.pk]}
)
assert response.status_code == status.HTTP_200_OK
assert response.data['devices'] == [{'id': self.device2.pk, 'name': self.device2.name}]
# remove all device
response = api_client.patch(
reverse('device-groups-detail', kwargs={'pk': group.pk}),
data={'devices': []},
format='json'
)
assert response.status_code == status.HTTP_200_OK
assert response.data['devices'] == []
def test_create_device_group_without_devices(self, api_client):
api_client.force_authenticate(self.admin_user)
response = api_client.post(reverse('device-groups-list'), data={'name': 'group', 'description': 'group'})
assert response.status_code == status.HTTP_201_CREATED
assert response.data['devices'] == []