diff --git a/netbox/dcim/forms.py b/netbox/dcim/forms.py index df289d32f..02bc61857 100644 --- a/netbox/dcim/forms.py +++ b/netbox/dcim/forms.py @@ -966,14 +966,14 @@ class DeviceTypeImportForm(forms.ModelForm): form=InterfaceTemplateImportForm, required=False ) - front_ports = MultiObjectField( - form=FrontPortTemplateImportForm, - required=False - ) rear_ports = MultiObjectField( form=RearPortTemplateImportForm, required=False ) + front_ports = MultiObjectField( + form=FrontPortTemplateImportForm, + required=False + ) class Meta: model = DeviceType @@ -994,7 +994,6 @@ class DeviceTypeImportForm(forms.ModelForm): data.update({ 'device_type': instance.pk }) - print(data) form = field.form(data) if form.is_valid(): form.save() diff --git a/netbox/dcim/tests/test_forms.py b/netbox/dcim/tests/test_forms.py index 2f333ea69..c0b94541a 100644 --- a/netbox/dcim/tests/test_forms.py +++ b/netbox/dcim/tests/test_forms.py @@ -8,6 +8,100 @@ def get_id(model, slug): return model.objects.get(slug=slug).id +DEVICETYPE_DATA = { + 'manufacturer': 'Generic', + 'model': 'TEST-1000', + 'slug': 'test-1000', + 'u_height': 2, + 'console_ports': [ + {'name': 'Console Port 1'}, + {'name': 'Console Port 2'}, + {'name': 'Console Port 3'}, + ], + 'console_server_ports': [ + {'name': 'Console Server Port 1'}, + {'name': 'Console Server Port 2'}, + {'name': 'Console Server Port 3'}, + ], + 'power_ports': [ + {'name': 'Power Port 1'}, + {'name': 'Power Port 2'}, + {'name': 'Power Port 3'}, + ], + 'power_outlets': [ + {'name': 'Power Outlet 1', 'power_port': 'Power Port 1', 'feed_leg': POWERFEED_LEG_A}, + {'name': 'Power Outlet 2', 'power_port': 'Power Port 1', 'feed_leg': POWERFEED_LEG_A}, + {'name': 'Power Outlet 3', 'power_port': 'Power Port 1', 'feed_leg': POWERFEED_LEG_A}, + ], + 'interfaces': [ + {'name': 'Interface 1', 'type': IFACE_TYPE_1GE_FIXED, 'mgmt_only': True}, + {'name': 'Interface 2', 'type': IFACE_TYPE_1GE_FIXED}, + {'name': 'Interface 3', 'type': IFACE_TYPE_1GE_FIXED}, + ], + 'rear_ports': [ + {'name': 'Rear Port 1', 'type': PORT_TYPE_8P8C}, + {'name': 'Rear Port 2', 'type': PORT_TYPE_8P8C}, + {'name': 'Rear Port 3', 'type': PORT_TYPE_8P8C}, + ], + 'front_ports': [ + {'name': 'Front Port 1', 'type': PORT_TYPE_8P8C, 'rear_port': 'Rear Port 1'}, + {'name': 'Front Port 2', 'type': PORT_TYPE_8P8C, 'rear_port': 'Rear Port 2'}, + {'name': 'Front Port 3', 'type': PORT_TYPE_8P8C, 'rear_port': 'Rear Port 3'}, + ] +} + + +class DeviceTypeImportTestCase(TestCase): + + def setUp(self): + + Manufacturer(name='Generic', slug='generic').save() + + def test_import_devicetype_yaml(self): + + form = DeviceTypeImportForm(DEVICETYPE_DATA) + + self.assertTrue(form.is_valid(), "Form validation failed: {}".format(form.errors)) + + form.save() + dt = DeviceType.objects.get(model='TEST-1000') + + # Verify all of the components were created + self.assertEqual(dt.consoleport_templates.count(), 3) + cp1 = ConsolePortTemplate.objects.first() + self.assertEqual(cp1.name, 'Console Port 1') + + self.assertEqual(dt.consoleserverport_templates.count(), 3) + csp1 = ConsoleServerPortTemplate.objects.first() + self.assertEqual(csp1.name, 'Console Server Port 1') + + self.assertEqual(dt.powerport_templates.count(), 3) + pp1 = PowerPortTemplate.objects.first() + self.assertEqual(pp1.name, 'Power Port 1') + + self.assertEqual(dt.poweroutlet_templates.count(), 3) + po1 = PowerOutletTemplate.objects.first() + self.assertEqual(po1.name, 'Power Outlet 1') + self.assertEqual(po1.power_port, pp1) + self.assertEqual(po1.feed_leg, POWERFEED_LEG_A) + + self.assertEqual(dt.interface_templates.count(), 4) + iface1 = Interface.objects.first() + self.assertEqual(iface1.name, 'Interface 1') + self.assertEqual(iface1.type, IFACE_TYPE_1GE_FIXED) + self.assertTrue(iface1.mgmt_only) + + self.assertEqual(dt.rearport_templates.count(), 3) + rp1 = FrontPortTemplate.objects.first() + self.assertEqual(rp1.name, 'Rear Port 1') + + self.assertEqual(dt.frontport_templates.count(), 3) + fp1 = FrontPortTemplate.objects.first() + self.assertEqual(fp1.name, 'Front Port 1') + self.assertEqual(fp1.rear_port, rp1) + self.assertEqual(fp1.rear_port_position, 1) + + class DeviceTestCase(TestCase): fixtures = ['dcim', 'ipam']