workflow: use uuid for variable field ids (#73656) #95

Merged
lguerin merged 1 commits from wip/73656-use-uuid-in-workflow-variables into main 2023-02-10 15:02:28 +01:00
2 changed files with 23 additions and 14 deletions

View File

@ -1,6 +1,7 @@
import io
import os
import re
import uuid
import xml.etree.ElementTree as ET
import pytest
@ -1793,36 +1794,39 @@ def test_workflows_variables(pub):
# check it's been saved correctly
assert 'foobar' in resp.text
assert len(Workflow.get(1).variables_formdef.fields) == 1
assert Workflow.get(1).variables_formdef.fields[0].key == 'string'
assert Workflow.get(1).variables_formdef.fields[0].label == 'foobar'
workflow = Workflow.get(1)
assert len(workflow.variables_formdef.fields) == 1
assert workflow.variables_formdef.fields[0].key == 'string'
assert workflow.variables_formdef.fields[0].label == 'foobar'
uuid.UUID(workflow.variables_formdef.fields[0].id) # no ValueError
def test_workflows_variables_edit(pub):
test_workflows_variables(pub)
workflow = Workflow.get(1)
app = login(get_app(pub))
resp = app.get('/backoffice/workflows/1/')
resp = resp.click(href='variables/', index=0)
assert resp.location == 'http://example.net/backoffice/workflows/1/variables/fields/'
resp = resp.follow()
resp = resp.click('Edit', href='1/')
resp = resp.click('Edit', href='%s/' % workflow.variables_formdef.fields[0].id)
assert resp.forms[0]['varname$name'].value == 'foobar'
assert 'varname$select' not in resp.forms[0].fields
workflow = Workflow.get(1)
baz_status = workflow.add_status(name='baz')
baz_status.add_action('displaymsg')
workflow.store()
resp = app.get('/backoffice/workflows/1/variables/fields/')
resp = resp.click('Edit', href='1/')
resp = resp.click('Edit', href='%s/' % workflow.variables_formdef.fields[0].id)
assert 'varname$select' in resp.forms[0].fields
resp.forms[0]['varname$select'].value = '1*1*message'
resp = resp.forms[0].submit('submit')
assert Workflow.get(1).variables_formdef.fields[0].key == 'string'
assert Workflow.get(1).variables_formdef.fields[0].varname == '1*1*message'
workflow = Workflow.get(1)
assert workflow.variables_formdef.fields[0].key == 'string'
assert workflow.variables_formdef.fields[0].varname == '1*1*message'
def test_workflows_variables_edit_with_all_action_types(pub):
@ -1848,14 +1852,16 @@ def test_workflows_variables_edit_with_all_action_types(pub):
assert resp.location == 'http://example.net/backoffice/workflows/1/variables/fields/'
resp = resp.follow()
workflow = Workflow.get(1)
resp = app.get('/backoffice/workflows/1/variables/fields/')
resp = resp.click('Edit', href='1/')
resp = resp.click('Edit', href='%s/' % workflow.variables_formdef.fields[0].id)
assert 'varname$select' in resp.forms[0].fields
resp.forms[0]['varname$name'].value = 'xxx'
resp = resp.forms[0].submit('submit')
assert Workflow.get(1).variables_formdef.fields[0].key == 'string'
assert Workflow.get(1).variables_formdef.fields[0].varname == 'xxx'
workflow = Workflow.get(1)
assert workflow.variables_formdef.fields[0].key == 'string'
assert workflow.variables_formdef.fields[0].varname == 'xxx'
def test_workflows_variables_delete(pub):
@ -1932,7 +1938,7 @@ def test_workflows_variables_with_export_to_model_action(pub):
app = login(get_app(pub))
resp = app.get('/backoffice/workflows/1/variables/fields/')
resp = resp.click('Edit', href='1/')
resp = resp.click('Edit', href='%s/' % workflow.variables_formdef.fields[0].id)
def test_workflows_export_to_model_in_status(pub):
@ -1990,9 +1996,10 @@ def test_workflows_variables_replacement(pub):
resp.forms[0]['label'] = 'foobar'
resp.forms[0]['type'] = 'string'
resp = resp.forms[0].submit().follow()
workflow = Workflow.get(1)
# edit
resp = resp.click('Edit', href='1/')
resp = resp.click('Edit', href='%s/' % workflow.variables_formdef.fields[0].id)
resp.form['varname$select'].value = '1*1*message'
resp = resp.form.submit('submit').follow()

View File

@ -576,7 +576,6 @@ class WorkflowVariablesFieldsFormDef(FormDef):
self.readonly = True
if workflow.variables_formdef and workflow.variables_formdef.fields:
self.fields = self.workflow.variables_formdef.fields
self.max_field_id = max(lax_int(x.id) for x in self.fields or [])
else:
self.fields = []
@ -588,6 +587,9 @@ class WorkflowVariablesFieldsFormDef(FormDef):
base_url = get_publisher().get_backoffice_url()
return '%s/workflows/%s/variables/fields/' % (base_url, self.workflow.id)
def get_new_field_id(self):
return str(uuid.uuid4())
def store(self, comment=None, *args, **kwargs):
for field in self.fields:
if hasattr(field, 'widget_class'):