diff --git a/netbox/extras/tests/test_customvalidator.py b/netbox/extras/tests/test_customvalidator.py index 3cb4f05cd..0fe507b67 100644 --- a/netbox/extras/tests/test_customvalidator.py +++ b/netbox/extras/tests/test_customvalidator.py @@ -2,7 +2,7 @@ from django.conf import settings from django.core.exceptions import ValidationError from django.test import TestCase, override_settings -from circuits.models import Provider +from ipam.models import ASN, RIR from dcim.models import Site from extras.validators import CustomValidator @@ -14,6 +14,20 @@ class MyValidator(CustomValidator): self.fail("Name must be foo!") +min_validator = CustomValidator({ + 'asn': { + 'min': 65000 + } +}) + + +max_validator = CustomValidator({ + 'asn': { + 'max': 65100 + } +}) + + min_length_validator = CustomValidator({ 'name': { 'min_length': 5 @@ -53,6 +67,26 @@ custom_validator = MyValidator() class CustomValidatorTest(TestCase): + @classmethod + def setUpTestData(cls): + RIR.objects.create(name='RIR 1', slug='rir-1') + + @override_settings(CUSTOM_VALIDATORS={'ipam.asn': [min_validator]}) + def test_configuration(self): + self.assertIn('ipam.asn', settings.CUSTOM_VALIDATORS) + validator = settings.CUSTOM_VALIDATORS['ipam.asn'][0] + self.assertIsInstance(validator, CustomValidator) + + @override_settings(CUSTOM_VALIDATORS={'ipam.asn': [min_validator]}) + def test_min(self): + with self.assertRaises(ValidationError): + ASN(asn=1, rir=RIR.objects.first()).clean() + + @override_settings(CUSTOM_VALIDATORS={'ipam.asn': [max_validator]}) + def test_max(self): + with self.assertRaises(ValidationError): + ASN(asn=65535, rir=RIR.objects.first()).clean() + @override_settings(CUSTOM_VALIDATORS={'dcim.site': [min_length_validator]}) def test_min_length(self): with self.assertRaises(ValidationError): diff --git a/netbox/utilities/tests/test_filters.py b/netbox/utilities/tests/test_filters.py index 3a6e6b670..334f270dc 100644 --- a/netbox/utilities/tests/test_filters.py +++ b/netbox/utilities/tests/test_filters.py @@ -5,8 +5,6 @@ from django.test import TestCase from mptt.fields import TreeForeignKey from taggit.managers import TaggableManager -from circuits.filtersets import CircuitFilterSet, ProviderFilterSet -from circuits.models import Circuit, Provider from dcim.choices import * from dcim.fields import MACAddressField from dcim.filtersets import DeviceFilterSet, SiteFilterSet @@ -15,6 +13,7 @@ from dcim.models import ( ) from extras.filters import TagFilter from extras.models import TaggedItem +from ipam.filtersets import ASNFilterSet from ipam.models import RIR, ASN from netbox.filtersets import BaseFilterSet from utilities.filters import ( @@ -338,13 +337,14 @@ class DynamicFilterLookupExpressionTest(TestCase): """ @classmethod def setUpTestData(cls): + rir = RIR.objects.create(name='RIR 1', slug='rir-1') - providers = ( - Provider(name='Provider 1', slug='provider-1'), - Provider(name='Provider 2', slug='provider-2'), - Provider(name='Provider 3', slug='provider-3'), + asns = ( + ASN(asn=65001, rir=rir), + ASN(asn=65101, rir=rir), + ASN(asn=65201, rir=rir), ) - Provider.objects.bulk_create(providers) + ASN.objects.bulk_create(asns) manufacturers = ( Manufacturer(name='Manufacturer 1', slug='manufacturer-1'), @@ -389,15 +389,6 @@ class DynamicFilterLookupExpressionTest(TestCase): ) Site.objects.bulk_create(sites) - rir = RIR.objects.create(name='RFC 6996', is_private=True) - - asns = [ - ASN(asn=65001, rir=rir), - ASN(asn=65101, rir=rir), - ASN(asn=65201, rir=rir) - ] - ASN.objects.bulk_create(asns) - asns[0].sites.add(sites[0]) asns[1].sites.add(sites[1]) asns[2].sites.add(sites[2]) @@ -454,6 +445,22 @@ class DynamicFilterLookupExpressionTest(TestCase): params = {'slug__niew': ['-1']} self.assertEqual(SiteFilterSet(params, Site.objects.all()).qs.count(), 2) + def test_provider_asn_lt(self): + params = {'asn__lt': [65101]} + self.assertEqual(ASNFilterSet(params, ASN.objects.all()).qs.count(), 1) + + def test_provider_asn_lte(self): + params = {'asn__lte': [65101]} + self.assertEqual(ASNFilterSet(params, ASN.objects.all()).qs.count(), 2) + + def test_provider_asn_gt(self): + params = {'asn__lt': [65101]} + self.assertEqual(ASNFilterSet(params, ASN.objects.all()).qs.count(), 1) + + def test_provider_asn_gte(self): + params = {'asn__gte': [65101]} + self.assertEqual(ASNFilterSet(params, ASN.objects.all()).qs.count(), 2) + def test_site_region_negation(self): params = {'region__n': ['region-1']} self.assertEqual(SiteFilterSet(params, Site.objects.all()).qs.count(), 2)