workflows: handle empty <condition> tags in exports (#23855)

This commit is contained in:
Frédéric Péters 2018-05-16 09:38:24 +02:00
parent ce94b90179
commit 7b0b2a35e6
3 changed files with 21 additions and 16 deletions

View File

@ -599,3 +599,20 @@ def test_set_backoffice_fields_action(pub):
wf2 = assert_import_export_works(wf)
item2 = wf2.possible_status[0].items[0]
assert item2.fields == [{'field_id': 'bo1', 'value': '=form_var_foo'}]
def test_action_condition(pub):
wf = Workflow(name='status')
st1 = wf.add_status('Status1', 'st1')
sendmail = SendmailWorkflowStatusItem()
st1.items.append(sendmail)
sendmail.parent = st1
wf2 = assert_import_export_works(wf)
sendmail.condition = {} # should not be created any longer
wf2 = Workflow.import_from_xml_tree(wf.export_to_xml(False), False)
assert wf2.possible_status[0].items[0].condition is None
sendmail.condition = {'type': 'python', 'value': 'True'}
wf2 = assert_import_export_works(wf)

View File

@ -118,19 +118,6 @@ class JumpWorkflowStatusItem(WorkflowStatusJumpItem):
else:
self.timeout = int(timeout)
def condition_init_with_xml(self, node, charset, include_id=False):
self.condition = None
if node is None:
return
if node.findall('type'):
self.condition = {
'type': node.find('type').text.encode(charset),
'value': node.find('value').text.encode(charset),
}
elif node.text:
# backward compatibility
self.condition = {'type': 'python', 'value': node.text.encode(charset)}
def migrate(self):
changed = super(JumpWorkflowStatusItem, self).migrate()
if isinstance(self.condition, basestring):

View File

@ -1747,14 +1747,15 @@ class WorkflowStatusItem(XmlSerialisable):
self._roles_init_with_xml('to', elem, charset, include_id)
def condition_init_with_xml(self, node, charset, include_id=False):
self.condition = None
if node is None:
self.condition = None
elif node.findall('type'):
return
if node.findall('type'):
self.condition = {
'type': node.find('type').text.encode(charset),
'value': node.find('value').text.encode(charset),
}
else:
elif node.text:
# backward compatibility
self.condition = {'type': 'python', 'value': node.text.encode(charset)}