mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-26 17:26:10 -06:00
Pass SavedFilter initial parameters as JSON & relocate test
This commit is contained in:
parent
677722d0c9
commit
da0ad35c25
@ -2,7 +2,6 @@ import json
|
|||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.http import QueryDict
|
|
||||||
from django.utils.translation import gettext as _
|
from django.utils.translation import gettext as _
|
||||||
|
|
||||||
from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site, SiteGroup
|
from dcim.models import DeviceRole, DeviceType, Location, Platform, Region, Site, SiteGroup
|
||||||
@ -130,10 +129,10 @@ class SavedFilterForm(BootstrapMixin, forms.ModelForm):
|
|||||||
|
|
||||||
def __init__(self, *args, initial=None, **kwargs):
|
def __init__(self, *args, initial=None, **kwargs):
|
||||||
|
|
||||||
# Convert any parameters delivered via initial data to dict
|
# Convert any parameters delivered via initial data to JSON data
|
||||||
if initial and 'parameters' in initial:
|
if initial and 'parameters' in initial:
|
||||||
if type(initial['parameters']) is str:
|
if type(initial['parameters']) is str:
|
||||||
initial['parameters'] = dict(QueryDict(initial['parameters']).lists())
|
initial['parameters'] = json.loads(initial['parameters'])
|
||||||
|
|
||||||
super().__init__(*args, initial=initial, **kwargs)
|
super().__init__(*args, initial=initial, **kwargs)
|
||||||
|
|
||||||
|
@ -10,7 +10,6 @@ from dcim.models import DeviceRole, DeviceType, Manufacturer, Platform, Rack, Re
|
|||||||
from dcim.models import Location
|
from dcim.models import Location
|
||||||
from extras.choices import *
|
from extras.choices import *
|
||||||
from extras.filtersets import *
|
from extras.filtersets import *
|
||||||
from extras.forms import SavedFilterForm
|
|
||||||
from extras.models import *
|
from extras.models import *
|
||||||
from ipam.models import IPAddress
|
from ipam.models import IPAddress
|
||||||
from tenancy.models import Tenant, TenantGroup
|
from tenancy.models import Tenant, TenantGroup
|
||||||
@ -316,27 +315,6 @@ class SavedFilterTestCase(TestCase, BaseFilterSetTests):
|
|||||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
||||||
|
|
||||||
|
|
||||||
class SavedFilterFormTest(TestCase):
|
|
||||||
|
|
||||||
def test_basic_submit(self):
|
|
||||||
"""
|
|
||||||
Test form submission and validation
|
|
||||||
"""
|
|
||||||
form = SavedFilterForm({
|
|
||||||
'name': 'test-sf',
|
|
||||||
'slug': 'test-sf',
|
|
||||||
'content_types': [ContentType.objects.get_for_model(Site).pk],
|
|
||||||
'weight': 100,
|
|
||||||
'parameters': {
|
|
||||||
"status": [
|
|
||||||
"active"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
})
|
|
||||||
self.assertTrue(form.is_valid())
|
|
||||||
instance = form.save()
|
|
||||||
|
|
||||||
|
|
||||||
class ExportTemplateTestCase(TestCase, BaseFilterSetTests):
|
class ExportTemplateTestCase(TestCase, BaseFilterSetTests):
|
||||||
queryset = ExportTemplate.objects.all()
|
queryset = ExportTemplate.objects.all()
|
||||||
filterset = ExportTemplateFilterSet
|
filterset = ExportTemplateFilterSet
|
||||||
|
@ -4,6 +4,7 @@ from django.test import TestCase
|
|||||||
from dcim.forms import SiteForm
|
from dcim.forms import SiteForm
|
||||||
from dcim.models import Site
|
from dcim.models import Site
|
||||||
from extras.choices import CustomFieldTypeChoices
|
from extras.choices import CustomFieldTypeChoices
|
||||||
|
from extras.forms import SavedFilterForm
|
||||||
from extras.models import CustomField
|
from extras.models import CustomField
|
||||||
|
|
||||||
|
|
||||||
@ -77,3 +78,24 @@ class CustomFieldModelFormTest(TestCase):
|
|||||||
for field_type, _ in CustomFieldTypeChoices.CHOICES:
|
for field_type, _ in CustomFieldTypeChoices.CHOICES:
|
||||||
self.assertIn(field_type, instance.custom_field_data)
|
self.assertIn(field_type, instance.custom_field_data)
|
||||||
self.assertIsNone(instance.custom_field_data[field_type])
|
self.assertIsNone(instance.custom_field_data[field_type])
|
||||||
|
|
||||||
|
|
||||||
|
class SavedFilterFormTest(TestCase):
|
||||||
|
|
||||||
|
def test_basic_submit(self):
|
||||||
|
"""
|
||||||
|
Test form submission and validation
|
||||||
|
"""
|
||||||
|
form = SavedFilterForm({
|
||||||
|
'name': 'test-sf',
|
||||||
|
'slug': 'test-sf',
|
||||||
|
'content_types': [ContentType.objects.get_for_model(Site).pk],
|
||||||
|
'weight': 100,
|
||||||
|
'parameters': {
|
||||||
|
"status": [
|
||||||
|
"active"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
})
|
||||||
|
self.assertTrue(form.is_valid())
|
||||||
|
form.save()
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
import datetime
|
import datetime
|
||||||
import decimal
|
import decimal
|
||||||
|
import json
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
from typing import Dict, Any
|
from typing import Dict, Any
|
||||||
|
|
||||||
@ -321,7 +322,7 @@ def applied_filters(context, model, form, query_params):
|
|||||||
save_link = None
|
save_link = None
|
||||||
if user.has_perm('extras.add_savedfilter') and 'filter_id' not in context['request'].GET:
|
if user.has_perm('extras.add_savedfilter') and 'filter_id' not in context['request'].GET:
|
||||||
content_type = ContentType.objects.get_for_model(model).pk
|
content_type = ContentType.objects.get_for_model(model).pk
|
||||||
parameters = context['request'].GET.urlencode()
|
parameters = json.dumps(context['request'].GET)
|
||||||
url = reverse('extras:savedfilter_add')
|
url = reverse('extras:savedfilter_add')
|
||||||
save_link = f"{url}?content_types={content_type}¶meters={quote(parameters)}"
|
save_link = f"{url}?content_types={content_type}¶meters={quote(parameters)}"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user