wcs: add an option to ignore user for cards cell (#53947)
This commit is contained in:
parent
9257955373
commit
6b2b381a54
|
@ -45,26 +45,48 @@ class WcsFormCellForm(forms.ModelForm):
|
|||
|
||||
|
||||
class WcsCardsCellForm(forms.ModelForm):
|
||||
with_user = forms.BooleanField(label=_('Restrict to cards accessible to the user'), required=False)
|
||||
|
||||
class Meta:
|
||||
model = WcsCardsCell
|
||||
fields = ('carddef_reference', 'only_for_user')
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
instance = kwargs['instance']
|
||||
initial = kwargs.pop('initial', {})
|
||||
initial['with_user'] = not instance.without_user
|
||||
super().__init__(initial=initial, *args, **kwargs)
|
||||
card_models = get_wcs_options('/api/cards/@list', include_custom_views=True)
|
||||
self.fields['carddef_reference'].widget = forms.Select(choices=card_models)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super().save(*args, **kwargs)
|
||||
self.instance.without_user = not self.cleaned_data['with_user']
|
||||
self.instance.save()
|
||||
return self.instance
|
||||
|
||||
|
||||
class WcsCardInfoCellForm(forms.ModelForm):
|
||||
with_user = forms.BooleanField(label=_('Restrict to cards accessible to the user'), required=False)
|
||||
|
||||
class Meta:
|
||||
model = WcsCardInfosCell
|
||||
fields = ('carddef_reference', 'card_id', 'without_user')
|
||||
fields = ('carddef_reference', 'card_id')
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
instance = kwargs['instance']
|
||||
initial = kwargs.pop('initial', {})
|
||||
initial['with_user'] = not instance.without_user
|
||||
super().__init__(initial=initial, *args, **kwargs)
|
||||
card_models = get_wcs_options('/api/cards/@list')
|
||||
self.fields['carddef_reference'].widget = forms.Select(choices=card_models)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super().save(*args, **kwargs)
|
||||
self.instance.without_user = not self.cleaned_data['with_user']
|
||||
self.instance.save()
|
||||
return self.instance
|
||||
|
||||
|
||||
class WcsCategoryCellForm(forms.ModelForm):
|
||||
class Meta:
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('wcs', '0027_careforms_categories'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='wcscardscell',
|
||||
name='without_user',
|
||||
field=models.BooleanField(default=False, verbose_name='Ignore the logged-in user'),
|
||||
),
|
||||
]
|
|
@ -315,7 +315,10 @@ class WcsBlurpMixin(object):
|
|||
response = requests.get(
|
||||
api_url,
|
||||
remote_service=wcs_site,
|
||||
user=getattr(context.get('request'), 'user', None),
|
||||
user=None
|
||||
if getattr(self, 'without_user', False)
|
||||
else getattr(context.get('request'), 'user', None),
|
||||
without_user=getattr(self, 'without_user', False),
|
||||
cache_duration=self.cache_duration,
|
||||
raise_if_not_cached=not (context.get('synchronous')),
|
||||
log_errors=False,
|
||||
|
@ -770,6 +773,7 @@ class WcsCardsCell(CardMixin, WcsBlurpMixin, CellBase):
|
|||
carddef_reference = models.CharField(_('Card Model'), max_length=150)
|
||||
cached_title = models.CharField(_('Title'), max_length=150)
|
||||
only_for_user = models.BooleanField(_('Limit to cards linked to the logged-in user'), default=False)
|
||||
without_user = models.BooleanField(_('Ignore the logged-in user'), default=False)
|
||||
|
||||
template_name = 'combo/wcs/cards.html'
|
||||
variable_name = 'cards'
|
||||
|
|
|
@ -1241,11 +1241,28 @@ def test_manager_current_forms(mock_send, app, admin_user):
|
|||
settings.KNOWN_SERVICES = temp_settings
|
||||
|
||||
|
||||
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
|
||||
def test_manager_cards_cell(mock_send, app, admin_user):
|
||||
page = Page.objects.create(title='xxx', slug='test_cards_cell_save_cache', template_name='standard')
|
||||
cell = WcsCardsCell.objects.create(page=page, placeholder='content', order=0)
|
||||
app = login(app)
|
||||
|
||||
resp = app.get('/manage/pages/%s/' % page.pk)
|
||||
assert ('data-cell-reference="%s"' % cell.get_reference()) in resp.text
|
||||
assert cell.without_user is False
|
||||
assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value == 'on'
|
||||
resp.forms[0]['c%s-with_user' % cell.get_reference()].value = False
|
||||
resp.forms[0].submit().follow()
|
||||
cell.refresh_from_db()
|
||||
assert cell.without_user is True
|
||||
assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value is None
|
||||
|
||||
|
||||
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
|
||||
def test_cards_cell_setup(mock_send):
|
||||
cell = WcsCardsCell()
|
||||
form_class = cell.get_default_form_class()
|
||||
form = form_class()
|
||||
form = form_class(instance=cell)
|
||||
assert form.fields['carddef_reference'].widget.choices == [
|
||||
('default:card_model_1', 'test : Card Model 1'),
|
||||
('default:card_model_1:foo', 'test : Card Model 1 - bar'),
|
||||
|
@ -1457,11 +1474,76 @@ def test_cards_cell_only_for_user(mock_send, context):
|
|||
assert 'filter-user-uuid=xyz' in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
|
||||
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
|
||||
def test_cards_cell_render_user(mock_send, context, nocache):
|
||||
page = Page.objects.create(title='xxx', template_name='standard')
|
||||
cell = WcsCardsCell(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
|
||||
|
||||
|
||||
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
|
||||
def test_manager_card_cell(mock_send, app, admin_user):
|
||||
page = Page.objects.create(title='xxx', slug='test_cards_cell_save_cache', template_name='standard')
|
||||
cell = WcsCardInfosCell.objects.create(page=page, placeholder='content', order=0)
|
||||
app = login(app)
|
||||
|
||||
resp = app.get('/manage/pages/%s/' % page.pk)
|
||||
assert ('data-cell-reference="%s"' % cell.get_reference()) in resp.text
|
||||
assert cell.without_user is False
|
||||
assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value == 'on'
|
||||
resp.forms[0]['c%s-with_user' % cell.get_reference()].value = False
|
||||
resp.forms[0].submit().follow()
|
||||
cell.refresh_from_db()
|
||||
assert cell.without_user is True
|
||||
assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value is None
|
||||
|
||||
|
||||
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
|
||||
def test_card_cell_setup(mock_send):
|
||||
cell = WcsCardInfosCell()
|
||||
form_class = cell.get_default_form_class()
|
||||
form = form_class()
|
||||
form = form_class(instance=cell)
|
||||
assert form.fields['carddef_reference'].widget.choices == [
|
||||
('default:card_model_1', 'test : Card Model 1'),
|
||||
('default:card_model_2', 'test : Card Model 2'),
|
||||
|
|
Loading…
Reference in New Issue