1
0
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:
Jeremy Stretch
2020-02-04 14:51:48 -05:00
committed by GitHub

View File

@ -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):