0001-wcs-add-card-identifier-on-Card-Info-cell-50001.patch
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 |
- |