Merge pull request #15369 from netbox-community/15237-audit-filtersets

Closes #15237: Add tests for missing filters
This commit is contained in:
Jeremy Stretch
2024-03-12 13:09:14 -04:00
committed by GitHub
22 changed files with 918 additions and 239 deletions

View File

@@ -29,7 +29,7 @@ class TunnelGroupFilterSet(OrganizationalModelFilterSet):
class Meta:
model = TunnelGroup
fields = ['id', 'name', 'slug', 'description']
fields = ('id', 'name', 'slug', 'description')
class TunnelFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
@@ -62,7 +62,7 @@ class TunnelFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
class Meta:
model = Tunnel
fields = ['id', 'name', 'tunnel_id', 'description']
fields = ('id', 'name', 'tunnel_id', 'description')
def search(self, queryset, name, value):
if not value.strip():
@@ -120,10 +120,21 @@ class TunnelTerminationFilterSet(NetBoxModelFilterSet):
class Meta:
model = TunnelTermination
fields = ['id']
fields = ('id', 'termination_id')
class IKEProposalFilterSet(NetBoxModelFilterSet):
ike_policy_id = django_filters.ModelMultipleChoiceFilter(
field_name='ike_policies',
queryset=IKEPolicy.objects.all(),
label=_('IKE policy (ID)'),
)
ike_policy = django_filters.ModelMultipleChoiceFilter(
field_name='ike_policies__name',
queryset=IKEPolicy.objects.all(),
to_field_name='name',
label=_('IKE policy (name)'),
)
authentication_method = django_filters.MultipleChoiceFilter(
choices=AuthenticationMethodChoices
)
@@ -139,7 +150,7 @@ class IKEProposalFilterSet(NetBoxModelFilterSet):
class Meta:
model = IKEProposal
fields = ['id', 'name', 'sa_lifetime', 'description']
fields = ('id', 'name', 'sa_lifetime', 'description')
def search(self, queryset, name, value):
if not value.strip():
@@ -158,16 +169,23 @@ class IKEPolicyFilterSet(NetBoxModelFilterSet):
mode = django_filters.MultipleChoiceFilter(
choices=IKEModeChoices
)
proposal_id = MultiValueNumberFilter(
field_name='proposals__id'
ike_proposal_id = django_filters.ModelMultipleChoiceFilter(
field_name='proposals',
queryset=IKEProposal.objects.all()
)
proposal = MultiValueCharFilter(
field_name='proposals__name'
ike_proposal = django_filters.ModelMultipleChoiceFilter(
field_name='proposals__name',
queryset=IKEProposal.objects.all(),
to_field_name='name'
)
# TODO: Remove in v4.1
proposal = ike_proposal
proposal_id = ike_proposal_id
class Meta:
model = IKEPolicy
fields = ['id', 'name', 'preshared_key', 'description']
fields = ('id', 'name', 'preshared_key', 'description')
def search(self, queryset, name, value):
if not value.strip():
@@ -180,6 +198,17 @@ class IKEPolicyFilterSet(NetBoxModelFilterSet):
class IPSecProposalFilterSet(NetBoxModelFilterSet):
ipsec_policy_id = django_filters.ModelMultipleChoiceFilter(
field_name='ipsec_policies',
queryset=IPSecPolicy.objects.all(),
label=_('IPSec policy (ID)'),
)
ipsec_policy = django_filters.ModelMultipleChoiceFilter(
field_name='ipsec_policies__name',
queryset=IPSecPolicy.objects.all(),
to_field_name='name',
label=_('IPSec policy (name)'),
)
encryption_algorithm = django_filters.MultipleChoiceFilter(
choices=EncryptionAlgorithmChoices
)
@@ -189,7 +218,7 @@ class IPSecProposalFilterSet(NetBoxModelFilterSet):
class Meta:
model = IPSecProposal
fields = ['id', 'name', 'sa_lifetime_seconds', 'sa_lifetime_data', 'description']
fields = ('id', 'name', 'sa_lifetime_seconds', 'sa_lifetime_data', 'description')
def search(self, queryset, name, value):
if not value.strip():
@@ -205,16 +234,23 @@ class IPSecPolicyFilterSet(NetBoxModelFilterSet):
pfs_group = django_filters.MultipleChoiceFilter(
choices=DHGroupChoices
)
proposal_id = MultiValueNumberFilter(
field_name='proposals__id'
ipsec_proposal_id = django_filters.ModelMultipleChoiceFilter(
field_name='proposals',
queryset=IPSecProposal.objects.all()
)
proposal = MultiValueCharFilter(
field_name='proposals__name'
ipsec_proposal = django_filters.ModelMultipleChoiceFilter(
field_name='proposals__name',
queryset=IPSecProposal.objects.all(),
to_field_name='name'
)
# TODO: Remove in v4.1
proposal = ipsec_proposal
proposal_id = ipsec_proposal_id
class Meta:
model = IPSecPolicy
fields = ['id', 'name', 'description']
fields = ('id', 'name', 'description')
def search(self, queryset, name, value):
if not value.strip():
@@ -253,7 +289,7 @@ class IPSecProfileFilterSet(NetBoxModelFilterSet):
class Meta:
model = IPSecProfile
fields = ['id', 'name', 'description']
fields = ('id', 'name', 'description')
def search(self, queryset, name, value):
if not value.strip():
@@ -295,7 +331,7 @@ class L2VPNFilterSet(NetBoxModelFilterSet, TenancyFilterSet):
class Meta:
model = L2VPN
fields = ['id', 'identifier', 'name', 'slug', 'type', 'description']
fields = ('id', 'identifier', 'name', 'slug', 'type', 'description')
def search(self, queryset, name, value):
if not value.strip():
@@ -402,7 +438,7 @@ class L2VPNTerminationFilterSet(NetBoxModelFilterSet):
class Meta:
model = L2VPNTermination
fields = ('id', 'assigned_object_type_id')
fields = ('id', 'assigned_object_id')
def search(self, queryset, name, value):
if not value.strip():

View File

@@ -1,4 +1,3 @@
from django.contrib.contenttypes.models import ContentType
from django.test import TestCase
from dcim.choices import InterfaceTypeChoices
@@ -331,6 +330,16 @@ class IKEProposalTestCase(TestCase, ChangeLoggedFilterSetTests):
)
IKEProposal.objects.bulk_create(ike_proposals)
ike_policies = (
IKEPolicy(name='IKE Policy 1'),
IKEPolicy(name='IKE Policy 2'),
IKEPolicy(name='IKE Policy 3'),
)
IKEPolicy.objects.bulk_create(ike_policies)
ike_policies[0].proposals.add(ike_proposals[0])
ike_policies[1].proposals.add(ike_proposals[1])
ike_policies[2].proposals.add(ike_proposals[2])
def test_q(self):
params = {'q': 'foobar1'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
@@ -343,6 +352,13 @@ class IKEProposalTestCase(TestCase, ChangeLoggedFilterSetTests):
params = {'description': ['foobar1', 'foobar2']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_ike_policy(self):
ike_policies = IKEPolicy.objects.all()[:2]
params = {'ike_policy_id': [ike_policies[0].pk, ike_policies[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'ike_policy': [ike_policies[0].name, ike_policies[1].name]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_authentication_method(self):
params = {'authentication_method': [
AuthenticationMethodChoices.PRESHARED_KEYS, AuthenticationMethodChoices.CERTIFICATES
@@ -446,11 +462,11 @@ class IKEPolicyTestCase(TestCase, ChangeLoggedFilterSetTests):
params = {'mode': [IKEModeChoices.MAIN]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_proposal(self):
def test_ike_proposal(self):
proposals = IKEProposal.objects.all()[:2]
params = {'proposal_id': [proposals[0].pk, proposals[1].pk]}
params = {'ike_proposal_id': [proposals[0].pk, proposals[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'proposal': [proposals[0].name, proposals[1].name]}
params = {'ike_proposal': [proposals[0].name, proposals[1].name]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
@@ -488,6 +504,16 @@ class IPSecProposalTestCase(TestCase, ChangeLoggedFilterSetTests):
)
IPSecProposal.objects.bulk_create(ipsec_proposals)
ipsec_policies = (
IPSecPolicy(name='IPSec Policy 1'),
IPSecPolicy(name='IPSec Policy 2'),
IPSecPolicy(name='IPSec Policy 3'),
)
IPSecPolicy.objects.bulk_create(ipsec_policies)
ipsec_policies[0].proposals.add(ipsec_proposals[0])
ipsec_policies[1].proposals.add(ipsec_proposals[1])
ipsec_policies[2].proposals.add(ipsec_proposals[2])
def test_q(self):
params = {'q': 'foobar1'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
@@ -500,6 +526,13 @@ class IPSecProposalTestCase(TestCase, ChangeLoggedFilterSetTests):
params = {'description': ['foobar1', 'foobar2']}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_ipsec_policy(self):
ipsec_policies = IPSecPolicy.objects.all()[:2]
params = {'ipsec_policy_id': [ipsec_policies[0].pk, ipsec_policies[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'ipsec_policy': [ipsec_policies[0].name, ipsec_policies[1].name]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_encryption_algorithm(self):
params = {'encryption_algorithm': [
EncryptionAlgorithmChoices.ENCRYPTION_AES128_CBC, EncryptionAlgorithmChoices.ENCRYPTION_AES192_CBC
@@ -584,11 +617,11 @@ class IPSecPolicyTestCase(TestCase, ChangeLoggedFilterSetTests):
params = {'pfs_group': [DHGroupChoices.GROUP_1, DHGroupChoices.GROUP_2]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
def test_proposal(self):
def test_ipsec_proposal(self):
proposals = IPSecProposal.objects.all()[:2]
params = {'proposal_id': [proposals[0].pk, proposals[1].pk]}
params = {'ipsec_proposal_id': [proposals[0].pk, proposals[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
params = {'proposal': [proposals[0].name, proposals[1].name]}
params = {'ipsec_proposal': [proposals[0].name, proposals[1].name]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
@@ -710,6 +743,14 @@ class L2VPNTestCase(TestCase, ChangeLoggedFilterSetTests):
queryset = L2VPN.objects.all()
filterset = L2VPNFilterSet
def get_m2m_filter_name(self, field):
# Override filter names for import & export RouteTargets
if field.name == 'import_targets':
return 'import_target'
if field.name == 'export_targets':
return 'export_target'
return ChangeLoggedFilterSetTests.get_m2m_filter_name(field)
@classmethod
def setUpTestData(cls):
@@ -848,8 +889,8 @@ class L2VPNTerminationTestCase(TestCase, ChangeLoggedFilterSetTests):
params = {'l2vpn': [l2vpns[0].slug, l2vpns[1].slug]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
def test_content_type(self):
params = {'assigned_object_type_id': ContentType.objects.get(model='vlan').pk}
def test_termination_type(self):
params = {'assigned_object_type': 'ipam.vlan'}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
def test_interface(self):