wcs: add an option to ignore user for card cell (#49388)
This commit is contained in:
parent
6b0b6509b1
commit
1fb968ee3e
|
@ -51,7 +51,7 @@ class WcsCardsCellForm(forms.ModelForm):
|
|||
class WcsCardInfoCellForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = WcsCardInfosCell
|
||||
fields = ('carddef_reference', 'card_id')
|
||||
fields = ('carddef_reference', 'card_id', 'without_user')
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wcs', '0023_card_info_id'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='wcscardinfoscell',
|
||||
name='without_user',
|
||||
field=models.BooleanField(default=False, verbose_name='Ignore the logged-in user'),
|
||||
),
|
||||
]
|
|
@ -839,6 +839,7 @@ class WcsCardsCell(CardMixin, WcsBlurpMixin, CellBase):
|
|||
class WcsCardInfosCell(CardMixin, CellBase):
|
||||
carddef_reference = models.CharField(_('Card Model'), max_length=150)
|
||||
card_id = models.CharField(_('Card Identifier'), max_length=150, blank=True)
|
||||
without_user = models.BooleanField(_('Ignore the logged-in user'), default=False)
|
||||
|
||||
cached_title = models.CharField(_('Title'), max_length=150)
|
||||
cached_json = JSONField(blank=True)
|
||||
|
@ -915,7 +916,8 @@ class WcsCardInfosCell(CardMixin, CellBase):
|
|||
response = requests.get(
|
||||
api_url,
|
||||
remote_service=wcs_site,
|
||||
user=getattr(context.get('request'), 'user', None),
|
||||
user=None if self.without_user else getattr(context.get('request'), 'user', None),
|
||||
without_user=self.without_user,
|
||||
cache_duration=5,
|
||||
raise_if_not_cached=not(context.get('synchronous')),
|
||||
log_errors=False)
|
||||
|
|
|
@ -1385,30 +1385,92 @@ def test_card_cell_render(mock_send, context):
|
|||
assert 'related_raw' not in result
|
||||
assert 'related_structured' not in result
|
||||
|
||||
|
||||
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
|
||||
def test_card_cell_render_identifier(mock_send, context, nocache):
|
||||
page = Page.objects.create(title='xxx', template_name='standard')
|
||||
cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
|
||||
cell.carddef_reference = u'default:card_model_1'
|
||||
cell.save()
|
||||
|
||||
context['card_model_1_id'] = 11
|
||||
context['synchronous'] = True # to get fresh content
|
||||
|
||||
# check url called
|
||||
mock_send.reset_mock()
|
||||
cell.render(context)
|
||||
assert '/api/cards/card_model_1/11/' in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
# with identifier
|
||||
cell.card_id = '42'
|
||||
cell.save()
|
||||
mock_send.reset_mock()
|
||||
result = cell.render(context)
|
||||
cell.render(context)
|
||||
assert '/api/cards/card_model_1/42/' in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
context['cards'] = Cards()
|
||||
cell.card_id = '{% cards|objects:"card_model_1"|last|get:"id" %}' # syntax error
|
||||
cell.save()
|
||||
mock_send.reset_mock()
|
||||
result = cell.render(context)
|
||||
cell.render(context)
|
||||
assert mock_send.call_args_list == []
|
||||
|
||||
cell.card_id = '{{ cards|objects:"card_model_1"|last|get:"id" }}'
|
||||
cell.save()
|
||||
result = cell.render(context)
|
||||
mock_send.reset_mock()
|
||||
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
|
||||
|
||||
|
||||
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
|
||||
def test_card_cell_render_user(mock_send, context, nocache):
|
||||
page = Page.objects.create(title='xxx', template_name='standard')
|
||||
cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
|
||||
cell.carddef_reference = u'default:card_model_1'
|
||||
cell.save()
|
||||
|
||||
context['card_model_1_id'] = 11
|
||||
context['synchronous'] = True # to get fresh content
|
||||
|
||||
assert context['request'].user is None
|
||||
mock_send.reset_mock()
|
||||
cell.render(context)
|
||||
assert 'NameID=&' in mock_send.call_args_list[0][0][0].url
|
||||
assert 'email=&' in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
context['request'].user = MockUser()
|
||||
mock_send.reset_mock()
|
||||
cell.render(context)
|
||||
assert 'email=foo%40example.net' in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
context['request'].user = MockUserWithNameId()
|
||||
mock_send.reset_mock()
|
||||
cell.render(context)
|
||||
assert 'NameID=xyz' in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
cell.without_user = True
|
||||
cell.save()
|
||||
|
||||
context['request'].user = None
|
||||
mock_send.reset_mock()
|
||||
cell.render(context)
|
||||
assert 'NameID' not in mock_send.call_args_list[0][0][0].url
|
||||
assert 'email' not in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
context['request'].user = MockUser()
|
||||
mock_send.reset_mock()
|
||||
cell.render(context)
|
||||
assert 'NameID' not in mock_send.call_args_list[0][0][0].url
|
||||
assert 'email' not in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
context['request'].user = MockUserWithNameId()
|
||||
mock_send.reset_mock()
|
||||
cell.render(context)
|
||||
assert 'NameID' not in mock_send.call_args_list[0][0][0].url
|
||||
assert 'email' not in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
|
||||
def test_tracking_code_cell(app, nocache):
|
||||
page = Page(title='One', slug='index', template_name='standard')
|
||||
page.save()
|
||||
|
|
Loading…
Reference in New Issue