diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index f0f96d431..f165b39a7 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -2805,6 +2805,147 @@ class CableTest(APITestCase): super(CableTest, self).setUp() + site = Site.objects.create(name='Test Site 1', slug='test-site-1') + self.manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') + devicetype = DeviceType.objects.create( + manufacturer=self.manufacturer, model='Test Device Type 1', slug='test-device-type-1' + ) + devicerole = DeviceRole.objects.create( + name='Test Device Role 1', slug='test-device-role-1', color='ff0000' + ) + self.device1 = Device.objects.create( + device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site + ) + self.device2 = Device.objects.create( + device_type=devicetype, device_role=devicerole, name='Test Device 2', site=site + ) + for device in [self.device1, self.device2]: + for i in range(0, 10): + Interface(device=device, form_factor=IFACE_FF_1GE_FIXED, name='eth{}'.format(i)).save() + + self.cable1 = Cable( + termination_a=self.device1.interfaces.get(name='eth0'), + termination_b=self.device2.interfaces.get(name='eth0'), + label='Test Cable 1' + ) + self.cable1.save() + self.cable2 = Cable( + termination_a=self.device1.interfaces.get(name='eth1'), + termination_b=self.device2.interfaces.get(name='eth1'), + label='Test Cable 2' + ) + self.cable2.save() + self.cable3 = Cable( + termination_a=self.device1.interfaces.get(name='eth2'), + termination_b=self.device2.interfaces.get(name='eth2'), + label='Test Cable 3' + ) + self.cable3.save() + + def test_get_cable(self): + + url = reverse('dcim-api:cable-detail', kwargs={'pk': self.cable1.pk}) + response = self.client.get(url, **self.header) + + self.assertEqual(response.data['id'], self.cable1.pk) + + def test_list_cables(self): + + url = reverse('dcim-api:cable-list') + response = self.client.get(url, **self.header) + + self.assertEqual(response.data['count'], 3) + + def test_create_cable(self): + + interface_a = self.device1.interfaces.get(name='eth3') + interface_b = self.device2.interfaces.get(name='eth3') + data = { + 'termination_a_type': 'dcim.interface', + 'termination_a_id': interface_a.pk, + 'termination_b_type': 'dcim.interface', + 'termination_b_id': interface_b.pk, + 'status': CONNECTION_STATUS_PLANNED, + 'label': 'Test Cable 4', + } + + url = reverse('dcim-api:cable-list') + response = self.client.post(url, data, format='json', **self.header) + + self.assertHttpStatus(response, status.HTTP_201_CREATED) + self.assertEqual(Cable.objects.count(), 4) + cable4 = Cable.objects.get(pk=response.data['id']) + self.assertEqual(cable4.termination_a, interface_a) + self.assertEqual(cable4.termination_b, interface_b) + self.assertEqual(cable4.status, data['status']) + self.assertEqual(cable4.label, data['label']) + + def test_create_cable_bulk(self): + + data = [ + { + 'termination_a_type': 'dcim.interface', + 'termination_a_id': self.device1.interfaces.get(name='eth3').pk, + 'termination_b_type': 'dcim.interface', + 'termination_b_id': self.device2.interfaces.get(name='eth3').pk, + 'label': 'Test Cable 4', + }, + { + 'termination_a_type': 'dcim.interface', + 'termination_a_id': self.device1.interfaces.get(name='eth4').pk, + 'termination_b_type': 'dcim.interface', + 'termination_b_id': self.device2.interfaces.get(name='eth4').pk, + 'label': 'Test Cable 5', + }, + { + 'termination_a_type': 'dcim.interface', + 'termination_a_id': self.device1.interfaces.get(name='eth5').pk, + 'termination_b_type': 'dcim.interface', + 'termination_b_id': self.device2.interfaces.get(name='eth5').pk, + 'label': 'Test Cable 6', + }, + ] + + url = reverse('dcim-api:cable-list') + response = self.client.post(url, data, format='json', **self.header) + + self.assertHttpStatus(response, status.HTTP_201_CREATED) + self.assertEqual(Cable.objects.count(), 6) + self.assertEqual(response.data[0]['label'], data[0]['label']) + self.assertEqual(response.data[1]['label'], data[1]['label']) + self.assertEqual(response.data[2]['label'], data[2]['label']) + + def test_update_cable(self): + + data = { + 'label': 'Test Cable X', + 'status': CONNECTION_STATUS_CONNECTED, + } + + url = reverse('dcim-api:cable-detail', kwargs={'pk': self.cable1.pk}) + response = self.client.patch(url, data, format='json', **self.header) + + self.assertHttpStatus(response, status.HTTP_200_OK) + self.assertEqual(Cable.objects.count(), 3) + cable1 = Cable.objects.get(pk=response.data['id']) + self.assertEqual(cable1.status, data['status']) + self.assertEqual(cable1.label, data['label']) + + def test_delete_cable(self): + + url = reverse('dcim-api:cable-detail', kwargs={'pk': self.cable1.pk}) + response = self.client.delete(url, **self.header) + + self.assertHttpStatus(response, status.HTTP_204_NO_CONTENT) + self.assertEqual(Cable.objects.count(), 2) + + +class ConnectionTest(APITestCase): + + def setUp(self): + + super(ConnectionTest, self).setUp() + self.site = Site.objects.create( name='Test Site 1', slug='test-site-1' ) @@ -3163,88 +3304,6 @@ class CableTest(APITestCase): self.assertEqual(circuittermination1.connected_endpoint, interface1) -class ConsoleConnectionTest(APITestCase): - - def setUp(self): - - super(ConsoleConnectionTest, self).setUp() - - site = Site.objects.create(name='Test Site 1', slug='test-site-1') - manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') - devicetype = DeviceType.objects.create( - manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1' - ) - devicerole = DeviceRole.objects.create( - name='Test Device Role 1', slug='test-device-role-1', color='ff0000' - ) - device1 = Device.objects.create( - device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site - ) - device2 = Device.objects.create( - device_type=devicetype, device_role=devicerole, name='Test Device 2', site=site - ) - consoleserverport1 = ConsoleServerPort.objects.create(device=device1, name='Test Console Server Port 1') - consoleserverport2 = ConsoleServerPort.objects.create(device=device1, name='Test Console Server Port 2') - consoleserverport3 = ConsoleServerPort.objects.create(device=device1, name='Test Console Server Port 3') - ConsolePort.objects.create( - device=device2, connected_endpoint=consoleserverport1, name='Test Console Port 1', connection_status=True - ) - ConsolePort.objects.create( - device=device2, connected_endpoint=consoleserverport2, name='Test Console Port 2', connection_status=True - ) - ConsolePort.objects.create( - device=device2, connected_endpoint=consoleserverport3, name='Test Console Port 3', connection_status=True - ) - - def test_list_consoleconnections(self): - - url = reverse('dcim-api:consoleconnections-list') - response = self.client.get(url, **self.header) - - self.assertEqual(response.data['count'], 3) - - -class PowerConnectionTest(APITestCase): - - def setUp(self): - - super(PowerConnectionTest, self).setUp() - - site = Site.objects.create(name='Test Site 1', slug='test-site-1') - manufacturer = Manufacturer.objects.create(name='Test Manufacturer 1', slug='test-manufacturer-1') - devicetype = DeviceType.objects.create( - manufacturer=manufacturer, model='Test Device Type 1', slug='test-device-type-1' - ) - devicerole = DeviceRole.objects.create( - name='Test Device Role 1', slug='test-device-role-1', color='ff0000' - ) - device1 = Device.objects.create( - device_type=devicetype, device_role=devicerole, name='Test Device 1', site=site - ) - device2 = Device.objects.create( - device_type=devicetype, device_role=devicerole, name='Test Device 2', site=site - ) - poweroutlet1 = PowerOutlet.objects.create(device=device1, name='Test Power Outlet 1') - poweroutlet2 = PowerOutlet.objects.create(device=device1, name='Test Power Outlet 2') - poweroutlet3 = PowerOutlet.objects.create(device=device1, name='Test Power Outlet 3') - PowerPort.objects.create( - device=device2, connected_endpoint=poweroutlet1, name='Test Power Port 1', connection_status=True - ) - PowerPort.objects.create( - device=device2, connected_endpoint=poweroutlet2, name='Test Power Port 2', connection_status=True - ) - PowerPort.objects.create( - device=device2, connected_endpoint=poweroutlet3, name='Test Power Port 3', connection_status=True - ) - - def test_list_powerconnections(self): - - url = reverse('dcim-api:powerconnections-list') - response = self.client.get(url, **self.header) - - self.assertEqual(response.data['count'], 3) - - # class ConnectedDeviceTest(APITestCase): # # def setUp(self):