dataviz: ignore hidden chart cells when building filters (#81148) #162

Merged
vdeniaud merged 1 commits from wip/81148-dataviz-ne-pas-tenir-compte-des- into main 2023-09-18 17:55:11 +02:00
3 changed files with 40 additions and 3 deletions

View File

@ -345,7 +345,12 @@ class ChartFiltersForm(ChartFiltersMixin, forms.ModelForm):
filters_cell_id = kwargs.pop('filters_cell_id', None)
super().__init__(*args, **kwargs)
chart_cells = list(ChartNgCell.objects.filter(page=page, statistic__isnull=False).order_by('order'))
chart_cells = []
for cell in ChartNgCell.objects.filter(page=page, statistic__isnull=False).order_by('order'):
cell.page = page # use cached placeholders
if cell.is_placeholder_active(traverse_cells=False):
chart_cells.append(cell)
if not chart_cells:
self.fields.clear()
return

View File

@ -1386,7 +1386,7 @@ class CellBase(models.Model, metaclass=CellMeta):
validity_info.invalid_reason_code, validity_info.invalid_reason_code
)
def is_placeholder_active(self):
def is_placeholder_active(self, traverse_cells=True):
if not self.placeholder:
return False
if self.placeholder.startswith('_'):
@ -1394,7 +1394,7 @@ class CellBase(models.Model, metaclass=CellMeta):
request = RequestFactory().get('/')
if not hasattr(self.page, '_placeholders'):
self.page._placeholders = self.page.get_placeholders(request, traverse_cells=True)
self.page._placeholders = self.page.get_placeholders(request, traverse_cells=traverse_cells)
for placeholder in self.page._placeholders:
if placeholder.key == self.placeholder:
return True

View File

@ -3136,6 +3136,38 @@ def test_chart_filters_cell_select_filters(new_api_statistics, app, admin_user,
assert resp.forms[0].get(field_prefix + 'filters', index=0).value == 'ou'
@with_httmock(new_api_mock)
def test_chart_filters_cell_hidden_cells(new_api_statistics, app, admin_user):
page = Page.objects.create(title='One', slug='index')
ChartFiltersCell.objects.create(page=page, order=1, placeholder='content')
app = login(app)
resp = app.get('/')
assert 'No filters are available' in resp.text
cell = ChartNgCell.objects.create(page=page, order=2, placeholder='content')
cell.statistic = Statistic.objects.get(slug='one-serie')
cell.save()
resp = app.get('/')
assert 'filter-ou' in resp.form.fields
cell = ChartNgCell(page=page, order=3, placeholder='content')
cell.statistic = Statistic.objects.get(slug='one-serie')
cell.filter_params = {'ou': 'default'}
cell.save()
# new cell has consequence on filter computation
resp = app.get('/')
assert 'filter-ou' not in resp.form.fields
cell.placeholder = ''
cell.save()
# new cell has no consequence on filter computation since it is hidden
resp = app.get('/')
assert 'filter-ou' in resp.form.fields
@with_httmock(new_api_mock)
@pytest.mark.freeze_time('2021-10-06')
def test_chartng_cell_api_view_get_parameters(app, normal_user, new_api_statistics, nocache):