dataviz: add prefix to filters cell form (#65348)

This commit is contained in:
Valentin Deniaud 2022-05-17 11:45:30 +02:00 committed by Frédéric Péters
parent 59a9d2f352
commit 348f9b50bf
2 changed files with 37 additions and 33 deletions

View File

@ -236,6 +236,8 @@ class ChartNgForm(ChartFiltersMixin, forms.ModelForm):
class ChartNgPartialForm(ChartFiltersMixin, forms.ModelForm):
prefix = 'filter'
class Meta:
model = ChartNgCell
fields = (
@ -252,15 +254,17 @@ class ChartNgPartialForm(ChartFiltersMixin, forms.ModelForm):
def clean(self):
for field in self._meta.fields:
if field not in self.data:
if '%s-%s' % (self.prefix, field) not in self.data:
self.cleaned_data[field] = self.initial[field]
for filter_ in self.instance.available_filters:
if filter_['id'] in self.data:
if '%s-%s' % (self.prefix, filter_['id']) in self.data:
self.instance.filter_params[filter_['id']] = self.cleaned_data.get(filter_['id'])
class ChartFiltersForm(ChartFiltersMixin, forms.ModelForm):
prefix = 'filter'
class Meta:
model = ChartNgCell
fields = (

View File

@ -2279,10 +2279,10 @@ def test_chart_filters_cell(new_api_statistics, app, admin_user, nocache):
first_cell.save()
resp = app.get('/')
assert len(resp.form.fields) == 7
assert 'time_range_start' in resp.form.fields
assert 'time_range_end' in resp.form.fields
assert 'filter-time_range_start' in resp.form.fields
assert 'filter-time_range_end' in resp.form.fields
time_range_field = resp.form['time_range']
time_range_field = resp.form['filter-time_range']
assert time_range_field.value == ''
assert time_range_field.options == [
('', True, '---------'),
@ -2295,7 +2295,7 @@ def test_chart_filters_cell(new_api_statistics, app, admin_user, nocache):
('range', False, 'Free range (date)'),
]
time_interval_field = resp.form['time_interval']
time_interval_field = resp.form['filter-time_interval']
assert time_interval_field.value == 'month'
assert time_interval_field.options == [
('day', False, 'Day'),
@ -2305,7 +2305,7 @@ def test_chart_filters_cell(new_api_statistics, app, admin_user, nocache):
('weekday', False, 'Week day'),
]
service_field = resp.form['service']
service_field = resp.form['filter-service']
assert service_field.value == 'chrono'
assert service_field.options == [
('', False, '---------'),
@ -2313,7 +2313,7 @@ def test_chart_filters_cell(new_api_statistics, app, admin_user, nocache):
('combo', False, 'Combo'),
]
ou_field = resp.form['ou']
ou_field = resp.form['filter-ou']
assert ou_field.value == ''
assert ou_field.options == [
('', True, '---------'),
@ -2328,7 +2328,7 @@ def test_chart_filters_cell(new_api_statistics, app, admin_user, nocache):
old_resp = resp
resp = app.get('/')
for field in ('time_range', 'time_interval', 'service', 'ou'):
assert resp.form[field].options == old_resp.form[field].options
assert resp.form['filter-%s' % field].options == old_resp.form['filter-%s' % field].options
# changing one filter value makes it disappear
cell.filter_params = {'ou': 'default'}
@ -2336,13 +2336,13 @@ def test_chart_filters_cell(new_api_statistics, app, admin_user, nocache):
resp = app.get('/')
assert 'ou' not in resp.form.fields
for field in ('time_range', 'time_interval', 'service'):
assert resp.form[field].options == old_resp.form[field].options
assert resp.form['filter-%s' % field].options == old_resp.form['filter-%s' % field].options
# setting the same value for the other cell makes it appear again
first_cell.filter_params = {'ou': 'default'}
first_cell.save()
resp = app.get('/')
assert resp.form['ou'].value == 'default'
assert resp.form['filter-ou'].value == 'default'
# changing statistics type of cell remove some fields
cell.statistic = Statistic.objects.get(slug='daily')
@ -2351,30 +2351,30 @@ def test_chart_filters_cell(new_api_statistics, app, admin_user, nocache):
assert 'ou' not in resp.form.fields
assert 'service' not in resp.form.fields
for field in ('time_range', 'time_interval'):
assert resp.form[field].options == old_resp.form[field].options
assert resp.form['filter-%s' % field].options == old_resp.form['filter-%s' % field].options
# changing time_interval value makes interval fields disappear
cell.time_range = 'previous-year'
cell.save()
old_resp = resp
resp = app.get('/')
assert 'time_range' not in resp.form.fields
assert 'time_range_start' not in resp.form.fields
assert 'time_range_end' not in resp.form.fields
assert resp.form['time_interval'].options == old_resp.form['time_interval'].options
assert 'filter-time_range' not in resp.form.fields
assert 'filter-time_range_start' not in resp.form.fields
assert 'filter-time_range_end' not in resp.form.fields
assert resp.form['filter-time_interval'].options == old_resp.form['filter-time_interval'].options
# setting the same value for the other cell makes it appear again
first_cell.time_range = 'previous-year'
first_cell.save()
resp = app.get('/')
assert resp.form['time_range'].value == 'previous-year'
assert resp.form['time_interval'].options == old_resp.form['time_interval'].options
assert resp.form['filter-time_range'].value == 'previous-year'
assert resp.form['filter-time_interval'].options == old_resp.form['filter-time_interval'].options
# only common choices are shown
first_cell.statistic.filters[0]['options'].remove({'id': 'day', 'label': 'Day'})
first_cell.statistic.save()
resp = app.get('/')
assert resp.form['time_interval'].options == [
assert resp.form['filter-time_interval'].options == [
('month', True, 'Month'),
('year', False, 'Year'),
]
@ -2383,8 +2383,8 @@ def test_chart_filters_cell(new_api_statistics, app, admin_user, nocache):
first_cell.statistic.filters[0]['options'] = [{'id': 'random', 'label': 'Random'}]
first_cell.statistic.save()
resp = app.get('/')
assert 'time_interval' not in resp.form.fields
assert resp.form['time_range'].value == 'previous-year'
assert 'filter-time_interval' not in resp.form.fields
assert resp.form['filter-time_range'].value == 'previous-year'
# form is not shown if no common filters exist
first_cell.time_range = 'current-year'
@ -2403,7 +2403,7 @@ def test_chart_filters_cell_future_data(app, admin_user, new_api_statistics):
app = login(app)
resp = app.get('/')
time_range_field = resp.form['time_range']
time_range_field = resp.form['filter-time_range']
assert time_range_field.value == ''
assert time_range_field.options == [
('', True, '---------'),
@ -2425,7 +2425,7 @@ def test_chart_filters_cell_future_data(app, admin_user, new_api_statistics):
cell.save()
resp = app.get('/')
time_range_field = resp.form['time_range']
time_range_field = resp.form['filter-time_range']
assert time_range_field.value == ''
assert time_range_field.options == [
('', True, '---------'),
@ -2449,8 +2449,8 @@ def test_chart_filters_cell_with_subfilters(new_api_statistics, app, admin_user,
app = login(app)
resp = app.get('/')
assert 'form' in resp.form.fields
assert 'menu' not in resp.form.fields
assert 'filter-form' in resp.form.fields
assert 'filter-menu' not in resp.form.fields
# select a choice with subfilters in manager
resp = app.get('/manage/pages/%s/' % page.id)
@ -2458,8 +2458,8 @@ def test_chart_filters_cell_with_subfilters(new_api_statistics, app, admin_user,
manager_submit_cell(resp.forms[1])
resp = app.get('/')
assert 'form' in resp.form.fields
assert 'menu' in resp.form.fields
assert 'filter-form' in resp.form.fields
assert 'filter-menu' in resp.form.fields
@with_httmock(new_api_mock)
@ -2483,7 +2483,7 @@ def test_chartng_cell_api_view_get_parameters(app, normal_user, new_api_statisti
assert 'time_interval=month' in request.url
assert 'ou=default' in request.url
app.get(location + '?time_interval=year')
app.get(location + '?filter-time_interval=year')
request = new_api_mock.call['requests'][2]
assert 'time_interval=year' in request.url
assert 'ou=default' in request.url
@ -2497,7 +2497,7 @@ def test_chartng_cell_api_view_get_parameters(app, normal_user, new_api_statisti
assert 'start=2022-01-01' in request.url
assert 'ou=default' in request.url
app.get(location + '?time_range=current-month')
app.get(location + '?filter-time_range=current-month')
request = new_api_mock.call['requests'][4]
assert 'start=2021-10-01' in request.url
assert 'end=2021-11-01' in request.url
@ -2506,7 +2506,7 @@ def test_chartng_cell_api_view_get_parameters(app, normal_user, new_api_statisti
cell.filter_params.clear()
cell.statistic = Statistic.objects.get(slug='filter-multiple')
cell.save()
app.get(location + '?color=green&color=blue')
app.get(location + '?filter-color=green&filter-color=blue')
request = new_api_mock.call['requests'][5]
assert 'color=green&color=blue' in request.url
@ -2515,18 +2515,18 @@ def test_chartng_cell_api_view_get_parameters(app, normal_user, new_api_statisti
cell.filter_params = {'form': 'food-request'}
cell.save()
cell.update_subfilters()
app.get(location + '?menu=vegan')
app.get(location + '?filter-menu=vegan')
request = new_api_mock.call['requests'][7]
assert 'menu=vegan' in request.url
# unknown params
app.get(location + '?time_interval=month&ou=default')
app.get(location + '?filter-time_interval=month&filter-ou=default')
request = new_api_mock.call['requests'][8]
assert 'time_interval=' not in request.url
assert 'ou=' not in request.url
# wrong params
resp = app.get(location + '?time_range_start=xxx')
resp = app.get(location + '?filter-time_range_start=xxx')
assert 'Wrong parameters' in resp.text
assert len(new_api_mock.call['requests']) == 9