From 9564f64b6210109a1a86a55986b3acd2da72cea5 Mon Sep 17 00:00:00 2001 From: Martin Hauser Date: Tue, 1 Apr 2025 17:45:57 +0200 Subject: [PATCH] test(forms): Add tests for front port form validation Introduces unit tests for validating FrontPortCreateForm behavior. Tests include scenarios for matching and mismatched name-label pairs to ensure proper form validation logic. Fixes #19041 --- netbox/dcim/tests/test_forms.py | 54 ++++++++++++++++++++++++++++++++- 1 file changed, 53 insertions(+), 1 deletion(-) diff --git a/netbox/dcim/tests/test_forms.py b/netbox/dcim/tests/test_forms.py index 89b7508f3..f9e5c7916 100644 --- a/netbox/dcim/tests/test_forms.py +++ b/netbox/dcim/tests/test_forms.py @@ -1,6 +1,12 @@ from django.test import TestCase -from dcim.choices import DeviceFaceChoices, DeviceStatusChoices, InterfaceTypeChoices, InterfaceModeChoices +from dcim.choices import ( + DeviceFaceChoices, + DeviceStatusChoices, + InterfaceModeChoices, + InterfaceTypeChoices, + PortTypeChoices, +) from dcim.forms import * from dcim.models import * from ipam.models import VLAN @@ -118,6 +124,52 @@ class DeviceTestCase(TestCase): self.assertIn('position', form.errors) +class FrontPortTestCase(TestCase): + + @classmethod + def setUpTestData(cls): + cls.device = create_test_device('Panel Device 1') + cls.rear_ports = ( + RearPort(name='RearPort1', device=cls.device, type=PortTypeChoices.TYPE_8P8C), + RearPort(name='RearPort2', device=cls.device, type=PortTypeChoices.TYPE_8P8C), + RearPort(name='RearPort3', device=cls.device, type=PortTypeChoices.TYPE_8P8C), + RearPort(name='RearPort4', device=cls.device, type=PortTypeChoices.TYPE_8P8C), + ) + RearPort.objects.bulk_create(cls.rear_ports) + + def test_front_port_label_count_valid(self): + """ + Test that generating an equal number of names and labels passes form validation. + """ + front_port_data = { + 'device': self.device.pk, + 'name': 'FrontPort[1-4]', + 'label': 'Port[1-4]', + 'type': PortTypeChoices.TYPE_8P8C, + 'rear_port': [f'{rear_port.pk}:1' for rear_port in self.rear_ports], + } + print(front_port_data) + form = FrontPortCreateForm(front_port_data) + + self.assertTrue(form.is_valid()) + + def test_front_port_label_count_mismatch(self): + """ + Check that attempting to generate a differing number of names and labels results in a validation error. + """ + bad_front_port_data = { + 'device': self.device.pk, + 'name': 'FrontPort[1-4]', + 'label': 'Port[1-2]', + 'type': PortTypeChoices.TYPE_8P8C, + 'rear_port': [f'{rear_port.pk}:1' for rear_port in self.rear_ports], + } + form = FrontPortCreateForm(bad_front_port_data) + + self.assertFalse(form.is_valid()) + self.assertIn('label', form.errors) + + class InterfaceTestCase(TestCase): @classmethod