From b75f142ce4a49fe727bebec4091664883d9cd328 Mon Sep 17 00:00:00 2001 From: Brian Tiemann Date: Mon, 21 Oct 2024 19:24:39 -0400 Subject: [PATCH] Filterset tests --- netbox/ipam/filtersets.py | 6 +- netbox/ipam/forms/filtersets.py | 14 ++++- netbox/ipam/tests/test_filtersets.py | 84 ++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+), 3 deletions(-) diff --git a/netbox/ipam/filtersets.py b/netbox/ipam/filtersets.py index 7b282c6fd..2e20027f1 100644 --- a/netbox/ipam/filtersets.py +++ b/netbox/ipam/filtersets.py @@ -1123,10 +1123,14 @@ class VLANTranslationPolicyFilterSet(NetBoxModelFilterSet): class VLANTranslationRuleFilterSet(NetBoxModelFilterSet): + policy_id = django_filters.ModelMultipleChoiceFilter( + queryset=VLANTranslationPolicy.objects.all(), + label=_('VLAN Translation Policy (ID)'), + ) class Meta: model = VLANTranslationRule - fields = ('id', 'policy', 'local_vid', 'remote_vid') + fields = ('id', 'policy_id', 'local_vid', 'remote_vid') def search(self, queryset, name, value): if not value.strip(): diff --git a/netbox/ipam/forms/filtersets.py b/netbox/ipam/forms/filtersets.py index e44cb918e..be492c90d 100644 --- a/netbox/ipam/forms/filtersets.py +++ b/netbox/ipam/forms/filtersets.py @@ -484,14 +484,24 @@ class VLANTranslationRuleFilterForm(NetBoxModelFilterSetForm): model = VLANTranslationRule fieldsets = ( FieldSet('q', 'filter_id', 'tag'), - FieldSet('policy', 'local_vid', 'remote_vid', name=_('Attributes')), + FieldSet('policy_id', 'local_vid', 'remote_vid', name=_('Attributes')), ) tag = TagFilterField(model) - policy = DynamicModelMultipleChoiceField( + policy_id = DynamicModelMultipleChoiceField( queryset=VLANTranslationPolicy.objects.all(), required=False, label=_('VLAN Translation Policy') ) + local_vid = forms.IntegerField( + min_value=1, + required=False, + label=_('Local VLAN ID') + ) + remote_vid = forms.IntegerField( + min_value=1, + required=False, + label=_('Remote VLAN ID') + ) class VLANFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): diff --git a/netbox/ipam/tests/test_filtersets.py b/netbox/ipam/tests/test_filtersets.py index 7bc372fbf..575cbe6e3 100644 --- a/netbox/ipam/tests/test_filtersets.py +++ b/netbox/ipam/tests/test_filtersets.py @@ -1898,6 +1898,90 @@ class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) +class VLANTranslationPolicyTestCase(TestCase, ChangeLoggedFilterSetTests): + queryset = VLANTranslationPolicy.objects.all() + filterset = VLANTranslationPolicyFilterSet + + @classmethod + def setUpTestData(cls): + + vlan_translation_policies = ( + VLANTranslationPolicy( + name='Policy 1', + description='foobar1', + ), + VLANTranslationPolicy( + name='Policy 2', + description='foobar2', + ), + VLANTranslationPolicy( + name='Policy 3', + description='foobar3', + ), + ) + VLANTranslationPolicy.objects.bulk_create(vlan_translation_policies) + + def test_name(self): + params = {'name': ['Policy 1', 'Policy 2']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_description(self): + params = {'description': ['foobar1', 'foobar2']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + +class VLANTranslationRuleTestCase(TestCase, ChangeLoggedFilterSetTests): + queryset = VLANTranslationRule.objects.all() + filterset = VLANTranslationRuleFilterSet + + @classmethod + def setUpTestData(cls): + + vlan_translation_policies = ( + VLANTranslationPolicy( + name='Policy 1', + description='foobar1', + ), + VLANTranslationPolicy( + name='Policy 2', + description='foobar2', + ), + ) + VLANTranslationPolicy.objects.bulk_create(vlan_translation_policies) + + vlan_translation_rules = ( + VLANTranslationRule( + policy=vlan_translation_policies[0], + local_vid=100, + remote_vid=200, + ), + VLANTranslationRule( + policy=vlan_translation_policies[0], + local_vid=101, + remote_vid=201, + ), + VLANTranslationRule( + policy=vlan_translation_policies[1], + local_vid=100, + remote_vid=200, + ), + ) + VLANTranslationRule.objects.bulk_create(vlan_translation_rules) + + def test_policy_id(self): + policies = VLANTranslationPolicy.objects.all()[:2] + params = {'policy_id': [policies[0].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_local_vid(self): + params = {'local_vid': [100]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_remote_vid(self): + params = {'remote_vid': [200]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + class ServiceTemplateTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = ServiceTemplate.objects.all() filterset = ServiceTemplateFilterSet