118 |
118 |
{'title': 'Card Model 1', 'slug': 'card_model_1', 'custom_views': [{'id': 'foo', 'text': 'bar'}]},
|
119 |
119 |
{'title': 'Card Model 2', 'slug': 'card_model_2'},
|
120 |
120 |
{'title': 'Card Model 3', 'slug': 'card_model_3'},
|
|
121 |
{'title': 'Card A', 'slug': 'card_a'},
|
|
122 |
{'title': 'Card B', 'slug': 'card_b'},
|
|
123 |
{'title': 'Card C', 'slug': 'card_c'},
|
|
124 |
{'title': 'Card D', 'slug': 'card_d'},
|
|
125 |
{'title': 'Card E', 'slug': 'card_e'},
|
121 |
126 |
]
|
122 |
127 |
|
123 |
128 |
WCS_CARDS_DATA = {
|
... | ... | |
199 |
204 |
{'label': 'Empty', 'varname': None, 'type': 'string'},
|
200 |
205 |
],
|
201 |
206 |
},
|
|
207 |
'card_a': {
|
|
208 |
'name': 'Card A',
|
|
209 |
'fields': [
|
|
210 |
{'label': 'Card B', 'varname': 'cardb', 'type': 'item'},
|
|
211 |
{'label': 'Cards B', 'varname': 'cardsb', 'type': 'items'},
|
|
212 |
{'label': 'Block B', 'varname': 'blockb', 'type': 'block:b'},
|
|
213 |
{'label': 'Card C', 'varname': 'cardc', 'type': 'item'},
|
|
214 |
],
|
|
215 |
'relations': [
|
|
216 |
{'obj': 'carddef:card_b', 'varname': 'cardb', 'type': 'item', 'reverse': False},
|
|
217 |
{'obj': 'carddef:card_b', 'varname': 'cardsb', 'type': 'items', 'reverse': False},
|
|
218 |
{'obj': 'carddef:card_b', 'varname': 'blockb_cardb', 'type': 'item', 'reverse': False},
|
|
219 |
{'obj': 'carddef:card_c', 'varname': 'cardc', 'type': 'item', 'reverse': False},
|
|
220 |
{
|
|
221 |
'obj': 'carddef:card_z', # unknown card model
|
|
222 |
'varname': 'cardz',
|
|
223 |
'type': 'item',
|
|
224 |
'reverse': False,
|
|
225 |
},
|
|
226 |
],
|
|
227 |
},
|
|
228 |
'card_b': {
|
|
229 |
'name': 'Card B',
|
|
230 |
'fields': [],
|
|
231 |
'relations': [
|
|
232 |
{'obj': 'carddef:card_a', 'varname': 'cardb', 'type': 'item', 'reverse': True},
|
|
233 |
{'obj': 'carddef:card_a', 'varname': 'cardsb', 'type': 'items', 'reverse': True},
|
|
234 |
{'obj': 'carddef:card_a', 'varname': 'blockb_cardb', 'type': 'item', 'reverse': True},
|
|
235 |
{'obj': 'carddef:card_c', 'varname': 'cardb', 'type': 'item', 'reverse': True},
|
|
236 |
{'obj': 'carddef:card_c', 'varname': 'cardsb', 'type': 'items', 'reverse': True},
|
|
237 |
{'obj': 'carddef:card_c', 'varname': 'blockb_cardb', 'type': 'item', 'reverse': True},
|
|
238 |
],
|
|
239 |
},
|
|
240 |
'card_c': {
|
|
241 |
'name': 'Card C',
|
|
242 |
'fields': [
|
|
243 |
{'label': 'Card B', 'varname': 'cardb', 'type': 'item'},
|
|
244 |
{'label': 'Cards B', 'varname': 'cardsb', 'type': 'items'},
|
|
245 |
{'label': 'Block B', 'varname': 'blockb', 'type': 'block:b'},
|
|
246 |
],
|
|
247 |
'relations': [
|
|
248 |
{'obj': 'carddef:card_b', 'varname': 'cardb', 'type': 'item', 'reverse': False},
|
|
249 |
{'obj': 'carddef:card_b', 'varname': 'cardsb', 'type': 'items', 'reverse': False},
|
|
250 |
{'obj': 'carddef:card_b', 'varname': 'blockb_cardb', 'type': 'item', 'reverse': False},
|
|
251 |
{'obj': 'carddef:card_a', 'varname': 'cardc', 'type': 'item', 'reverse': True},
|
|
252 |
],
|
|
253 |
},
|
|
254 |
'card_d': {
|
|
255 |
'name': 'Card D',
|
|
256 |
'fields': [
|
|
257 |
{'label': 'Card D', 'varname': 'cardd-foo', 'type': 'item'},
|
|
258 |
{'label': 'Card E', 'varname': 'carde-foo', 'type': 'item'},
|
|
259 |
],
|
|
260 |
'relations': [
|
|
261 |
{'obj': 'carddef:card_d', 'varname': 'cardd-foo', 'type': 'item', 'reverse': False},
|
|
262 |
{'obj': 'carddef:card_d', 'varname': 'cardd-foo', 'type': 'item', 'reverse': True},
|
|
263 |
{'obj': 'carddef:card_e', 'varname': 'carde-foo', 'type': 'item', 'reverse': False},
|
|
264 |
],
|
|
265 |
},
|
|
266 |
'card_e': {
|
|
267 |
'name': 'Card E',
|
|
268 |
'fields': [
|
|
269 |
{'label': 'Card D', 'varname': 'cardd-bar', 'type': 'item'},
|
|
270 |
],
|
|
271 |
'relations': [
|
|
272 |
{'obj': 'carddef:card_d', 'varname': 'cardd-bar', 'type': 'item', 'reverse': False},
|
|
273 |
{'obj': 'carddef:card_d', 'varname': 'carde-foo', 'type': 'item', 'reverse': True},
|
|
274 |
],
|
|
275 |
},
|
202 |
276 |
}
|
203 |
277 |
|
204 |
278 |
|
... | ... | |
1392 |
1466 |
('default:card_model_1:foo', 'test : Card Model 1 - bar'),
|
1393 |
1467 |
('default:card_model_2', 'test : Card Model 2'),
|
1394 |
1468 |
('default:card_model_3', 'test : Card Model 3'),
|
|
1469 |
('default:card_a', 'test : Card A'),
|
|
1470 |
('default:card_b', 'test : Card B'),
|
|
1471 |
('default:card_c', 'test : Card C'),
|
|
1472 |
('default:card_d', 'test : Card D'),
|
|
1473 |
('default:card_e', 'test : Card E'),
|
1395 |
1474 |
('other:card_model_1', 'test2 : Card Model 1'),
|
1396 |
1475 |
('other:card_model_1:foo', 'test2 : Card Model 1 - bar'),
|
1397 |
1476 |
('other:card_model_2', 'test2 : Card Model 2'),
|
1398 |
1477 |
('other:card_model_3', 'test2 : Card Model 3'),
|
|
1478 |
('other:card_a', 'test2 : Card A'),
|
|
1479 |
('other:card_b', 'test2 : Card B'),
|
|
1480 |
('other:card_c', 'test2 : Card C'),
|
|
1481 |
('other:card_d', 'test2 : Card D'),
|
|
1482 |
('other:card_e', 'test2 : Card E'),
|
1399 |
1483 |
]
|
1400 |
1484 |
|
1401 |
1485 |
|
... | ... | |
1666 |
1750 |
('default:card_model_1', 'test : Card Model 1'),
|
1667 |
1751 |
('default:card_model_2', 'test : Card Model 2'),
|
1668 |
1752 |
('default:card_model_3', 'test : Card Model 3'),
|
|
1753 |
('default:card_a', 'test : Card A'),
|
|
1754 |
('default:card_b', 'test : Card B'),
|
|
1755 |
('default:card_c', 'test : Card C'),
|
|
1756 |
('default:card_d', 'test : Card D'),
|
|
1757 |
('default:card_e', 'test : Card E'),
|
1669 |
1758 |
('other:card_model_1', 'test2 : Card Model 1'),
|
1670 |
1759 |
('other:card_model_2', 'test2 : Card Model 2'),
|
1671 |
1760 |
('other:card_model_3', 'test2 : Card Model 3'),
|
|
1761 |
('other:card_a', 'test2 : Card A'),
|
|
1762 |
('other:card_b', 'test2 : Card B'),
|
|
1763 |
('other:card_c', 'test2 : Card C'),
|
|
1764 |
('other:card_d', 'test2 : Card D'),
|
|
1765 |
('other:card_e', 'test2 : Card E'),
|
1672 |
1766 |
]
|
1673 |
1767 |
assert 'customize_display' not in form.fields
|
1674 |
1768 |
assert 'custom_schema' not in form.fields
|
... | ... | |
1773 |
1867 |
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
|
1774 |
1868 |
def test_manager_card_cell(mock_send, app, admin_user):
|
1775 |
1869 |
page = Page.objects.create(title='xxx', slug='test_cards', template_name='standard')
|
1776 |
|
cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
|
|
1870 |
cell = WcsCardInfosCell.objects.create(page=page, placeholder='content', order=0)
|
1777 |
1871 |
|
1778 |
1872 |
app = login(app)
|
1779 |
1873 |
resp = app.get('/manage/pages/%s/' % page.pk)
|
... | ... | |
1793 |
1887 |
assert cell.without_user is True
|
1794 |
1888 |
assert resp.forms[0]['c%s-with_user' % cell.get_reference()].value is None
|
1795 |
1889 |
|
|
1890 |
# card with relations
|
|
1891 |
cell.carddef_reference = 'default:card_a'
|
|
1892 |
cell.save()
|
|
1893 |
resp = app.get('/manage/pages/%s/' % page.pk)
|
|
1894 |
# but only one cell on the page, no relations to follow
|
|
1895 |
assert resp.forms[0]['c%s-related_card_path' % cell.get_reference()].options == [
|
|
1896 |
('', True, 'Other Card Identifiers')
|
|
1897 |
]
|
|
1898 |
|
|
1899 |
# add a second cell, related to the first card model
|
|
1900 |
cell2 = WcsCardInfosCell.objects.create(
|
|
1901 |
page=page, placeholder='content', order=1, carddef_reference='default:card_b'
|
|
1902 |
)
|
|
1903 |
resp = app.get('/manage/pages/%s/' % page.pk)
|
|
1904 |
# still no relation to follow
|
|
1905 |
assert resp.forms[0]['c%s-related_card_path' % cell.get_reference()].options == [
|
|
1906 |
('', True, 'Other Card Identifiers')
|
|
1907 |
]
|
|
1908 |
# no cell with id and slug
|
|
1909 |
assert resp.forms[1]['c%s-related_card_path' % cell2.get_reference()].options == [
|
|
1910 |
('', True, 'Other Card Identifiers')
|
|
1911 |
]
|
|
1912 |
|
|
1913 |
# set a slug on first cell
|
|
1914 |
cell.slug = 'sluga'
|
|
1915 |
cell.save()
|
|
1916 |
resp = app.get('/manage/pages/%s/' % page.pk)
|
|
1917 |
# still no relation to follow
|
|
1918 |
assert resp.forms[0]['c%s-related_card_path' % cell.get_reference()].options == [
|
|
1919 |
('', True, 'Other Card Identifiers')
|
|
1920 |
]
|
|
1921 |
# multiple relations to follow
|
|
1922 |
assert resp.forms[1]['c%s-related_card_path' % cell2.get_reference()].options == [
|
|
1923 |
('', True, 'Other Card Identifiers'),
|
|
1924 |
('sluga/cardb', False, 'sluga/cardb'),
|
|
1925 |
('sluga/cardsb', False, 'sluga/cardsb'),
|
|
1926 |
('sluga/blockb_cardb', False, 'sluga/blockb_cardb'),
|
|
1927 |
('sluga/cardc/cardb', False, 'sluga/cardc/cardb'),
|
|
1928 |
('sluga/cardc/cardsb', False, 'sluga/cardc/cardsb'),
|
|
1929 |
('sluga/cardc/blockb_cardb', False, 'sluga/cardc/blockb_cardb'),
|
|
1930 |
]
|
|
1931 |
|
|
1932 |
# set a list of ids on first cell
|
|
1933 |
cell.card_ids = '{{ cards|objects:"card_model_1"|getlist:"id"|join:"," }}'
|
|
1934 |
cell.save()
|
|
1935 |
resp = app.get('/manage/pages/%s/' % page.pk)
|
|
1936 |
# still no relation to follow
|
|
1937 |
assert resp.forms[0]['c%s-related_card_path' % cell.get_reference()].options == [
|
|
1938 |
('', True, 'Other Card Identifiers')
|
|
1939 |
]
|
|
1940 |
# can not user cell with multiple ids as reference
|
|
1941 |
assert resp.forms[1]['c%s-related_card_path' % cell2.get_reference()].options == [
|
|
1942 |
('', True, 'Other Card Identifiers')
|
|
1943 |
]
|
|
1944 |
|
|
1945 |
# define a slug on second cell
|
|
1946 |
cell.card_ids = ''
|
|
1947 |
cell.save()
|
|
1948 |
cell2.slug = 'slugb'
|
|
1949 |
cell2.save()
|
|
1950 |
resp = app.get('/manage/pages/%s/' % page.pk)
|
|
1951 |
# multiple relations to follow
|
|
1952 |
assert resp.forms[0]['c%s-related_card_path' % cell.get_reference()].options == [
|
|
1953 |
('', True, 'Other Card Identifiers'),
|
|
1954 |
('slugb/reverse:cardb', False, 'slugb/cardb (reverse)'),
|
|
1955 |
('slugb/reverse:cardsb', False, 'slugb/cardsb (reverse)'),
|
|
1956 |
('slugb/reverse:blockb_cardb', False, 'slugb/blockb_cardb (reverse)'),
|
|
1957 |
]
|
|
1958 |
# still multiple relations to follow
|
|
1959 |
assert resp.forms[1]['c%s-related_card_path' % cell2.get_reference()].options == [
|
|
1960 |
('', True, 'Other Card Identifiers'),
|
|
1961 |
('sluga/cardb', False, 'sluga/cardb'),
|
|
1962 |
('sluga/cardsb', False, 'sluga/cardsb'),
|
|
1963 |
('sluga/blockb_cardb', False, 'sluga/blockb_cardb'),
|
|
1964 |
('sluga/cardc/cardb', False, 'sluga/cardc/cardb'),
|
|
1965 |
('sluga/cardc/cardsb', False, 'sluga/cardc/cardsb'),
|
|
1966 |
('sluga/cardc/blockb_cardb', False, 'sluga/cardc/blockb_cardb'),
|
|
1967 |
]
|
|
1968 |
|
|
1969 |
# set a related_path on cell2
|
|
1970 |
resp.forms[1]['c%s-related_card_path' % cell2.get_reference()] = 'sluga/cardb'
|
|
1971 |
resp.forms[1]['c%s-card_ids' % cell2.get_reference()] = 'foobar'
|
|
1972 |
resp = resp.forms[1].submit()
|
|
1973 |
cell2.refresh_from_db()
|
|
1974 |
assert cell2.related_card_path == 'sluga/cardb'
|
|
1975 |
assert cell2.card_ids == ''
|
|
1976 |
resp = app.get('/manage/pages/%s/' % page.pk)
|
|
1977 |
# no more relation to follow
|
|
1978 |
assert resp.forms[0]['c%s-related_card_path' % cell.get_reference()].options == [
|
|
1979 |
('', True, 'Other Card Identifiers')
|
|
1980 |
]
|
|
1981 |
# still multiple relations to follow
|
|
1982 |
assert resp.forms[1]['c%s-related_card_path' % cell2.get_reference()].options == [
|
|
1983 |
('', False, 'Other Card Identifiers'),
|
|
1984 |
('sluga/cardb', True, 'sluga/cardb'),
|
|
1985 |
('sluga/cardsb', False, 'sluga/cardsb'),
|
|
1986 |
('sluga/blockb_cardb', False, 'sluga/blockb_cardb'),
|
|
1987 |
('sluga/cardc/cardb', False, 'sluga/cardc/cardb'),
|
|
1988 |
('sluga/cardc/cardsb', False, 'sluga/cardc/cardsb'),
|
|
1989 |
('sluga/cardc/blockb_cardb', False, 'sluga/cardc/blockb_cardb'),
|
|
1990 |
]
|
|
1991 |
|
|
1992 |
# check circular relations
|
|
1993 |
cell.slug = 'sluge'
|
|
1994 |
cell.carddef_reference = 'default:card_e'
|
|
1995 |
cell.save()
|
|
1996 |
cell2.carddef_reference = 'default:card_d'
|
|
1997 |
cell2.slug = 'slugd'
|
|
1998 |
cell2.related_card_path = ''
|
|
1999 |
cell2.save()
|
|
2000 |
resp = app.get('/manage/pages/%s/' % page.pk)
|
|
2001 |
assert resp.forms[0]['c%s-related_card_path' % cell.get_reference()].options == [
|
|
2002 |
('', True, 'Other Card Identifiers'),
|
|
2003 |
('slugd/cardd-foo/carde-foo', False, 'slugd/cardd-foo/carde-foo'),
|
|
2004 |
('slugd/carde-foo', False, 'slugd/carde-foo'),
|
|
2005 |
]
|
|
2006 |
assert resp.forms[1]['c%s-related_card_path' % cell2.get_reference()].options == [
|
|
2007 |
('', True, 'Other Card Identifiers'),
|
|
2008 |
('sluge/cardd-bar', False, 'sluge/cardd-bar'),
|
|
2009 |
('sluge/reverse:carde-foo', False, 'sluge/carde-foo (reverse)'),
|
|
2010 |
]
|
|
2011 |
|
|
2012 |
cell.slug = 'slugd'
|
|
2013 |
cell.carddef_reference = 'default:card_d'
|
|
2014 |
cell.save()
|
|
2015 |
cell2.carddef_reference = 'default:card_d'
|
|
2016 |
cell2.slug = 'slugd-bis'
|
|
2017 |
cell2.related_card_path = ''
|
|
2018 |
cell2.save()
|
|
2019 |
resp = app.get('/manage/pages/%s/' % page.pk)
|
|
2020 |
assert resp.forms[0]['c%s-related_card_path' % cell.get_reference()].options == [
|
|
2021 |
('', True, 'Other Card Identifiers'),
|
|
2022 |
('slugd-bis/cardd-foo', False, 'slugd-bis/cardd-foo'),
|
|
2023 |
('slugd-bis/reverse:cardd-foo', False, 'slugd-bis/cardd-foo (reverse)'),
|
|
2024 |
('slugd-bis/carde-foo/cardd-bar', False, 'slugd-bis/carde-foo/cardd-bar'),
|
|
2025 |
('slugd-bis/carde-foo/reverse:carde-foo', False, 'slugd-bis/carde-foo/carde-foo (reverse)'),
|
|
2026 |
]
|
|
2027 |
assert resp.forms[1]['c%s-related_card_path' % cell2.get_reference()].options == [
|
|
2028 |
('', True, 'Other Card Identifiers'),
|
|
2029 |
('slugd/cardd-foo', False, 'slugd/cardd-foo'),
|
|
2030 |
('slugd/reverse:cardd-foo', False, 'slugd/cardd-foo (reverse)'),
|
|
2031 |
('slugd/carde-foo/cardd-bar', False, 'slugd/carde-foo/cardd-bar'),
|
|
2032 |
('slugd/carde-foo/reverse:carde-foo', False, 'slugd/carde-foo/carde-foo (reverse)'),
|
|
2033 |
]
|
|
2034 |
|
|
2035 |
cell.slug = 'sluge'
|
|
2036 |
cell.carddef_reference = 'default:card_e'
|
|
2037 |
cell.save()
|
|
2038 |
cell2.carddef_reference = 'default:card_e'
|
|
2039 |
cell2.slug = 'sluge-bis'
|
|
2040 |
cell2.related_card_path = ''
|
|
2041 |
cell2.save()
|
|
2042 |
resp = app.get('/manage/pages/%s/' % page.pk)
|
|
2043 |
assert resp.forms[0]['c%s-related_card_path' % cell.get_reference()].options == [
|
|
2044 |
('', True, 'Other Card Identifiers'),
|
|
2045 |
('sluge-bis/cardd-bar/carde-foo', False, 'sluge-bis/cardd-bar/carde-foo'),
|
|
2046 |
]
|
|
2047 |
assert resp.forms[1]['c%s-related_card_path' % cell2.get_reference()].options == [
|
|
2048 |
('', True, 'Other Card Identifiers'),
|
|
2049 |
('sluge/cardd-bar/carde-foo', False, 'sluge/cardd-bar/carde-foo'),
|
|
2050 |
]
|
|
2051 |
|
1796 |
2052 |
|
1797 |
2053 |
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
|
1798 |
2054 |
def test_card_cell_load(mock_send):
|
... | ... | |
2009 |
2265 |
page = Page.objects.create(
|
2010 |
2266 |
title='xxx', slug='foo', template_name='standard', sub_slug='(?P<card_model_1_id>[a-z0-9]+)'
|
2011 |
2267 |
)
|
2012 |
|
cell = WcsCardInfosCell(page=page, placeholder='content', order=0)
|
2013 |
|
cell.carddef_reference = 'default:card_model_1'
|
2014 |
|
cell.save()
|
|
2268 |
cell = WcsCardInfosCell.objects.create(
|
|
2269 |
page=page, placeholder='content', order=0, carddef_reference='default:card_model_1'
|
|
2270 |
)
|
2015 |
2271 |
|
2016 |
2272 |
cell_url = reverse(
|
2017 |
2273 |
'combo-public-ajax-page-cell',
|
2018 |
|
-
|