wcs: use internal_id for links to cards (#87119)
gitea/combo/pipeline/head This commit looks good
Details
gitea/combo/pipeline/head This commit looks good
Details
This commit is contained in:
parent
03361bfbb9
commit
3e09731bd8
|
@ -20,7 +20,7 @@
|
|||
{% if custom_schema %}
|
||||
{% include "combo/wcs/cards-field.html" with item=custom_schema.cells.0 ul_display=True %}
|
||||
{% else %}
|
||||
<a href="{% if card_page_base_url %}{{ card_page_base_url }}{{ card.id }}/{% else %}{{ card.url }}{% endif %}"><span class="card-title">{{ card.text }}</span></a>
|
||||
<a href="{% if card_page_base_url %}{{ card_page_base_url }}{{ card.internal_id }}/{% else %}{{ card.url }}{% endif %}"><span class="card-title">{{ card.text }}</span></a>
|
||||
{% endif %}
|
||||
{% endspaceless %}
|
||||
</li>
|
||||
|
|
|
@ -1376,6 +1376,55 @@ def test_card_cell_table_list_mode_render_all_cards(mock_send, nocache, app, dis
|
|||
assert 'filter-internal-id' not in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
def test_card_cell_list_mode_render_all_cards_custom_id(mock_send, nocache, app):
|
||||
page = Page.objects.create(title='xxx', slug='foo', template_name='standard')
|
||||
cell = WcsCardCell.objects.create(
|
||||
page=page,
|
||||
placeholder='content',
|
||||
order=0,
|
||||
display_mode='list',
|
||||
carddef_reference='default:card_with_custom_id',
|
||||
related_card_path='__all__',
|
||||
)
|
||||
|
||||
cell_url = reverse(
|
||||
'combo-public-ajax-page-cell',
|
||||
kwargs={'page_pk': page.pk, 'cell_reference': cell.get_reference()},
|
||||
)
|
||||
|
||||
# check url called
|
||||
mock_send.reset_mock()
|
||||
resp = app.get(page.get_online_url())
|
||||
assert len(resp.context['cells']) == 1
|
||||
extra_ctx = re.findall(r'data-extra-context="(.*)"', resp.text)
|
||||
app.get(cell_url + '?ctx=' + extra_ctx[0])
|
||||
assert len(mock_send.call_args_list) == 1
|
||||
# cell rendering
|
||||
assert '/api/cards/card_with_custom_id/list' in mock_send.call_args_list[0][0][0].url
|
||||
assert 'filter-internal-id' not in mock_send.call_args_list[0][0][0].url
|
||||
|
||||
cell_div = resp.pyquery('.wcs-card-cell')[0]
|
||||
cell_url = cell_div.attrib['data-ajax-cell-url']
|
||||
extra_ctx = cell_div.attrib['data-extra-context']
|
||||
resp = app.get(cell_url + '?ctx=' + extra_ctx)
|
||||
assert [(PyQuery(x).text(), x.attrib['href']) for x in resp.pyquery('li a')] == [
|
||||
('foo', 'http://127.0.0.1:8999/backoffice/data/card_with_custom_id/42/'),
|
||||
('bar', 'http://127.0.0.1:8999/backoffice/data/card_with_custom_id/44/'),
|
||||
]
|
||||
|
||||
# add a combo page for card
|
||||
card_page = Page.objects.create(title='card', slug='card', template_name='standard')
|
||||
card_page.sub_slug = '(?P<card_with_custom_id_id>[a-z0-9]+)'
|
||||
card_page.save()
|
||||
|
||||
resp = app.get(cell_url + '?ctx=' + extra_ctx)
|
||||
assert [(PyQuery(x).text(), x.attrib['href']) for x in resp.pyquery('li a')] == [
|
||||
('foo', '/card/42/'),
|
||||
('bar', '/card/44/'),
|
||||
]
|
||||
|
||||
|
||||
@mock.patch('requests.Session.send', side_effect=mocked_requests_send)
|
||||
@pytest.mark.parametrize('display_mode', ['table', 'list'])
|
||||
def test_card_cell_table_list_mode_render_identifier(mock_send, nocache, app, display_mode):
|
||||
|
|
|
@ -104,7 +104,8 @@ WCS_CARDDEFS_DATA = [
|
|||
WCS_CARDS_DATA = {
|
||||
'card_model_1': [
|
||||
{
|
||||
'id': 11,
|
||||
'id': '11',
|
||||
'internal_id': '11',
|
||||
'display_id': '10-11',
|
||||
'display_name': 'Card Model 1 - n°10-11',
|
||||
'digest': 'a a a',
|
||||
|
@ -156,7 +157,8 @@ WCS_CARDS_DATA = {
|
|||
},
|
||||
},
|
||||
{
|
||||
'id': 12,
|
||||
'id': '12',
|
||||
'internal_id': '12',
|
||||
'display_id': '10-12',
|
||||
'display_name': 'Card Model 1 - n°10-12',
|
||||
'digest': 'b b b',
|
||||
|
@ -178,7 +180,8 @@ WCS_CARDS_DATA = {
|
|||
},
|
||||
},
|
||||
{
|
||||
'id': 13,
|
||||
'id': '13',
|
||||
'internal_id': '13',
|
||||
'display_id': '10-13',
|
||||
'display_name': 'Card Model 1 - n°10-13',
|
||||
'digest': 'c c c',
|
||||
|
@ -195,7 +198,8 @@ WCS_CARDS_DATA = {
|
|||
],
|
||||
'card_a': [
|
||||
{
|
||||
'id': 1,
|
||||
'id': '1',
|
||||
'internal_id': '1',
|
||||
'fields': {
|
||||
'cardb_raw': 1,
|
||||
'cardsb_raw': [2, 3],
|
||||
|
@ -210,7 +214,8 @@ WCS_CARDS_DATA = {
|
|||
},
|
||||
},
|
||||
{
|
||||
'id': 2,
|
||||
'id': '2',
|
||||
'internal_id': '2',
|
||||
'fields': {
|
||||
'cardb_raw': 1,
|
||||
'cardsb_raw': [2, 3],
|
||||
|
@ -219,14 +224,16 @@ WCS_CARDS_DATA = {
|
|||
},
|
||||
},
|
||||
{
|
||||
'id': 3,
|
||||
'id': '3',
|
||||
'internal_id': '3',
|
||||
'fields': {
|
||||
# some missing fields
|
||||
'blockb_raw': [{}],
|
||||
},
|
||||
},
|
||||
{
|
||||
'id': 4,
|
||||
'id': '4',
|
||||
'internal_id': '4',
|
||||
'fields': {
|
||||
# some empty fields
|
||||
'cardb_raw': None,
|
||||
|
@ -236,10 +243,11 @@ WCS_CARDS_DATA = {
|
|||
},
|
||||
},
|
||||
],
|
||||
'card_b': [{'id': i, 'fields': {}} for i in range(1, 12) if i != 6],
|
||||
'card_b': [{'id': str(i), 'internal_id': str(i), 'fields': {}} for i in range(1, 12) if i != 6],
|
||||
'card_c': [
|
||||
{
|
||||
'id': 6,
|
||||
'id': '6',
|
||||
'internal_id': '6',
|
||||
'fields': {
|
||||
'cardb_raw': 7,
|
||||
'cardsb_raw': [8, 9],
|
||||
|
@ -247,25 +255,43 @@ WCS_CARDS_DATA = {
|
|||
},
|
||||
},
|
||||
{
|
||||
'id': 7,
|
||||
'id': '7',
|
||||
'internal_id': '7',
|
||||
'fields': {},
|
||||
},
|
||||
],
|
||||
'card_f': [
|
||||
{'id': 41, 'fields': {'cardh_raw': 42}},
|
||||
{'id': '41', 'internal_id': '41', 'fields': {'cardh_raw': 42}},
|
||||
],
|
||||
'card_g': [
|
||||
{'id': 43, 'fields': {'cardh_raw': 44}},
|
||||
{'id': '43', 'internal_id': '43', 'fields': {'cardh_raw': 44}},
|
||||
],
|
||||
'card_h': [
|
||||
{'id': 42, 'fields': {}},
|
||||
{'id': 44, 'fields': {}},
|
||||
{'id': '42', 'internal_id': '42', 'fields': {}},
|
||||
{'id': '44', 'internal_id': '44', 'fields': {}},
|
||||
],
|
||||
'card_with_custom_id': [
|
||||
{
|
||||
'id': 'foo',
|
||||
'internal_id': '42',
|
||||
'text': 'foo',
|
||||
'url': '/backoffice/data/card_with_custom_id/42/',
|
||||
'fields': {},
|
||||
},
|
||||
{
|
||||
'id': 'bar',
|
||||
'internal_id': '44',
|
||||
'text': 'bar',
|
||||
'url': '/backoffice/data/card_with_custom_id/44/',
|
||||
'fields': {},
|
||||
},
|
||||
],
|
||||
}
|
||||
|
||||
WCS_CARDS_CUSTOM_VIEW_DATA = [
|
||||
{
|
||||
'id': 11,
|
||||
'id': '11',
|
||||
'internal_id': '11',
|
||||
'display_id': '10-11',
|
||||
'display_name': 'Card Model 1 - n°10-11',
|
||||
'digest': 'a a a',
|
||||
|
@ -274,7 +300,8 @@ WCS_CARDS_CUSTOM_VIEW_DATA = [
|
|||
'url': '/backoffice/data/card_model_1/11/',
|
||||
},
|
||||
{
|
||||
'id': 12,
|
||||
'id': '12',
|
||||
'internal_id': '12',
|
||||
'display_id': '10-12',
|
||||
'display_name': 'Card Model 1 - n°10-12',
|
||||
'digest': 'b b b',
|
||||
|
@ -614,13 +641,13 @@ def get_data_from_url(url):
|
|||
m_card = re.match(r'/api/cards/([a-z0-9_]+)/(\d+)/', url)
|
||||
if m_card:
|
||||
try:
|
||||
return [d for d in WCS_CARDS_DATA[m_card.group(1)] if d['id'] == int(m_card.group(2))][0]
|
||||
return [d for d in WCS_CARDS_DATA[m_card.group(1)] if d['id'] == m_card.group(2)][0]
|
||||
except IndexError:
|
||||
return {}
|
||||
m_card = re.match(r'/api/cards/([a-z0-9_]+)/([a-z0-9_]+)/(\d+)/', url) # model/custom-view/id
|
||||
if m_card:
|
||||
try:
|
||||
return [d for d in WCS_CARDS_DATA[m_card.group(1)] if d['id'] == int(m_card.group(3))][0]
|
||||
return [d for d in WCS_CARDS_DATA[m_card.group(1)] if d['id'] == m_card.group(3)][0]
|
||||
except IndexError:
|
||||
return {}
|
||||
if 'api/cards/card_model_1/list/foo' in url:
|
||||
|
|
Loading…
Reference in New Issue