Projet

Général

Profil

0001-wcs-add-an-option-to-ignore-user-for-card-cell-49388.patch

Lauréline Guérin, 19 janvier 2021 09:29

Télécharger (6,59 ko)

Voir les différences:

Subject: [PATCH] wcs: add an option to ignore user for card cell (#49388)

 combo/apps/wcs/forms.py                       |  2 +-
 .../wcs/migrations/0024_card_info_user.py     | 19 ++++++
 combo/apps/wcs/models.py                      |  4 +-
 tests/test_wcs.py                             | 68 ++++++++++++++++++-
 4 files changed, 88 insertions(+), 5 deletions(-)
 create mode 100644 combo/apps/wcs/migrations/0024_card_info_user.py
combo/apps/wcs/forms.py
51 51
class WcsCardInfoCellForm(forms.ModelForm):
52 52
    class Meta:
53 53
        model = WcsCardInfosCell
54
        fields = ('carddef_reference', 'card_id')
54
        fields = ('carddef_reference', 'card_id', 'without_user')
55 55

  
56 56
    def __init__(self, *args, **kwargs):
57 57
        super().__init__(*args, **kwargs)
combo/apps/wcs/migrations/0024_card_info_user.py
1
# -*- coding: utf-8 -*-
2
from __future__ import unicode_literals
3

  
4
from django.db import migrations, models
5

  
6

  
7
class Migration(migrations.Migration):
8

  
9
    dependencies = [
10
        ('wcs', '0023_card_info_id'),
11
    ]
12

  
13
    operations = [
14
        migrations.AddField(
15
            model_name='wcscardinfoscell',
16
            name='without_user',
17
            field=models.BooleanField(default=False, verbose_name='Ignore the logged-in user'),
18
        ),
19
    ]
combo/apps/wcs/models.py
839 839
class WcsCardInfosCell(CardMixin, CellBase):
840 840
    carddef_reference = models.CharField(_('Card Model'), max_length=150)
841 841
    card_id = models.CharField(_('Card Identifier'), max_length=150, blank=True)
842
    without_user = models.BooleanField(_('Ignore the logged-in user'), default=False)
842 843

  
843 844
    cached_title = models.CharField(_('Title'), max_length=150)
844 845
    cached_json = JSONField(blank=True)
......
915 916
            response = requests.get(
916 917
                    api_url,
917 918
                    remote_service=wcs_site,
918
                    user=getattr(context.get('request'), 'user', None),
919
                    user=None if self.without_user else getattr(context.get('request'), 'user', None),
920
                    without_user=self.without_user,
919 921
                    cache_duration=5,
920 922
                    raise_if_not_cached=not(context.get('synchronous')),
921 923
                    log_errors=False)
tests/test_wcs.py
1385 1385
    assert 'related_raw' not in result
1386 1386
    assert 'related_structured' not in result
1387 1387

  
1388

  
1389
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
1390
def test_card_cell_render_identifier(mock_send, context, nocache):
1391
    page = Page.objects.create(title='xxx', template_name='standard')
1392
    cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
1393
    cell.carddef_reference = u'default:card_model_1'
1394
    cell.save()
1395

  
1396
    context['card_model_1_id'] = 11
1397
    context['synchronous'] = True  # to get fresh content
1398

  
1388 1399
    # check url called
1400
    mock_send.reset_mock()
1401
    cell.render(context)
1389 1402
    assert '/api/cards/card_model_1/11/' in mock_send.call_args_list[0][0][0].url
1390 1403

  
1391 1404
    # with identifier
1392 1405
    cell.card_id = '42'
1393 1406
    cell.save()
1394 1407
    mock_send.reset_mock()
1395
    result = cell.render(context)
1408
    cell.render(context)
1396 1409
    assert '/api/cards/card_model_1/42/' in mock_send.call_args_list[0][0][0].url
1397 1410

  
1398 1411
    context['cards'] = Cards()
1399 1412
    cell.card_id = '{% cards|objects:"card_model_1"|last|get:"id" %}'  # syntax error
1400 1413
    cell.save()
1401 1414
    mock_send.reset_mock()
1402
    result = cell.render(context)
1415
    cell.render(context)
1403 1416
    assert mock_send.call_args_list == []
1404 1417

  
1405 1418
    cell.card_id = '{{ cards|objects:"card_model_1"|last|get:"id" }}'
1406 1419
    cell.save()
1407
    result = cell.render(context)
1420
    mock_send.reset_mock()
1421
    cell.render(context)
1408 1422
    assert '/api/cards/card_model_1/list' in mock_send.call_args_list[0][0][0].url
1409 1423
    assert '/api/cards/card_model_1/13/' in mock_send.call_args_list[1][0][0].url
1410 1424

  
1411 1425

  
1426
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
1427
def test_card_cell_render_user(mock_send, context, nocache):
1428
    page = Page.objects.create(title='xxx', template_name='standard')
1429
    cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
1430
    cell.carddef_reference = u'default:card_model_1'
1431
    cell.save()
1432

  
1433
    context['card_model_1_id'] = 11
1434
    context['synchronous'] = True  # to get fresh content
1435

  
1436
    assert context['request'].user is None
1437
    mock_send.reset_mock()
1438
    cell.render(context)
1439
    assert 'NameID=&' in mock_send.call_args_list[0][0][0].url
1440
    assert 'email=&' in mock_send.call_args_list[0][0][0].url
1441

  
1442
    context['request'].user = MockUser()
1443
    mock_send.reset_mock()
1444
    cell.render(context)
1445
    assert 'email=foo%40example.net' in mock_send.call_args_list[0][0][0].url
1446

  
1447
    context['request'].user = MockUserWithNameId()
1448
    mock_send.reset_mock()
1449
    cell.render(context)
1450
    assert 'NameID=xyz' in mock_send.call_args_list[0][0][0].url
1451

  
1452
    cell.without_user = True
1453
    cell.save()
1454

  
1455
    context['request'].user = None
1456
    mock_send.reset_mock()
1457
    cell.render(context)
1458
    assert 'NameID' not in mock_send.call_args_list[0][0][0].url
1459
    assert 'email' not in mock_send.call_args_list[0][0][0].url
1460

  
1461
    context['request'].user = MockUser()
1462
    mock_send.reset_mock()
1463
    cell.render(context)
1464
    assert 'NameID' not in mock_send.call_args_list[0][0][0].url
1465
    assert 'email' not in mock_send.call_args_list[0][0][0].url
1466

  
1467
    context['request'].user = MockUserWithNameId()
1468
    mock_send.reset_mock()
1469
    cell.render(context)
1470
    assert 'NameID' not in mock_send.call_args_list[0][0][0].url
1471
    assert 'email' not in mock_send.call_args_list[0][0][0].url
1472

  
1473

  
1412 1474
def test_tracking_code_cell(app, nocache):
1413 1475
    page = Page(title='One', slug='index', template_name='standard')
1414 1476
    page.save()
1415
-