wcs: empty card cell if card_id result is empty (#58413)
gitea-wip/combo/pipeline/head There was a failure building this commit Details
gitea/combo/pipeline/head Build started... Details

This commit is contained in:
Lauréline Guérin 2021-11-05 14:30:06 +01:00
parent d49d0a7541
commit d983ecd850
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 28 additions and 9 deletions

View File

@ -964,12 +964,9 @@ class WcsCardInfosCell(CardMixin, CellBase):
def get_card_id(self, context):
if self.card_id:
try:
card_id = Template(self.card_id).render(Context(context))
return Template(self.card_id).render(Context(context))
except (VariableDoesNotExist, TemplateSyntaxError):
return None
else:
if card_id:
return card_id
card_slug = self.carddef_reference.split(':')[1]
card_id = '%s_id' % card_slug
@ -995,6 +992,8 @@ class WcsCardInfosCell(CardMixin, CellBase):
card_id = self.get_card_id(context)
if not card_id:
if self.card_id: # template defined, but result is empty or None
extra_context['card_not_found'] = True
return extra_context
card_slug = self.carddef_reference.split(':')[1]
api_url = '/api/cards/%s/%s/?include-files-content=off' % (card_slug, card_id)

View File

@ -1,13 +1,14 @@
{% load assets i18n %}
{% block cell-content %}
{% if not card_not_found %}
{% block cell-header %}
{% if title %}<h2>{{ title }}</h2>{% endif %}
{% include "combo/asset_picture_fragment.html" %}
{% endblock %}
{% if card %}
{% if card.id %}
<div class="cell--body">
{% spaceless %}
{% if cell.custom_schema %}
@ -54,4 +55,5 @@
</div>
{% endif %}
{% endif %}
{% endblock %}

View File

@ -1952,29 +1952,47 @@ def test_card_cell_render_identifier(mock_send, context, nocache):
# check url called
mock_send.reset_mock()
cell.render(context)
result = cell.render(context)
assert '/api/cards/card_model_1/11/' in mock_send.call_args_list[0][0][0].url
assert 'Card Model 1' in result
assert '<p>Unknown Card</p>' not in result
# with identifier
cell.card_id = '42'
cell.save()
mock_send.reset_mock()
cell.render(context)
result = cell.render(context)
assert '/api/cards/card_model_1/42/' in mock_send.call_args_list[0][0][0].url
assert 'Card Model 1' in result
assert '<p>Unknown Card</p>' in result
context['cards'] = Cards()
cell.card_id = '{% cards|objects:"card_model_1"|last|get:"id" %}' # syntax error
cell.save()
mock_send.reset_mock()
cell.render(context)
result = cell.render(context)
assert mock_send.call_args_list == []
assert result.replace('\n', '') == '' # empty-cell
del context['card_not_found']
cell.card_id = '{{ cards|objects:"card_model_1"|last|get:"id" }}'
cell.save()
mock_send.reset_mock()
cell.render(context)
result = cell.render(context)
assert '/api/cards/card_model_1/list' in mock_send.call_args_list[0][0][0].url
assert '/api/cards/card_model_1/13/' in mock_send.call_args_list[1][0][0].url
assert 'Card Model 1' in result
assert '<p>Unknown Card</p>' in result
# with a card_id template, but result is empty
del context['card_model_1_id']
cell.card_id = '{{ foo }}'
cell.save()
assert cell.get_card_id(context) == ''
mock_send.reset_mock()
result = cell.render(context)
assert mock_send.call_args_list == []
assert result.replace('\n', '') == '' # empty-cell
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)