wcs: method to get migrated custom_schema (#58800)

This commit is contained in:
Lauréline Guérin 2022-01-04 16:03:49 +01:00
parent d666dd6f64
commit 223a9390cb
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
3 changed files with 67 additions and 2 deletions

View File

@ -85,6 +85,7 @@ class WcsCardInfoCellForm(forms.ModelForm):
self.fields['carddef_reference'].widget = forms.Select(choices=card_models)
if self.instance.custom_schema:
self.initial['customize_display'] = True
self.initial['custom_schema'] = self.instance.get_custom_schema()
if not self.instance.cached_json:
del self.fields['customize_display']
del self.fields['custom_schema']

View File

@ -1076,6 +1076,24 @@ class WcsCardInfosCell(CardMixin, CellBase):
return WcsCardInfoCellForm
def get_custom_schema(self):
custom_schema = self.custom_schema or {}
# migrate old formats
for cell in custom_schema.get('cells') or []:
if cell.get('varname') == '@custom@':
if cell.get('display_mode') == 'value':
cell['display_mode'] = 'text'
elif not cell.get('field_content'):
if cell.get('display_mode') == 'title':
cell['field_content'] = 'value'
else:
cell['field_content'] = cell.get('display_mode') or 'value'
if cell.get('display_mode') in ['label', 'value', 'label-and-value']:
cell['display_mode'] = 'text'
return custom_schema
@register_cell_class
class TrackingCodeInputCell(CellBase):

View File

@ -1705,13 +1705,15 @@ def test_card_cell_setup(mock_send, app, admin_user):
assert 'customize_display' not in form.initial
assert form.initial['custom_schema'] == {}
cell.custom_schema = {'foo': 'bar'}
cell.custom_schema = {'cells': [{'varname': 'foo', 'display_mode': 'value'}]}
cell.save()
form = form_class(instance=cell)
assert 'customize_display' in form.fields
assert 'custom_schema' in form.fields
assert form.initial['customize_display'] is True
assert form.initial['custom_schema'] == {'foo': 'bar'}
assert form.initial['custom_schema'] == {
'cells': [{'varname': 'foo', 'field_content': 'value', 'display_mode': 'text'}]
}
app = login(app)
resp = app.get('/manage/pages/%s/' % page.pk)
@ -1722,6 +1724,50 @@ def test_card_cell_setup(mock_send, app, admin_user):
assert cell.custom_schema == {}
def test_card_cell_custom_schema_migration():
cell = WcsCardInfosCell()
cell.custom_schema = {
'cells': [{'varname': 'some-field', 'display_mode': 'label', 'cell_size': 'foobar'}]
}
assert cell.get_custom_schema() == {
'cells': [
{'varname': 'some-field', 'field_content': 'label', 'display_mode': 'text', 'cell_size': 'foobar'}
]
}
cell.custom_schema = {'cells': [{'varname': 'some-field', 'display_mode': 'value'}]}
assert cell.get_custom_schema() == {
'cells': [{'varname': 'some-field', 'field_content': 'value', 'display_mode': 'text'}]
}
cell.custom_schema = {'cells': [{'varname': 'some-field', 'display_mode': 'label-and-value'}]}
assert cell.get_custom_schema() == {
'cells': [{'varname': 'some-field', 'field_content': 'label-and-value', 'display_mode': 'text'}]
}
cell.custom_schema = {'cells': [{'varname': 'some-field', 'display_mode': 'title'}]}
assert cell.get_custom_schema() == {
'cells': [{'varname': 'some-field', 'field_content': 'value', 'display_mode': 'title'}]
}
cell.custom_schema = {
'cells': [
{'varname': '@custom@', 'template': 'foobar', 'display_mode': 'label', 'cell_size': 'foobar'}
]
}
assert cell.get_custom_schema() == {
'cells': [
{'varname': '@custom@', 'template': 'foobar', 'display_mode': 'label', 'cell_size': 'foobar'}
]
}
cell.custom_schema = {'cells': [{'varname': '@custom@', 'template': 'foobar', 'display_mode': 'value'}]}
assert cell.get_custom_schema() == {
'cells': [{'varname': '@custom@', 'template': 'foobar', 'display_mode': 'text'}]
}
cell.custom_schema = {'cells': [{'varname': '@custom@', 'template': 'foobar', 'display_mode': 'title'}]}
assert cell.get_custom_schema() == {
'cells': [{'varname': '@custom@', 'template': 'foobar', 'display_mode': 'title'}]
}
@mock.patch('combo.apps.wcs.utils.requests.send', side_effect=mocked_requests_send)
def test_card_cell_save_cache(mock_send):
page = Page.objects.create(title='xxx', slug='test_card_cell_save_cache', template_name='standard')