mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Merge pull request #4087 from netbox-community/4085-dcim-component-view-tests
Closes #4085: Standardize device component view tests
This commit is contained in:
@ -1,4 +1,3 @@
|
|||||||
import urllib.parse
|
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
@ -6,11 +5,26 @@ 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):
|
||||||
|
"""
|
||||||
|
Convenience method for creating a Device (e.g. for component testing).
|
||||||
|
"""
|
||||||
|
site, _ = Site.objects.get_or_create(name='Site 1', slug='site-1')
|
||||||
|
manufacturer, _ = Manufacturer.objects.get_or_create(name='Manufacturer 1', slug='manufacturer-1')
|
||||||
|
devicetype, _ = DeviceType.objects.get_or_create(model='Device Type 1', manufacturer=manufacturer)
|
||||||
|
devicerole, _ = DeviceRole.objects.get_or_create(name='Device Role 1', slug='device-role-1')
|
||||||
|
device = Device.objects.create(name=name, site=site, device_type=devicetype, device_role=devicerole)
|
||||||
|
|
||||||
|
return device
|
||||||
|
|
||||||
|
|
||||||
class RegionTestCase(StandardTestCases.Views):
|
class RegionTestCase(StandardTestCases.Views):
|
||||||
@ -663,29 +677,20 @@ 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):
|
||||||
|
device = create_test_device('Device 1')
|
||||||
site = Site(name='Site 1', slug='site-1')
|
|
||||||
site.save()
|
|
||||||
|
|
||||||
manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
|
|
||||||
manufacturer.save()
|
|
||||||
|
|
||||||
devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
|
|
||||||
devicetype.save()
|
|
||||||
|
|
||||||
devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
|
|
||||||
devicerole.save()
|
|
||||||
|
|
||||||
device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
|
|
||||||
device.save()
|
|
||||||
|
|
||||||
ConsolePort.objects.bulk_create([
|
ConsolePort.objects.bulk_create([
|
||||||
ConsolePort(device=device, name='Console Port 1'),
|
ConsolePort(device=device, name='Console Port 1'),
|
||||||
@ -693,52 +698,41 @@ 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):
|
||||||
|
device = create_test_device('Device 1')
|
||||||
site = Site(name='Site 1', slug='site-1')
|
|
||||||
site.save()
|
|
||||||
|
|
||||||
manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
|
|
||||||
manufacturer.save()
|
|
||||||
|
|
||||||
devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
|
|
||||||
devicetype.save()
|
|
||||||
|
|
||||||
devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
|
|
||||||
devicerole.save()
|
|
||||||
|
|
||||||
device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
|
|
||||||
device.save()
|
|
||||||
|
|
||||||
ConsoleServerPort.objects.bulk_create([
|
ConsoleServerPort.objects.bulk_create([
|
||||||
ConsoleServerPort(device=device, name='Console Server Port 1'),
|
ConsoleServerPort(device=device, name='Console Server Port 1'),
|
||||||
@ -746,52 +740,40 @@ 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):
|
||||||
|
device = create_test_device('Device 1')
|
||||||
site = Site(name='Site 1', slug='site-1')
|
|
||||||
site.save()
|
|
||||||
|
|
||||||
manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
|
|
||||||
manufacturer.save()
|
|
||||||
|
|
||||||
devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
|
|
||||||
devicetype.save()
|
|
||||||
|
|
||||||
devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
|
|
||||||
devicerole.save()
|
|
||||||
|
|
||||||
device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
|
|
||||||
device.save()
|
|
||||||
|
|
||||||
PowerPort.objects.bulk_create([
|
PowerPort.objects.bulk_create([
|
||||||
PowerPort(device=device, name='Power Port 1'),
|
PowerPort(device=device, name='Power Port 1'),
|
||||||
@ -799,105 +781,88 @@ 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')
|
||||||
|
|
||||||
site = Site(name='Site 1', slug='site-1')
|
powerports = (
|
||||||
site.save()
|
PowerPort(device=device, name='Power Port 1'),
|
||||||
|
PowerPort(device=device, name='Power Port 2'),
|
||||||
manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
|
)
|
||||||
manufacturer.save()
|
PowerPort.objects.bulk_create(powerports)
|
||||||
|
|
||||||
devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
|
|
||||||
devicetype.save()
|
|
||||||
|
|
||||||
devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
|
|
||||||
devicerole.save()
|
|
||||||
|
|
||||||
device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
|
|
||||||
device.save()
|
|
||||||
|
|
||||||
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):
|
||||||
|
device = create_test_device('Device 1')
|
||||||
site = Site(name='Site 1', slug='site-1')
|
|
||||||
site.save()
|
|
||||||
|
|
||||||
manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
|
|
||||||
manufacturer.save()
|
|
||||||
|
|
||||||
devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
|
|
||||||
devicetype.save()
|
|
||||||
|
|
||||||
devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
|
|
||||||
devicerole.save()
|
|
||||||
|
|
||||||
device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
|
|
||||||
device.save()
|
|
||||||
|
|
||||||
Interface.objects.bulk_create([
|
Interface.objects.bulk_create([
|
||||||
Interface(device=device, name='Interface 1'),
|
Interface(device=device, name='Interface 1'),
|
||||||
@ -905,117 +870,109 @@ 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')
|
||||||
|
|
||||||
site = Site(name='Site 1', slug='site-1')
|
rearports = (
|
||||||
site.save()
|
RearPort(device=device, name='Rear Port 1'),
|
||||||
|
RearPort(device=device, name='Rear Port 2'),
|
||||||
manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
|
RearPort(device=device, name='Rear Port 3'),
|
||||||
manufacturer.save()
|
RearPort(device=device, name='Rear Port 4'),
|
||||||
|
RearPort(device=device, name='Rear Port 5'),
|
||||||
devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
|
RearPort(device=device, name='Rear Port 6'),
|
||||||
devicetype.save()
|
)
|
||||||
|
RearPort.objects.bulk_create(rearports)
|
||||||
devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
|
|
||||||
devicerole.save()
|
|
||||||
|
|
||||||
device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
|
|
||||||
device.save()
|
|
||||||
|
|
||||||
rearport1 = RearPort(device=device, name='Rear Port 1')
|
|
||||||
rearport1.save()
|
|
||||||
rearport2 = RearPort(device=device, name='Rear Port 2')
|
|
||||||
rearport2.save()
|
|
||||||
rearport3 = RearPort(device=device, name='Rear Port 3')
|
|
||||||
rearport3.save()
|
|
||||||
|
|
||||||
# RearPorts for CSV import test
|
|
||||||
RearPort(device=device, name='Rear Port 4').save()
|
|
||||||
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):
|
||||||
|
device = create_test_device('Device 1')
|
||||||
site = Site(name='Site 1', slug='site-1')
|
|
||||||
site.save()
|
|
||||||
|
|
||||||
manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
|
|
||||||
manufacturer.save()
|
|
||||||
|
|
||||||
devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
|
|
||||||
devicetype.save()
|
|
||||||
|
|
||||||
devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
|
|
||||||
devicerole.save()
|
|
||||||
|
|
||||||
device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
|
|
||||||
device.save()
|
|
||||||
|
|
||||||
RearPort.objects.bulk_create([
|
RearPort.objects.bulk_create([
|
||||||
RearPort(device=device, name='Rear Port 1'),
|
RearPort(device=device, name='Rear Port 1'),
|
||||||
@ -1023,109 +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):
|
||||||
|
device1 = create_test_device('Device 1')
|
||||||
|
device2 = create_test_device('Device 2')
|
||||||
|
|
||||||
site = Site(name='Site 1', slug='site-1')
|
# Update the DeviceType subdevice role to allow adding DeviceBays
|
||||||
site.save()
|
DeviceType.objects.update(subdevice_role=SubdeviceRoleChoices.ROLE_PARENT)
|
||||||
|
|
||||||
manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
|
|
||||||
manufacturer.save()
|
|
||||||
|
|
||||||
devicetype = DeviceType(
|
|
||||||
model='Device Type 1',
|
|
||||||
manufacturer=manufacturer,
|
|
||||||
subdevice_role=SubdeviceRoleChoices.ROLE_PARENT
|
|
||||||
)
|
|
||||||
devicetype.save()
|
|
||||||
|
|
||||||
devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
|
|
||||||
devicerole.save()
|
|
||||||
|
|
||||||
device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
|
|
||||||
device.save()
|
|
||||||
|
|
||||||
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')
|
||||||
site = Site(name='Site 1', slug='site-1')
|
manufacturer, _ = Manufacturer.objects.get_or_create(name='Manufacturer 1', slug='manufacturer-1')
|
||||||
site.save()
|
|
||||||
|
|
||||||
manufacturer = Manufacturer(name='Manufacturer 1', slug='manufacturer-1')
|
|
||||||
manufacturer.save()
|
|
||||||
|
|
||||||
devicetype = DeviceType(model='Device Type 1', manufacturer=manufacturer)
|
|
||||||
devicetype.save()
|
|
||||||
|
|
||||||
devicerole = DeviceRole(name='Device Role 1', slug='device-role-1')
|
|
||||||
devicerole.save()
|
|
||||||
|
|
||||||
device = Device(name='Device 1', site=site, device_type=devicetype, device_role=devicerole)
|
|
||||||
device.save()
|
|
||||||
|
|
||||||
InventoryItem.objects.bulk_create([
|
InventoryItem.objects.bulk_create([
|
||||||
InventoryItem(device=device, name='Inventory Item 1'),
|
InventoryItem(device=device, name='Inventory Item 1'),
|
||||||
@ -1133,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):
|
||||||
|
Reference in New Issue
Block a user