workflows: set _display/_structured in case of empty value (#46800)

This commit is contained in:
Frédéric Péters 2020-09-18 19:01:58 +02:00
parent c280f6c335
commit 45580283b7
2 changed files with 38 additions and 21 deletions

View File

@ -5192,10 +5192,13 @@ def test_edit_carddata_with_data_sourced_object(pub):
CardDef.wipe()
LoggedError.wipe()
datasource = {'type': 'formula',
'value': repr([{'id': 'b', 'text': 'baker'},
{'id': 'c', 'text': 'cook'},
{'id': 'l', 'text': 'lawyer'}])}
datasource = {
'type': 'formula',
'value': repr(
[{'id': 'b', 'text': 'baker', 'extra': 'plop'},
{'id': 'c', 'text': 'cook', 'extra': 'plop2'},
{'id': 'l', 'text': 'lawyer', 'extra': 'plop3'}])
}
carddef = CardDef()
carddef.name = 'Person'
carddef.fields = [
@ -5211,8 +5214,10 @@ def test_edit_carddata_with_data_sourced_object(pub):
carddata.data = {
'0': 'Foo',
'1': 'Bar',
'2': 'l',
'2_display': 'lawyer'}
'2': 'l'
}
carddata.data['2_display'] = carddef.fields[2].store_display_value(carddata.data, '2')
carddata.data['2_structured'] = carddef.fields[2].store_structured_value(carddata.data, '2')
carddata.store()
wf = Workflow(name='Card update')
@ -5253,6 +5258,7 @@ def test_edit_carddata_with_data_sourced_object(pub):
data = carddef.data_class().select()[0]
assert data.data['2'] == 'c'
assert data.data['2_display'] == 'cook'
assert data.data['2_structured'] == {'id': 'c', 'text': 'cook', 'extra': 'plop2'}
formdata = formdef.data_class()()
formdata.data = {
@ -5266,25 +5272,32 @@ def test_edit_carddata_with_data_sourced_object(pub):
data = carddef.data_class().select()[0]
assert data.data['2'] == 'b'
assert data.data['2_display'] == 'baker'
assert data.data['2_structured'] == {'id': 'b', 'text': 'baker', 'extra': 'plop'}
# reset data
edit.mappings = [
Mapping(field_id='2', expression='=None'),
]
wf.store()
for expression in ('=None', '', '""'):
edit.mappings = [
Mapping(field_id='2', expression='=None'),
]
wf.store()
formdata = formdef.data_class()()
formdata.data = {
'0': '1',
'1': 'b'
}
formdata.store()
formdata.just_created()
formdata.perform_workflow()
formdata = formdef.data_class()()
formdata.data = {
'0': '1',
'1': 'b'
}
formdata.store()
formdata.just_created()
formdata.perform_workflow()
data = carddef.data_class().select()[0]
assert data.data['2'] is None
assert data.data['2_display'] is None
carddata = carddef.data_class().select()[0]
assert carddata.data['2'] is None
assert carddata.data.get('2_display') is None
assert carddata.data.get('2_structured') is None
# restore initial data
carddata.data = data.data
carddata.store()
def test_edit_carddata_with_linked_object(pub):

View File

@ -445,6 +445,8 @@ class CreateFormdataWorkflowStatusItem(WorkflowStatusItem):
formdata.data, field.id)
if display_value:
formdata.data['%s_display' % field.id] = display_value
elif '%s_display' % field.id in formdata.data:
del formdata.data['%s_display' % field.id]
if field.store_structured_value:
structured_value = field.store_structured_value(
formdata.data, field.id)
@ -453,6 +455,8 @@ class CreateFormdataWorkflowStatusItem(WorkflowStatusItem):
# in case of list field, override id
formdata.data['%s' % field.id] = str(structured_value.get('id'))
formdata.data['%s_structured' % field.id] = structured_value
elif '%s_structured' % field.id in formdata.data:
del formdata.data['%s_structured' % field.id]
def mappings_export_to_xml(self, parent, charset, include_id=False):
container = ET.SubElement(parent, 'mappings')