wcs: add card identifier on Card Info cell (#50001)
This commit is contained in:
parent
71aa546fec
commit
36461f2d48
|
@ -51,7 +51,7 @@ class WcsCardsCellForm(forms.ModelForm):
|
||||||
class WcsCardInfoCellForm(forms.ModelForm):
|
class WcsCardInfoCellForm(forms.ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = WcsCardInfosCell
|
model = WcsCardInfosCell
|
||||||
fields = ('carddef_reference',)
|
fields = ('carddef_reference', 'card_id')
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('wcs', '0022_cards_user'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='wcscardinfoscell',
|
||||||
|
name='card_id',
|
||||||
|
field=models.CharField(blank=True, max_length=150, verbose_name='Card Identifier'),
|
||||||
|
),
|
||||||
|
]
|
|
@ -31,6 +31,7 @@ from requests.exceptions import RequestException
|
||||||
|
|
||||||
from combo.data.models import CellBase, Page
|
from combo.data.models import CellBase, Page
|
||||||
from combo.data.library import register_cell_class
|
from combo.data.library import register_cell_class
|
||||||
|
from combo import utils
|
||||||
from combo.utils import requests
|
from combo.utils import requests
|
||||||
|
|
||||||
from .utils import get_wcs_json, is_wcs_enabled, get_wcs_services
|
from .utils import get_wcs_json, is_wcs_enabled, get_wcs_services
|
||||||
|
@ -837,6 +838,7 @@ class WcsCardsCell(CardMixin, WcsBlurpMixin, CellBase):
|
||||||
@register_cell_class
|
@register_cell_class
|
||||||
class WcsCardInfosCell(CardMixin, CellBase):
|
class WcsCardInfosCell(CardMixin, CellBase):
|
||||||
carddef_reference = models.CharField(_('Card Model'), max_length=150)
|
carddef_reference = models.CharField(_('Card Model'), max_length=150)
|
||||||
|
card_id = models.CharField(_('Card Identifier'), max_length=150, blank=True)
|
||||||
|
|
||||||
cached_title = models.CharField(_('Title'), max_length=150)
|
cached_title = models.CharField(_('Title'), max_length=150)
|
||||||
cached_json = JSONField(blank=True)
|
cached_json = JSONField(blank=True)
|
||||||
|
@ -882,16 +884,30 @@ class WcsCardInfosCell(CardMixin, CellBase):
|
||||||
|
|
||||||
populate_cache()
|
populate_cache()
|
||||||
|
|
||||||
|
def get_card_id(self, context):
|
||||||
|
if self.card_id:
|
||||||
|
try:
|
||||||
|
card_id = utils.get_templated_url('{%% load wcs %%}%s' % self.card_id, context)
|
||||||
|
except utils.TemplateError:
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
if card_id:
|
||||||
|
return card_id
|
||||||
|
|
||||||
|
card_slug = self.carddef_reference.split(':')[1]
|
||||||
|
card_id = '%s_id' % card_slug
|
||||||
|
return context.get(card_id) or None
|
||||||
|
|
||||||
def get_cell_extra_context(self, context):
|
def get_cell_extra_context(self, context):
|
||||||
extra_context = super().get_cell_extra_context(context)
|
extra_context = super().get_cell_extra_context(context)
|
||||||
extra_context['title'] = self.cached_title
|
extra_context['title'] = self.cached_title
|
||||||
extra_context['schema'] = self.cached_json
|
extra_context['schema'] = self.cached_json
|
||||||
|
|
||||||
card_slug = self.carddef_reference.split(':')[1]
|
card_id = self.get_card_id(context)
|
||||||
card_id = '%s_id' % card_slug
|
if not card_id:
|
||||||
if not context.get(card_id):
|
|
||||||
return extra_context
|
return extra_context
|
||||||
api_url = 'api/cards/%s/%s/' % (card_slug, context.get(card_id))
|
card_slug = self.carddef_reference.split(':')[1]
|
||||||
|
api_url = 'api/cards/%s/%s/' % (card_slug, card_id)
|
||||||
|
|
||||||
wcs_site = get_wcs_services().get(self.wcs_site)
|
wcs_site = get_wcs_services().get(self.wcs_site)
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ from combo.apps.wcs.models import (
|
||||||
WcsFormsOfCategoryCell, WcsCurrentDraftsCell, WcsCategoryCell,
|
WcsFormsOfCategoryCell, WcsCurrentDraftsCell, WcsCategoryCell,
|
||||||
TrackingCodeInputCell, BackofficeSubmissionCell, WcsCareFormsCell,
|
TrackingCodeInputCell, BackofficeSubmissionCell, WcsCareFormsCell,
|
||||||
WcsCardsCell, WcsCardInfosCell)
|
WcsCardsCell, WcsCardInfosCell)
|
||||||
|
from combo.apps.wcs.context_processors import Cards
|
||||||
|
|
||||||
from combo.apps.search.models import SearchCell
|
from combo.apps.search.models import SearchCell
|
||||||
from combo.apps.search.utils import index_site, search_site
|
from combo.apps.search.utils import index_site, search_site
|
||||||
|
@ -1374,6 +1375,7 @@ def test_card_cell_render(mock_send, context):
|
||||||
result = cell.render(context)
|
result = cell.render(context)
|
||||||
assert '<p>Unknown Card</p>' in result
|
assert '<p>Unknown Card</p>' in result
|
||||||
|
|
||||||
|
mock_send.reset_mock()
|
||||||
result = cell.render(context)
|
result = cell.render(context)
|
||||||
assert '<h2>Card Model 1 - aa</h2>' in result
|
assert '<h2>Card Model 1 - aa</h2>' in result
|
||||||
assert '<span class="label">Field A</span>\n \n <span class="value">a</span>' in result
|
assert '<span class="label">Field A</span>\n \n <span class="value">a</span>' in result
|
||||||
|
@ -1383,6 +1385,29 @@ def test_card_cell_render(mock_send, context):
|
||||||
assert 'related_raw' not in result
|
assert 'related_raw' not in result
|
||||||
assert 'related_structured' not in result
|
assert 'related_structured' not in result
|
||||||
|
|
||||||
|
# check url called
|
||||||
|
assert '/api/cards/card_model_1/11/' in mock_send.call_args_list[0][0][0].url
|
||||||
|
|
||||||
|
# with identifier
|
||||||
|
cell.card_id = '42'
|
||||||
|
cell.save()
|
||||||
|
mock_send.reset_mock()
|
||||||
|
result = cell.render(context)
|
||||||
|
assert '/api/cards/card_model_1/42/' in mock_send.call_args_list[0][0][0].url
|
||||||
|
|
||||||
|
context['cards'] = Cards()
|
||||||
|
cell.card_id = '{% cards|objects:"card_model_1"|last|get:"id" %}' # syntax error
|
||||||
|
cell.save()
|
||||||
|
mock_send.reset_mock()
|
||||||
|
result = cell.render(context)
|
||||||
|
assert mock_send.call_args_list == []
|
||||||
|
|
||||||
|
cell.card_id = '{{ cards|objects:"card_model_1"|last|get:"id" }}'
|
||||||
|
cell.save()
|
||||||
|
result = cell.render(context)
|
||||||
|
assert '/api/cards/card_model_1/list' in mock_send.call_args_list[0][0][0].url
|
||||||
|
assert '/api/cards/card_model_1/13/' in mock_send.call_args_list[1][0][0].url
|
||||||
|
|
||||||
|
|
||||||
def test_tracking_code_cell(app, nocache):
|
def test_tracking_code_cell(app, nocache):
|
||||||
page = Page(title='One', slug='index', template_name='standard')
|
page = Page(title='One', slug='index', template_name='standard')
|
||||||
|
|
Loading…
Reference in New Issue