diff --git a/combo/data/models.py b/combo/data/models.py index 989f2301..fcb7564d 100644 --- a/combo/data/models.py +++ b/combo/data/models.py @@ -1331,9 +1331,8 @@ class CellBase(models.Model, metaclass=CellMeta): condition = self.condition if not condition: return True - context = RequestContext(request) - if condition in self.page.extra_variables: - condition = self.page.extra_variables[condition].strip('{ }') + context = self.page.get_extra_variables(request, {}) + context = RequestContext(request, context) try: return Template('{%% if %s %%}OK{%% endif %%}' % condition).render(context) == 'OK' except (TemplateSyntaxError, VariableDoesNotExist): diff --git a/tests/test_wcs.py b/tests/test_wcs.py index 31f37153..2e57cbcf 100644 --- a/tests/test_wcs.py +++ b/tests/test_wcs.py @@ -430,7 +430,7 @@ def get_data_from_url(url): return WCS_CARDS_CUSTOM_VIEW_DATA m_list = re.match(r'/api/cards/([a-z0-9_]+)/list', url) if m_list: - return WCS_CARDS_DATA[m_list.group(1)] + return WCS_CARDS_DATA.get(m_list.group(1)) or [] return [] @@ -4249,18 +4249,44 @@ def test_cell_condition(mock_send, nocache, app): resp = app.get(page.get_online_url()) assert len(resp.context.get('cells') or []) == 0 - page.extra_variables = {'var1': 'cards|objects:"card_model_1"|getlist:"id"|list'} + page.extra_variables = {'var1': '{{ cards|objects:"card_model_1"|getlist:"id"|list }}'} page.save() cell.condition = 'var1' cell.save() resp = app.get(page.get_online_url()) assert len(resp.context['cells']) == 1 - page.extra_variables = {'var1': 'cards|objects:"card_model_1"|getlist:"id"|get:42'} + page.extra_variables = {'var1': '{{ cards|objects:"card_model_1"|getlist:"id"|get:42|default:"" }}'} page.save() resp = app.get(page.get_online_url()) assert len(resp.context.get('cells') or []) == 0 + page.extra_variables = { + 'var1': '{{ cards|objects:"unknown"|first|get:"id"|default:"" }}', + 'var2': '{{ cards|objects:"card_model_1"|first|get:"id"|default:"" }}', + } + page.save() + cell.condition = 'not var1' + cell.save() + resp = app.get(page.get_online_url()) + assert len(resp.context['cells']) == 1 + cell.condition = 'var2' + cell.save() + resp = app.get(page.get_online_url()) + assert len(resp.context['cells']) == 1 + cell.condition = 'not var2' + cell.save() + resp = app.get(page.get_online_url()) + assert len(resp.context.get('cells') or []) == 0 + cell.condition = 'not var1 and not var2' + cell.save() + resp = app.get(page.get_online_url()) + assert len(resp.context.get('cells') or []) == 0 + cell.condition = 'not var1 and var2' + cell.save() + resp = app.get(page.get_online_url()) + assert len(resp.context['cells']) == 1 + @mock.patch('requests.Session.send', side_effect=mocked_requests_send) def test_link_list_cell_condition(mock_send, nocache, app): @@ -4286,7 +4312,7 @@ def test_link_list_cell_condition(mock_send, nocache, app): assert len(resp.context['cells']) == 1 assert 'Example Site' not in resp - page.extra_variables = {'var1': 'cards|objects:"card_model_1"|getlist:"id"'} + page.extra_variables = {'var1': '{{ cards|objects:"card_model_1"|getlist:"id"|list }}'} page.save() link_cell.condition = 'var1' link_cell.save() @@ -4294,7 +4320,7 @@ def test_link_list_cell_condition(mock_send, nocache, app): assert len(resp.context['cells']) == 1 assert 'Example Site' in resp - page.extra_variables = {'var1': 'cards|objects:"card_model_1"|getlist:"id"|get:42'} + page.extra_variables = {'var1': '{{ cards|objects:"card_model_1"|getlist:"id"|get:42|default:"" }}'} page.save() resp = app.get(page.get_online_url()) assert len(resp.context['cells']) == 1