Projet

Général

Profil

0001-wcs-add-card-identifier-on-Card-Info-cell-50001.patch

Lauréline Guérin, 12 janvier 2021 10:16

Télécharger (5,88 ko)

Voir les différences:

Subject: [PATCH] wcs: add card identifier on Card Info cell (#50001)

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

  
56 56
    def __init__(self, *args, **kwargs):
57 57
        super().__init__(*args, **kwargs)
combo/apps/wcs/migrations/0023_card_info_id.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', '0022_cards_user'),
11
    ]
12

  
13
    operations = [
14
        migrations.AddField(
15
            model_name='wcscardinfoscell',
16
            name='card_id',
17
            field=models.CharField(blank=True, max_length=150, verbose_name='Card Identifier'),
18
        ),
19
    ]
combo/apps/wcs/models.py
31 31

  
32 32
from combo.data.models import CellBase, Page
33 33
from combo.data.library import register_cell_class
34
from combo import utils
34 35
from combo.utils import requests
35 36

  
36 37
from .utils import get_wcs_json, is_wcs_enabled, get_wcs_services
......
836 837
@register_cell_class
837 838
class WcsCardInfosCell(CardMixin, CellBase):
838 839
    carddef_reference = models.CharField(_('Card Model'), max_length=150)
840
    card_id = models.CharField(_('Card Identifier'), max_length=150, blank=True)
839 841

  
840 842
    cached_title = models.CharField(_('Title'), max_length=150)
841 843
    cached_json = JSONField(blank=True)
......
881 883

  
882 884
        populate_cache()
883 885

  
886
    def get_card_id(self, context):
887
        if self.card_id:
888
            try:
889
                card_id = utils.get_templated_url('{%% load wcs %%}%s' % self.card_id, context)
890
            except utils.TemplateError:
891
                return None
892
            else:
893
                if card_id:
894
                    return card_id
895

  
896
        card_slug = self.carddef_reference.split(':')[1]
897
        card_id = '%s_id' % card_slug
898
        return context.get(card_id) or None
899

  
884 900
    def get_cell_extra_context(self, context):
885 901
        extra_context = super().get_cell_extra_context(context)
886 902
        extra_context['title'] = self.cached_title
887 903
        extra_context['schema'] = self.cached_json
888 904

  
889
        card_slug = self.carddef_reference.split(':')[1]
890
        card_id = '%s_id' % card_slug
891
        if not context.get(card_id):
905
        card_id = self.get_card_id(context)
906
        if not card_id:
892 907
            return extra_context
893
        api_url = 'api/cards/%s/%s/' % (card_slug, context.get(card_id))
908
        card_slug = self.carddef_reference.split(':')[1]
909
        api_url = 'api/cards/%s/%s/' % (card_slug, card_id)
894 910

  
895 911
        wcs_site = get_wcs_services().get(self.wcs_site)
896 912

  
tests/test_wcs.py
27 27
    WcsFormsOfCategoryCell, WcsCurrentDraftsCell, WcsCategoryCell,
28 28
    TrackingCodeInputCell, BackofficeSubmissionCell, WcsCareFormsCell,
29 29
    WcsCardsCell, WcsCardInfosCell)
30
from combo.apps.wcs.context_processors import Cards
30 31

  
31 32
from combo.apps.search.models import SearchCell
32 33
from combo.apps.search.utils import index_site, search_site
......
1372 1373
        result = cell.render(context)
1373 1374
    assert '<p>Unknown Card</p>' in result
1374 1375

  
1376
    mock_send.reset_mock()
1375 1377
    result = cell.render(context)
1376 1378
    assert '<h2>Card Model 1 - aa</h2>' in result
1377 1379
    assert '<span class="label">Field A</span>\n    \n    <span class="value">a</span>' in result
......
1381 1383
    assert 'related_raw' not in result
1382 1384
    assert 'related_structured' not in result
1383 1385

  
1386
    # check url called
1387
    assert '/api/cards/card_model_1/11/' in mock_send.call_args_list[0][0][0].url
1388

  
1389
    # with identifier
1390
    cell.card_id = '42'
1391
    cell.save()
1392
    mock_send.reset_mock()
1393
    result = cell.render(context)
1394
    assert '/api/cards/card_model_1/42/' in mock_send.call_args_list[0][0][0].url
1395

  
1396
    context['cards'] = Cards()
1397
    cell.card_id = '{% cards|objects:"card_model_1"|last|get:"id" %}'  # syntax error
1398
    cell.save()
1399
    mock_send.reset_mock()
1400
    result = cell.render(context)
1401
    assert mock_send.call_args_list == []
1402

  
1403
    cell.card_id = '{{ cards|objects:"card_model_1"|last|get:"id" }}'
1404
    cell.save()
1405
    result = cell.render(context)
1406
    assert '/api/cards/card_model_1/list' in mock_send.call_args_list[0][0][0].url
1407
    assert '/api/cards/card_model_1/13/' in mock_send.call_args_list[1][0][0].url
1408

  
1384 1409

  
1385 1410
def test_tracking_code_cell(app, nocache):
1386 1411
    page = Page(title='One', slug='index', template_name='standard')
1387
-