diff --git a/netbox/circuits/tests/__init__.py b/netbox/circuits/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/netbox/circuits/tests/test_api.py b/netbox/circuits/tests/test_api.py new file mode 100644 index 000000000..7f68e7814 --- /dev/null +++ b/netbox/circuits/tests/test_api.py @@ -0,0 +1,285 @@ +from rest_framework import status +from rest_framework.test import APITestCase + +from django.contrib.auth.models import User +from django.urls import reverse + +from dcim.models import Site +from circuits.models import Circuit, CircuitTermination, CircuitType, Provider, TERM_SIDE_A, TERM_SIDE_Z +from users.models import Token + + +class ProviderTest(APITestCase): + + def setUp(self): + + user = User.objects.create(username='testuser', is_superuser=True) + token = Token.objects.create(user=user) + self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)} + + self.provider1 = Provider.objects.create(name='Test Provider 1', slug='test-provider-1') + self.provider2 = Provider.objects.create(name='Test Provider 2', slug='test-provider-2') + self.provider3 = Provider.objects.create(name='Test Provider 3', slug='test-provider-3') + + def test_get_provider(self): + + url = reverse('circuits-api:provider-detail', kwargs={'pk': self.provider1.pk}) + response = self.client.get(url, **self.header) + + self.assertEqual(response.data['name'], self.provider1.name) + + def test_list_providers(self): + + url = reverse('circuits-api:provider-list') + response = self.client.get(url, **self.header) + + self.assertEqual(response.data['count'], 3) + + def test_create_provider(self): + + data = { + 'name': 'Test Provider 4', + 'slug': 'test-provider-4', + } + + url = reverse('circuits-api:provider-list') + response = self.client.post(url, data, **self.header) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + self.assertEqual(Provider.objects.count(), 4) + + def test_update_provider(self): + + data = { + 'name': 'Test Provider X', + 'slug': 'test-provider-x', + } + + url = reverse('circuits-api:provider-detail', kwargs={'pk': self.provider1.pk}) + response = self.client.put(url, data, **self.header) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(Provider.objects.count(), 3) + self.assertEqual(Provider.objects.get(pk=self.provider1.pk).name, data['name']) + self.assertEqual(Provider.objects.get(pk=self.provider1.pk).slug, data['slug']) + + def test_delete_provider(self): + + url = reverse('circuits-api:provider-detail', kwargs={'pk': self.provider1.pk}) + response = self.client.delete(url, **self.header) + + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + self.assertEqual(Provider.objects.count(), 2) + + +class CircuitTypeTest(APITestCase): + + def setUp(self): + + user = User.objects.create(username='testuser', is_superuser=True) + token = Token.objects.create(user=user) + self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)} + + self.circuittype1 = CircuitType.objects.create(name='Test Circuit Type 1', slug='test-circuit-type-1') + self.circuittype2 = CircuitType.objects.create(name='Test Circuit Type 2', slug='test-circuit-type-2') + self.circuittype3 = CircuitType.objects.create(name='Test Circuit Type 3', slug='test-circuit-type-3') + + def test_get_circuittype(self): + + url = reverse('circuits-api:circuittype-detail', kwargs={'pk': self.circuittype1.pk}) + response = self.client.get(url, **self.header) + + self.assertEqual(response.data['name'], self.circuittype1.name) + + def test_list_circuittypes(self): + + url = reverse('circuits-api:circuittype-list') + response = self.client.get(url, **self.header) + + self.assertEqual(response.data['count'], 3) + + def test_create_circuittype(self): + + data = { + 'name': 'Test Circuit Type 4', + 'slug': 'test-circuit-type-4', + } + + url = reverse('circuits-api:circuittype-list') + response = self.client.post(url, data, **self.header) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + self.assertEqual(CircuitType.objects.count(), 4) + + def test_update_circuittype(self): + + data = { + 'name': 'Test Circuit Type X', + 'slug': 'test-circuit-type-x', + } + + url = reverse('circuits-api:circuittype-detail', kwargs={'pk': self.circuittype1.pk}) + response = self.client.put(url, data, **self.header) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(CircuitType.objects.count(), 3) + self.assertEqual(CircuitType.objects.get(pk=self.circuittype1.pk).name, data['name']) + self.assertEqual(CircuitType.objects.get(pk=self.circuittype1.pk).slug, data['slug']) + + def test_delete_circuittype(self): + + url = reverse('circuits-api:circuittype-detail', kwargs={'pk': self.circuittype1.pk}) + response = self.client.delete(url, **self.header) + + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + self.assertEqual(CircuitType.objects.count(), 2) + + +class CircuitTest(APITestCase): + + def setUp(self): + + user = User.objects.create(username='testuser', is_superuser=True) + token = Token.objects.create(user=user) + self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)} + + self.provider1 = Provider.objects.create(name='Test Provider 1', slug='test-provider-1') + self.provider2 = Provider.objects.create(name='Test Provider 2', slug='test-provider-2') + self.circuittype1 = CircuitType.objects.create(name='Test Circuit Type 1', slug='test-circuit-type-1') + self.circuittype2 = CircuitType.objects.create(name='Test Circuit Type 2', slug='test-circuit-type-2') + self.circuit1 = Circuit.objects.create(cid='TEST0001', provider=self.provider1, type=self.circuittype1) + self.circuit2 = Circuit.objects.create(cid='TEST0002', provider=self.provider1, type=self.circuittype1) + self.circuit3 = Circuit.objects.create(cid='TEST0003', provider=self.provider1, type=self.circuittype1) + + def test_get_circuit(self): + + url = reverse('circuits-api:circuit-detail', kwargs={'pk': self.circuit1.pk}) + response = self.client.get(url, **self.header) + + self.assertEqual(response.data['cid'], self.circuit1.cid) + + def test_list_circuits(self): + + url = reverse('circuits-api:circuit-list') + response = self.client.get(url, **self.header) + + self.assertEqual(response.data['count'], 3) + + def test_create_circuit(self): + + data = { + 'cid': 'TEST0004', + 'provider': self.provider1.pk, + 'type': self.circuittype1.pk, + } + + url = reverse('circuits-api:circuit-list') + response = self.client.post(url, data, **self.header) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + self.assertEqual(Circuit.objects.count(), 4) + + def test_update_circuit(self): + + data = { + 'cid': 'TEST000X', + 'provider': self.provider2.pk, + 'type': self.circuittype2.pk, + } + + url = reverse('circuits-api:circuit-detail', kwargs={'pk': self.circuit1.pk}) + response = self.client.put(url, data, **self.header) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(Circuit.objects.count(), 3) + self.assertEqual(Circuit.objects.get(pk=self.circuit1.pk).cid, data['cid']) + self.assertEqual(Circuit.objects.get(pk=self.circuit1.pk).provider_id, data['provider']) + self.assertEqual(Circuit.objects.get(pk=self.circuit1.pk).type_id, data['type']) + + def test_delete_circuit(self): + + url = reverse('circuits-api:circuit-detail', kwargs={'pk': self.circuit1.pk}) + response = self.client.delete(url, **self.header) + + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + self.assertEqual(Circuit.objects.count(), 2) + + +class CircuitTerminationTest(APITestCase): + + def setUp(self): + + user = User.objects.create(username='testuser', is_superuser=True) + token = Token.objects.create(user=user) + self.header = {'HTTP_AUTHORIZATION': 'Token {}'.format(token.key)} + + provider = Provider.objects.create(name='Test Provider', slug='test-provider') + circuittype = CircuitType.objects.create(name='Test Circuit Type', slug='test-circuit-type') + self.circuit1 = Circuit.objects.create(cid='TEST0001', provider=provider, type=circuittype) + self.circuit2 = Circuit.objects.create(cid='TEST0002', provider=provider, type=circuittype) + self.circuit3 = Circuit.objects.create(cid='TEST0003', provider=provider, type=circuittype) + self.site1 = Site.objects.create(name='Test Site 1', slug='test-site-1') + self.site2 = Site.objects.create(name='Test Site 2', slug='test-site-2') + self.circuittermination1 = CircuitTermination.objects.create( + circuit=self.circuit1, term_side=TERM_SIDE_A, site=self.site1, port_speed=1000000 + ) + self.circuittermination2 = CircuitTermination.objects.create( + circuit=self.circuit2, term_side=TERM_SIDE_A, site=self.site1, port_speed=1000000 + ) + self.circuittermination3 = CircuitTermination.objects.create( + circuit=self.circuit3, term_side=TERM_SIDE_A, site=self.site1, port_speed=1000000 + ) + + def test_get_circuittermination(self): + + url = reverse('circuits-api:circuittermination-detail', kwargs={'pk': self.circuittermination1.pk}) + response = self.client.get(url, **self.header) + + self.assertEqual(response.data['id'], self.circuittermination1.pk) + + def test_list_circuitterminations(self): + + url = reverse('circuits-api:circuittermination-list') + response = self.client.get(url, **self.header) + + self.assertEqual(response.data['count'], 3) + + def test_create_circuittermination(self): + + data = { + 'circuit': self.circuit1.pk, + 'term_side': TERM_SIDE_Z, + 'site': self.site2.pk, + 'port_speed': 1000000, + } + + url = reverse('circuits-api:circuittermination-list') + response = self.client.post(url, data, **self.header) + + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + self.assertEqual(CircuitTermination.objects.count(), 4) + + def test_update_circuittermination(self): + + data = { + 'circuit': self.circuit1.pk, + 'term_side': TERM_SIDE_Z, + 'site': self.site2.pk, + 'port_speed': 1000000, + } + + url = reverse('circuits-api:circuittermination-detail', kwargs={'pk': self.circuittermination1.pk}) + response = self.client.put(url, data, **self.header) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(CircuitTermination.objects.count(), 3) + self.assertEqual(CircuitTermination.objects.get(pk=self.circuittermination1.pk).site_id, data['site']) + self.assertEqual(CircuitTermination.objects.get(pk=self.circuittermination1.pk).term_side, data['term_side']) + + def test_delete_circuittermination(self): + + url = reverse('circuits-api:circuittermination-detail', kwargs={'pk': self.circuittermination1.pk}) + response = self.client.delete(url, **self.header) + + self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) + self.assertEqual(CircuitTermination.objects.count(), 2)