mirror of
https://github.com/netbox-community/netbox.git
synced 2026-03-29 05:42:09 +02:00
Merge pull request #15369 from netbox-community/15237-audit-filtersets
Closes #15237: Add tests for missing filters
This commit is contained in:
@@ -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():
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user