Просмотр исходного кода

fix(ipam): Fix format string in IP address/prefix validation errors

Add missing keyword argument to format() calls in validation error
messages. This ensures the invalid data value is properly included in
the error message returned to the user.

Fixes #22719
Martin Hauser 1 неделя назад
Родитель
Сommit
f9363f8688
2 измененных файлов с 28 добавлено и 2 удалено
  1. 2 2
      netbox/ipam/api/field_serializers.py
  2. 26 0
      netbox/ipam/tests/test_api.py

+ 2 - 2
netbox/ipam/api/field_serializers.py

@@ -20,7 +20,7 @@ class IPAddressField(serializers.CharField):
         try:
         try:
             return IPNetwork(data)
             return IPNetwork(data)
         except AddrFormatError:
         except AddrFormatError:
-            raise serializers.ValidationError(_("Invalid IP address format: {data}").format(data))
+            raise serializers.ValidationError(_("Invalid IP address format: {data}").format(data=data))
         except (TypeError, ValueError) as e:
         except (TypeError, ValueError) as e:
             raise serializers.ValidationError(e)
             raise serializers.ValidationError(e)
 
 
@@ -40,7 +40,7 @@ class IPNetworkField(serializers.CharField):
         try:
         try:
             return IPNetwork(data)
             return IPNetwork(data)
         except AddrFormatError:
         except AddrFormatError:
-            raise serializers.ValidationError(_("Invalid IP prefix format: {data}").format(data))
+            raise serializers.ValidationError(_("Invalid IP prefix format: {data}").format(data=data))
         except (TypeError, ValueError) as e:
         except (TypeError, ValueError) as e:
             raise serializers.ValidationError(e)
             raise serializers.ValidationError(e)
 
 

+ 26 - 0
netbox/ipam/tests/test_api.py

@@ -452,6 +452,19 @@ class PrefixTestCase(APIViewTestCases.APIViewTestCase):
         )
         )
         Prefix.objects.bulk_create(prefixes)
         Prefix.objects.bulk_create(prefixes)
 
 
+    @tag('regression')
+    def test_create_with_invalid_prefix(self):
+        """
+        POST of a malformed prefix value returns a 400 validation error.
+        """
+        self.add_permissions('ipam.add_prefix')
+        url = reverse('ipam-api:prefix-list')
+
+        response = self.client.post(url, {'prefix': 'invalid'}, format='json', **self.header)
+
+        self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST)
+        self.assertEqual(response.data['prefix'][0], 'Invalid IP prefix format: invalid')
+
     @tag('regression')
     @tag('regression')
     def test_clean_validates_scope(self):
     def test_clean_validates_scope(self):
         prefix = Prefix.objects.first()
         prefix = Prefix.objects.first()
@@ -858,6 +871,19 @@ class IPAddressTestCase(APIViewTestCases.APIViewTestCase):
         )
         )
         IPAddress.objects.bulk_create(ip_addresses)
         IPAddress.objects.bulk_create(ip_addresses)
 
 
+    @tag('regression')
+    def test_create_with_invalid_address(self):
+        """
+        POST of a malformed address value returns a 400 validation error.
+        """
+        self.add_permissions('ipam.add_ipaddress')
+        url = reverse('ipam-api:ipaddress-list')
+
+        response = self.client.post(url, {'address': 'invalid'}, format='json', **self.header)
+
+        self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST)
+        self.assertEqual(response.data['address'][0], 'Invalid IP address format: invalid')
+
     def test_assign_object(self):
     def test_assign_object(self):
         """
         """
         Test the creation of available IP addresses within a parent IP range.
         Test the creation of available IP addresses within a parent IP range.