0001-wcs-add-an-option-to-ignore-user-for-cards-cell-5394.patch
combo/apps/wcs/forms.py | ||
---|---|---|
45 | 45 | |
46 | 46 | |
47 | 47 |
class WcsCardsCellForm(forms.ModelForm): |
48 |
with_user = forms.BooleanField(label=_('Restrict to cards accessible to the user'), required=False) |
|
49 | ||
48 | 50 |
class Meta: |
49 | 51 |
model = WcsCardsCell |
50 | 52 |
fields = ('carddef_reference', 'only_for_user') |
51 | 53 | |
52 | 54 |
def __init__(self, *args, **kwargs): |
53 |
super().__init__(*args, **kwargs) |
|
55 |
instance = kwargs['instance'] |
|
56 |
initial = kwargs.pop('initial', {}) |
|
57 |
initial['with_user'] = not instance.without_user |
|
58 |
super().__init__(initial=initial, *args, **kwargs) |
|
54 | 59 |
card_models = get_wcs_options('/api/cards/@list', include_custom_views=True) |
55 | 60 |
self.fields['carddef_reference'].widget = forms.Select(choices=card_models) |
56 | 61 | |
62 |
def save(self, *args, **kwargs): |
|
63 |
super().save(*args, **kwargs) |
|
64 |
self.instance.without_user = not self.cleaned_data['with_user'] |
|
65 |
self.instance.save() |
|
66 |
return self.instance |
|
67 | ||
57 | 68 | |
58 | 69 |
class WcsCardInfoCellForm(forms.ModelForm): |
70 |
with_user = forms.BooleanField(label=_('Restrict to cards accessible to the user'), required=False) |
|
71 | ||
59 | 72 |
class Meta: |
60 | 73 |
model = WcsCardInfosCell |
61 |
fields = ('carddef_reference', 'card_id', 'without_user')
|
|
74 |
fields = ('carddef_reference', 'card_id') |
|
62 | 75 | |
63 | 76 |
def __init__(self, *args, **kwargs): |
64 |
super().__init__(*args, **kwargs) |
|
77 |
instance = kwargs['instance'] |
|
78 |
initial = kwargs.pop('initial', {}) |
|
79 |
initial['with_user'] = not instance.without_user |
|
80 |
super().__init__(initial=initial, *args, **kwargs) |
|
65 | 81 |
card_models = get_wcs_options('/api/cards/@list') |
66 | 82 |
self.fields['carddef_reference'].widget = forms.Select(choices=card_models) |
67 | 83 | |
84 |
def save(self, *args, **kwargs): |
|
85 |
super().save(*args, **kwargs) |
|
86 |
self.instance.without_user = not self.cleaned_data['with_user'] |
|
87 |
self.instance.save() |
|
88 |
return self.instance |
|
89 | ||
68 | 90 | |
69 | 91 |
class WcsCategoryCellForm(forms.ModelForm): |
70 | 92 |
class Meta: |
combo/apps/wcs/migrations/0028_wcscardscell_without_user.py | ||
---|---|---|
1 |
from __future__ import unicode_literals |
|
2 | ||
3 |
from django.db import migrations, models |
|
4 | ||
5 | ||
6 |
class Migration(migrations.Migration): |
|
7 | ||
8 |
dependencies = [ |
|
9 |
('wcs', '0027_careforms_categories'), |
|
10 |
] |
|
11 | ||
12 |
operations = [ |
|
13 |
migrations.AddField( |
|
14 |
model_name='wcscardscell', |
|
15 |
name='without_user', |
|
16 |
field=models.BooleanField(default=False, verbose_name='Ignore the logged-in user'), |
|
17 |
), |
|
18 |
] |
combo/apps/wcs/models.py | ||
---|---|---|
315 | 315 |
response = requests.get( |
316 | 316 |
api_url, |
317 | 317 |
remote_service=wcs_site, |
318 |
user=getattr(context.get('request'), 'user', None), |
|
318 |
user=None |
|
319 |
if getattr(self, 'without_user', False) |
|
320 |
else getattr(context.get('request'), 'user', None), |
|
321 |
without_user=getattr(self, 'without_user', False), |
|
319 | 322 |
cache_duration=self.cache_duration, |
320 | 323 |
raise_if_not_cached=not (context.get('synchronous')), |
321 | 324 |
log_errors=False, |
... | ... | |
781 | 784 |
carddef_reference = models.CharField(_('Card Model'), max_length=150) |
782 | 785 |
cached_title = models.CharField(_('Title'), max_length=150) |
783 | 786 |
only_for_user = models.BooleanField(_('Limit to cards linked to the logged-in user'), default=False) |
787 |
without_user = models.BooleanField(_('Ignore the logged-in user'), default=False) |
|
784 | 788 | |
785 | 789 |
template_name = 'combo/wcs/cards.html' |
786 | 790 |
variable_name = 'cards' |
tests/test_wcs.py | ||
---|---|---|
1199 | 1199 |
settings.KNOWN_SERVICES = temp_settings |
1200 | 1200 | |
1201 | 1201 | |
1202 |
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send) |
|
1203 |
def test_manager_cards_cell(mock_send, app, admin_user): |
|
1204 |
page = Page.objects.create(title='xxx', slug='test_cards_cell_save_cache', template_name='standard') |
|
1205 |
cell = WcsCardsCell.objects.create(page=page, placeholder='content', order=0) |
|
1206 |
app = login(app) |
|
1207 | ||
1208 |
resp = app.get('/manage/pages/%s/' % page.pk) |
|
1209 |
assert ('data-cell-reference="%s"' % cell.get_reference()) in resp.text |
|
1210 |
assert cell.without_user is False |
|
1211 |
assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value == 'on' |
|
1212 |
resp.forms[0]['c%s-with_user' % cell.get_reference()].value = False |
|
1213 |
resp.forms[0].submit().follow() |
|
1214 |
cell.refresh_from_db() |
|
1215 |
assert cell.without_user is True |
|
1216 |
assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value is None |
|
1217 | ||
1218 | ||
1202 | 1219 |
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send) |
1203 | 1220 |
def test_cards_cell_setup(mock_send): |
1204 | 1221 |
cell = WcsCardsCell() |
1205 | 1222 |
form_class = cell.get_default_form_class() |
1206 |
form = form_class() |
|
1223 |
form = form_class(instance=cell)
|
|
1207 | 1224 |
assert form.fields['carddef_reference'].widget.choices == [ |
1208 | 1225 |
('default:card_model_1', 'test : Card Model 1'), |
1209 | 1226 |
('default:card_model_1:foo', 'test : Card Model 1 - bar'), |
... | ... | |
1415 | 1432 |
assert 'filter-user-uuid=xyz' in mock_send.call_args_list[0][0][0].url |
1416 | 1433 | |
1417 | 1434 | |
1435 |
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send) |
|
1436 |
def test_cards_cell_render_user(mock_send, context, nocache): |
|
1437 |
page = Page.objects.create(title='xxx', template_name='standard') |
|
1438 |
cell = WcsCardsCell(page=page, placeholder='content', order=0) |
|
1439 |
cell.carddef_reference = u'default:card_model_1' |
|
1440 |
cell.save() |
|
1441 | ||
1442 |
context['card_model_1_id'] = 11 |
|
1443 |
context['synchronous'] = True # to get fresh content |
|
1444 | ||
1445 |
assert context['request'].user is None |
|
1446 |
mock_send.reset_mock() |
|
1447 |
cell.render(context) |
|
1448 |
assert 'NameID=&' in mock_send.call_args_list[0][0][0].url |
|
1449 |
assert 'email=&' in mock_send.call_args_list[0][0][0].url |
|
1450 | ||
1451 |
context['request'].user = MockUser() |
|
1452 |
mock_send.reset_mock() |
|
1453 |
cell.render(context) |
|
1454 |
assert 'email=foo%40example.net' in mock_send.call_args_list[0][0][0].url |
|
1455 | ||
1456 |
context['request'].user = MockUserWithNameId() |
|
1457 |
mock_send.reset_mock() |
|
1458 |
cell.render(context) |
|
1459 |
assert 'NameID=xyz' in mock_send.call_args_list[0][0][0].url |
|
1460 | ||
1461 |
cell.without_user = True |
|
1462 |
cell.save() |
|
1463 | ||
1464 |
context['request'].user = None |
|
1465 |
mock_send.reset_mock() |
|
1466 |
cell.render(context) |
|
1467 |
assert 'NameID' not in mock_send.call_args_list[0][0][0].url |
|
1468 |
assert 'email' not in mock_send.call_args_list[0][0][0].url |
|
1469 | ||
1470 |
context['request'].user = MockUser() |
|
1471 |
mock_send.reset_mock() |
|
1472 |
cell.render(context) |
|
1473 |
assert 'NameID' not in mock_send.call_args_list[0][0][0].url |
|
1474 |
assert 'email' not in mock_send.call_args_list[0][0][0].url |
|
1475 | ||
1476 |
context['request'].user = MockUserWithNameId() |
|
1477 |
mock_send.reset_mock() |
|
1478 |
cell.render(context) |
|
1479 |
assert 'NameID' not in mock_send.call_args_list[0][0][0].url |
|
1480 |
assert 'email' not in mock_send.call_args_list[0][0][0].url |
|
1481 | ||
1482 | ||
1483 |
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send) |
|
1484 |
def test_manager_card_cell(mock_send, app, admin_user): |
|
1485 |
page = Page.objects.create(title='xxx', slug='test_cards_cell_save_cache', template_name='standard') |
|
1486 |
cell = WcsCardInfosCell.objects.create(page=page, placeholder='content', order=0) |
|
1487 |
app = login(app) |
|
1488 | ||
1489 |
resp = app.get('/manage/pages/%s/' % page.pk) |
|
1490 |
assert ('data-cell-reference="%s"' % cell.get_reference()) in resp.text |
|
1491 |
assert cell.without_user is False |
|
1492 |
assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value == 'on' |
|
1493 |
resp.forms[0]['c%s-with_user' % cell.get_reference()].value = False |
|
1494 |
resp.forms[0].submit().follow() |
|
1495 |
cell.refresh_from_db() |
|
1496 |
assert cell.without_user is True |
|
1497 |
assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value is None |
|
1498 | ||
1499 | ||
1418 | 1500 |
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send) |
1419 | 1501 |
def test_card_cell_setup(mock_send): |
1420 | 1502 |
cell = WcsCardInfosCell() |
1421 | 1503 |
form_class = cell.get_default_form_class() |
1422 |
form = form_class() |
|
1504 |
form = form_class(instance=cell)
|
|
1423 | 1505 |
assert form.fields['carddef_reference'].widget.choices == [ |
1424 | 1506 |
('default:card_model_1', 'test : Card Model 1'), |
1425 | 1507 |
('default:card_model_2', 'test : Card Model 2'), |
1426 |
- |