Pass SavedFilter initial parameters as JSON & relocate test

This commit is contained in:
jeremystretch 2023-03-30 10:36:32 -04:00
parent 677722d0c9
commit da0ad35c25
4 changed files with 26 additions and 26 deletions

View File

@ -2,7 +2,6 @@ import json
from django import forms
from django.contrib.contenttypes.models import ContentType
from django.http import QueryDict
from django.utils.translation import gettext as _
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):
# 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 type(initial['parameters']) is str:
initial['parameters'] = dict(QueryDict(initial['parameters']).lists())
initial['parameters'] = json.loads(initial['parameters'])
super().__init__(*args, initial=initial, **kwargs)

View File

@ -10,7 +10,6 @@ from dcim.models import DeviceRole, DeviceType, Manufacturer, Platform, Rack, Re
from dcim.models import Location
from extras.choices import *
from extras.filtersets import *
from extras.forms import SavedFilterForm
from extras.models import *
from ipam.models import IPAddress
from tenancy.models import Tenant, TenantGroup
@ -316,27 +315,6 @@ class SavedFilterTestCase(TestCase, BaseFilterSetTests):
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):
queryset = ExportTemplate.objects.all()
filterset = ExportTemplateFilterSet

View File

@ -4,6 +4,7 @@ from django.test import TestCase
from dcim.forms import SiteForm
from dcim.models import Site
from extras.choices import CustomFieldTypeChoices
from extras.forms import SavedFilterForm
from extras.models import CustomField
@ -77,3 +78,24 @@ class CustomFieldModelFormTest(TestCase):
for field_type, _ in CustomFieldTypeChoices.CHOICES:
self.assertIn(field_type, instance.custom_field_data)
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()

View File

@ -1,5 +1,6 @@
import datetime
import decimal
import json
from urllib.parse import quote
from typing import Dict, Any
@ -321,7 +322,7 @@ def applied_filters(context, model, form, query_params):
save_link = None
if user.has_perm('extras.add_savedfilter') and 'filter_id' not in context['request'].GET:
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')
save_link = f"{url}?content_types={content_type}&parameters={quote(parameters)}"