Convert all DCIM component view tests to use StandardTestCases

This commit is contained in:
Jeremy Stretch 2020-02-04 14:25:02 -05:00
parent bece1155ee
commit 763d9b9cf7

View File

@ -1,4 +1,3 @@
import urllib.parse
from decimal import Decimal from decimal import Decimal
import pytz import pytz
@ -6,22 +5,24 @@ import yaml
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.urls import reverse from django.urls import reverse
from netaddr import EUI
from dcim.choices import * from dcim.choices import *
from dcim.constants import * from dcim.constants import *
from dcim.models import * from dcim.models import *
from utilities.testing import StandardTestCases, TestCase from ipam.models import VLAN
from utilities.testing import StandardTestCases
def create_test_device(name): def create_test_device(name):
""" """
Convenience method for creating a Device (e.g. for component testing). Convenience method for creating a Device (e.g. for component testing).
""" """
site = Site.objects.create(name='Site 1', slug='site-1') site, _ = Site.objects.get_or_create(name='Site 1', slug='site-1')
manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') manufacturer, _ = Manufacturer.objects.get_or_create(name='Manufacturer 1', slug='manufacturer-1')
devicetype = DeviceType.objects.create(model='Device Type 1', manufacturer=manufacturer) devicetype, _ = DeviceType.objects.get_or_create(model='Device Type 1', manufacturer=manufacturer)
devicerole = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') devicerole, _ = DeviceRole.objects.get_or_create(name='Device Role 1', slug='device-role-1')
device = Device.objects.create(name='Device 1', site=site, device_type=devicetype, device_role=devicerole) device = Device.objects.create(name=name, site=site, device_type=devicetype, device_role=devicerole)
return device return device
@ -676,11 +677,16 @@ class DeviceTestCase(StandardTestCases.Views):
} }
# TODO: Convert to StandardTestCases.Views class ConsolePortTestCase(StandardTestCases.Views):
class ConsolePortTestCase(TestCase): model = ConsolePort
user_permissions = (
'dcim.view_consoleport', # Disable inapplicable views
) test_get_object = None
test_bulk_edit_objects = None
# TODO
test_create_object = None
test_bulk_delete_objects = None
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
@ -692,34 +698,37 @@ class ConsolePortTestCase(TestCase):
ConsolePort(device=device, name='Console Port 3'), ConsolePort(device=device, name='Console Port 3'),
]) ])
def test_consoleport_list(self): cls.form_data = {
'device': device.pk,
'name': 'Console Port X',
'type': ConsolePortTypeChoices.TYPE_RJ45,
'description': 'A console port',
'tags': 'Alpha,Bravo,Charlie',
url = reverse('dcim:consoleport_list') # Extraneous model fields
'cable': None,
'connected_endpoint': None,
'connection_status': None,
}
response = self.client.get(url) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_consoleport_import(self):
self.add_permissions('dcim.add_consoleport')
csv_data = (
"device,name", "device,name",
"Device 1,Console Port 4", "Device 1,Console Port 4",
"Device 1,Console Port 5", "Device 1,Console Port 5",
"Device 1,Console Port 6", "Device 1,Console Port 6",
) )
response = self.client.post(reverse('dcim:consoleport_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class ConsoleServerPortTestCase(StandardTestCases.Views):
self.assertEqual(ConsolePort.objects.count(), 6) model = ConsoleServerPort
# Disable inapplicable views
test_get_object = None
# TODO: Convert to StandardTestCases.Views # TODO
class ConsoleServerPortTestCase(TestCase): test_create_object = None
user_permissions = ( test_bulk_edit_objects = None
'dcim.view_consoleserverport', test_bulk_delete_objects = None
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
@ -731,34 +740,36 @@ class ConsoleServerPortTestCase(TestCase):
ConsoleServerPort(device=device, name='Console Server Port 3'), ConsoleServerPort(device=device, name='Console Server Port 3'),
]) ])
def test_consoleserverport_list(self): cls.form_data = {
'device': device.pk,
'name': 'Console Server Port X',
'type': ConsolePortTypeChoices.TYPE_RJ45,
'description': 'A console server port',
'tags': 'Alpha,Bravo,Charlie',
url = reverse('dcim:consoleserverport_list') # Extraneous model fields
'cable': None,
'connection_status': None,
}
response = self.client.get(url) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_consoleserverport_import(self):
self.add_permissions('dcim.add_consoleserverport')
csv_data = (
"device,name", "device,name",
"Device 1,Console Server Port 4", "Device 1,Console Server Port 4",
"Device 1,Console Server Port 5", "Device 1,Console Server Port 5",
"Device 1,Console Server Port 6", "Device 1,Console Server Port 6",
) )
response = self.client.post(reverse('dcim:consoleserverport_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class PowerPortTestCase(StandardTestCases.Views):
self.assertEqual(ConsoleServerPort.objects.count(), 6) model = PowerPort
# Disable inapplicable views
test_get_object = None
test_bulk_edit_objects = None
# TODO: Convert to StandardTestCases.Views # TODO
class PowerPortTestCase(TestCase): test_create_object = None
user_permissions = ( test_bulk_delete_objects = None
'dcim.view_powerport',
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
@ -770,73 +781,84 @@ class PowerPortTestCase(TestCase):
PowerPort(device=device, name='Power Port 3'), PowerPort(device=device, name='Power Port 3'),
]) ])
def test_powerport_list(self): cls.form_data = {
'device': device.pk,
'name': 'Power Port X',
'type': PowerPortTypeChoices.TYPE_IEC_C14,
'maximum_draw': 100,
'allocated_draw': 50,
'description': 'A power port',
'tags': 'Alpha,Bravo,Charlie',
url = reverse('dcim:powerport_list') # Extraneous model fields
'cable': None,
'connection_status': None,
}
response = self.client.get(url) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_powerport_import(self):
self.add_permissions('dcim.add_powerport')
csv_data = (
"device,name", "device,name",
"Device 1,Power Port 4", "Device 1,Power Port 4",
"Device 1,Power Port 5", "Device 1,Power Port 5",
"Device 1,Power Port 6", "Device 1,Power Port 6",
) )
response = self.client.post(reverse('dcim:powerport_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class PowerOutletTestCase(StandardTestCases.Views):
self.assertEqual(PowerPort.objects.count(), 6) model = PowerOutlet
# Disable inapplicable views
test_get_object = None
# TODO: Convert to StandardTestCases.Views # TODO
class PowerOutletTestCase(TestCase): test_create_object = None
user_permissions = ( test_bulk_edit_objects = None
'dcim.view_poweroutlet', test_bulk_delete_objects = None
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
device = create_test_device('Device 1') device = create_test_device('Device 1')
powerports = (
PowerPort(device=device, name='Power Port 1'),
PowerPort(device=device, name='Power Port 2'),
)
PowerPort.objects.bulk_create(powerports)
PowerOutlet.objects.bulk_create([ PowerOutlet.objects.bulk_create([
PowerOutlet(device=device, name='Power Outlet 1'), PowerOutlet(device=device, name='Power Outlet 1', power_port=powerports[0]),
PowerOutlet(device=device, name='Power Outlet 2'), PowerOutlet(device=device, name='Power Outlet 2', power_port=powerports[0]),
PowerOutlet(device=device, name='Power Outlet 3'), PowerOutlet(device=device, name='Power Outlet 3', power_port=powerports[0]),
]) ])
def test_poweroutlet_list(self): cls.form_data = {
'device': device.pk,
'name': 'Power Outlet X',
'type': PowerOutletTypeChoices.TYPE_IEC_C13,
'power_port': powerports[1].pk,
'feed_leg': PowerOutletFeedLegChoices.FEED_LEG_B,
'description': 'A power outlet',
'tags': 'Alpha,Bravo,Charlie',
url = reverse('dcim:poweroutlet_list') # Extraneous model fields
'cable': None,
'connection_status': None,
}
response = self.client.get(url) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_poweroutlet_import(self):
self.add_permissions('dcim.add_poweroutlet')
csv_data = (
"device,name", "device,name",
"Device 1,Power Outlet 4", "Device 1,Power Outlet 4",
"Device 1,Power Outlet 5", "Device 1,Power Outlet 5",
"Device 1,Power Outlet 6", "Device 1,Power Outlet 6",
) )
response = self.client.post(reverse('dcim:poweroutlet_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class InterfaceTestCase(StandardTestCases.Views):
self.assertEqual(PowerOutlet.objects.count(), 6) model = Interface
# TODO
# TODO: Convert to StandardTestCases.Views test_create_object = None
class InterfaceTestCase(TestCase): test_bulk_edit_objects = None
user_permissions = ( test_bulk_delete_objects = None
'dcim.view_interface',
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
@ -848,85 +870,105 @@ class InterfaceTestCase(TestCase):
Interface(device=device, name='Interface 3'), Interface(device=device, name='Interface 3'),
]) ])
def test_interface_list(self): vlans = (
VLAN(vid=1, name='VLAN1', site=device.site),
VLAN(vid=101, name='VLAN101', site=device.site),
VLAN(vid=102, name='VLAN102', site=device.site),
VLAN(vid=103, name='VLAN103', site=device.site),
)
VLAN.objects.bulk_create(vlans)
url = reverse('dcim:interface_list') cls.form_data = {
'device': device.pk,
'virtual_machine': None,
'name': 'Interface X',
'type': InterfaceTypeChoices.TYPE_1GE_GBIC,
'enabled': False,
'lag': None,
'mac_address': EUI('01:02:03:04:05:06'),
'mtu': 2000,
'mgmt_only': True,
'description': 'New description',
'mode': InterfaceModeChoices.MODE_TAGGED,
'untagged_vlan': vlans[0].pk,
'tagged_vlans': [v.pk for v in vlans[1:4]],
'tags': 'Alpha,Bravo,Charlie',
response = self.client.get(url) # Extraneous model fields
self.assertHttpStatus(response, 200) 'cable': None,
'connection_status': None,
}
def test_interface_import(self): cls.csv_data = (
self.add_permissions('dcim.add_interface')
csv_data = (
"device,name,type", "device,name,type",
"Device 1,Interface 4,1000BASE-T (1GE)", "Device 1,Interface 4,1000BASE-T (1GE)",
"Device 1,Interface 5,1000BASE-T (1GE)", "Device 1,Interface 5,1000BASE-T (1GE)",
"Device 1,Interface 6,1000BASE-T (1GE)", "Device 1,Interface 6,1000BASE-T (1GE)",
) )
response = self.client.post(reverse('dcim:interface_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class FrontPortTestCase(StandardTestCases.Views):
self.assertEqual(Interface.objects.count(), 6) model = FrontPort
# Disable inapplicable views
test_get_object = None
# TODO: Convert to StandardTestCases.Views # TODO
class FrontPortTestCase(TestCase): test_create_object = None
user_permissions = ( test_bulk_edit_objects = None
'dcim.view_frontport', test_bulk_delete_objects = None
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
device = create_test_device('Device 1') device = create_test_device('Device 1')
rearport1 = RearPort(device=device, name='Rear Port 1') rearports = (
rearport1.save() RearPort(device=device, name='Rear Port 1'),
rearport2 = RearPort(device=device, name='Rear Port 2') RearPort(device=device, name='Rear Port 2'),
rearport2.save() RearPort(device=device, name='Rear Port 3'),
rearport3 = RearPort(device=device, name='Rear Port 3') RearPort(device=device, name='Rear Port 4'),
rearport3.save() RearPort(device=device, name='Rear Port 5'),
RearPort(device=device, name='Rear Port 6'),
# RearPorts for CSV import test )
RearPort(device=device, name='Rear Port 4').save() RearPort.objects.bulk_create(rearports)
RearPort(device=device, name='Rear Port 5').save()
RearPort(device=device, name='Rear Port 6').save()
FrontPort.objects.bulk_create([ FrontPort.objects.bulk_create([
FrontPort(device=device, name='Front Port 1', rear_port=rearport1), FrontPort(device=device, name='Front Port 1', rear_port=rearports[0]),
FrontPort(device=device, name='Front Port 2', rear_port=rearport2), FrontPort(device=device, name='Front Port 2', rear_port=rearports[1]),
FrontPort(device=device, name='Front Port 3', rear_port=rearport3), FrontPort(device=device, name='Front Port 3', rear_port=rearports[2]),
]) ])
def test_frontport_list(self): cls.form_data = {
'device': device.pk,
'name': 'Front Port X',
'type': PortTypeChoices.TYPE_8P8C,
'rear_port': rearports[3].pk,
'rear_port_position': 1,
'description': 'New description',
'tags': 'Alpha,Bravo,Charlie',
url = reverse('dcim:frontport_list') # Extraneous model fields
'cable': None,
}
response = self.client.get(url) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_frontport_import(self):
self.add_permissions('dcim.add_frontport')
csv_data = (
"device,name,type,rear_port,rear_port_position", "device,name,type,rear_port,rear_port_position",
"Device 1,Front Port 4,8P8C,Rear Port 4,1", "Device 1,Front Port 4,8P8C,Rear Port 4,1",
"Device 1,Front Port 5,8P8C,Rear Port 5,1", "Device 1,Front Port 5,8P8C,Rear Port 5,1",
"Device 1,Front Port 6,8P8C,Rear Port 6,1", "Device 1,Front Port 6,8P8C,Rear Port 6,1",
) )
response = self.client.post(reverse('dcim:frontport_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class RearPortTestCase(StandardTestCases.Views):
self.assertEqual(FrontPort.objects.count(), 6) model = RearPort
# Disable inapplicable views
test_get_object = None
# TODO: Convert to StandardTestCases.Views # TODO
class RearPortTestCase(TestCase): test_create_object = None
user_permissions = ( test_bulk_edit_objects = None
'dcim.view_rearport', test_bulk_delete_objects = None
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
@ -938,77 +980,82 @@ class RearPortTestCase(TestCase):
RearPort(device=device, name='Rear Port 3'), RearPort(device=device, name='Rear Port 3'),
]) ])
def test_rearport_list(self): cls.form_data = {
'device': device.pk,
'name': 'Rear Port X',
'type': PortTypeChoices.TYPE_8P8C,
'positions': 3,
'description': 'New description',
'tags': 'Alpha,Bravo,Charlie',
url = reverse('dcim:rearport_list') # Extraneous model fields
'cable': None,
}
response = self.client.get(url) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_rearport_import(self):
self.add_permissions('dcim.add_rearport')
csv_data = (
"device,name,type,positions", "device,name,type,positions",
"Device 1,Rear Port 4,8P8C,1", "Device 1,Rear Port 4,8P8C,1",
"Device 1,Rear Port 5,8P8C,1", "Device 1,Rear Port 5,8P8C,1",
"Device 1,Rear Port 6,8P8C,1", "Device 1,Rear Port 6,8P8C,1",
) )
response = self.client.post(reverse('dcim:rearport_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class DeviceBayTestCase(StandardTestCases.Views):
self.assertEqual(RearPort.objects.count(), 6) model = DeviceBay
# Disable inapplicable views
test_get_object = None
# TODO: Convert to StandardTestCases.Views # TODO
class DeviceBayTestCase(TestCase): test_create_object = None
user_permissions = ( test_bulk_edit_objects = None
'dcim.view_devicebay', test_bulk_delete_objects = None
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
device = create_test_device('Device 1') device1 = create_test_device('Device 1')
device2 = create_test_device('Device 2')
# Update the DeviceType subdevice role to allow adding DeviceBays
DeviceType.objects.update(subdevice_role=SubdeviceRoleChoices.ROLE_PARENT)
DeviceBay.objects.bulk_create([ DeviceBay.objects.bulk_create([
DeviceBay(device=device, name='Device Bay 1'), DeviceBay(device=device1, name='Device Bay 1'),
DeviceBay(device=device, name='Device Bay 2'), DeviceBay(device=device1, name='Device Bay 2'),
DeviceBay(device=device, name='Device Bay 3'), DeviceBay(device=device1, name='Device Bay 3'),
]) ])
def test_devicebay_list(self): cls.form_data = {
'device': device2.pk,
'name': 'Device Bay X',
'description': 'A device bay',
'tags': 'Alpha,Bravo,Charlie',
url = reverse('dcim:devicebay_list') # Extraneous model fields
'installed_device': None,
}
response = self.client.get(url) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_devicebay_import(self):
self.add_permissions('dcim.add_devicebay')
csv_data = (
"device,name", "device,name",
"Device 1,Device Bay 4", "Device 1,Device Bay 4",
"Device 1,Device Bay 5", "Device 1,Device Bay 5",
"Device 1,Device Bay 6", "Device 1,Device Bay 6",
) )
response = self.client.post(reverse('dcim:devicebay_import'), {'csv': '\n'.join(csv_data)})
self.assertHttpStatus(response, 200) class InventoryItemTestCase(StandardTestCases.Views):
self.assertEqual(DeviceBay.objects.count(), 6) model = InventoryItem
# Disable inapplicable views
test_get_object = None
# TODO: Convert to StandardTestCases.Views # TODO
class InventoryItemTestCase(TestCase): test_create_object = None
user_permissions = (
'dcim.view_inventoryitem',
)
@classmethod @classmethod
def setUpTestData(cls): def setUpTestData(cls):
device = create_test_device('Device 1') device = create_test_device('Device 1')
manufacturer, _ = Manufacturer.objects.get_or_create(name='Manufacturer 1', slug='manufacturer-1')
InventoryItem.objects.bulk_create([ InventoryItem.objects.bulk_create([
InventoryItem(device=device, name='Inventory Item 1'), InventoryItem(device=device, name='Inventory Item 1'),
@ -1016,30 +1063,32 @@ class InventoryItemTestCase(TestCase):
InventoryItem(device=device, name='Inventory Item 3'), InventoryItem(device=device, name='Inventory Item 3'),
]) ])
def test_inventoryitem_list(self): cls.form_data = {
'device': device.pk,
url = reverse('dcim:inventoryitem_list') 'manufacturer': manufacturer.pk,
params = { 'name': 'Inventory Item X',
"device_id": Device.objects.first().pk, 'parent': None,
'discovered': False,
'part_id': '123456',
'serial': '123ABC',
'asset_tag': 'ABC123',
'description': 'An inventory item',
'tags': 'Alpha,Bravo,Charlie',
} }
response = self.client.get('{}?{}'.format(url, urllib.parse.urlencode(params))) cls.csv_data = (
self.assertHttpStatus(response, 200)
def test_inventoryitem_import(self):
self.add_permissions('dcim.add_inventoryitem')
csv_data = (
"device,name", "device,name",
"Device 1,Inventory Item 4", "Device 1,Inventory Item 4",
"Device 1,Inventory Item 5", "Device 1,Inventory Item 5",
"Device 1,Inventory Item 6", "Device 1,Inventory Item 6",
) )
response = self.client.post(reverse('dcim:inventoryitem_import'), {'csv': '\n'.join(csv_data)}) cls.bulk_edit_data = {
'device': device.pk,
self.assertHttpStatus(response, 200) 'manufacturer': manufacturer.pk,
self.assertEqual(InventoryItem.objects.count(), 6) 'part_id': '123456',
'description': 'New description',
}
class CableTestCase(StandardTestCases.Views): class CableTestCase(StandardTestCases.Views):