backoffice: add support for default value for date workflow options (#88346)

This commit is contained in:
Frédéric Péters 2024-03-20 18:45:39 +01:00
parent 9afbbccb13
commit 70b7087ad9
2 changed files with 78 additions and 4 deletions

View File

@ -22,6 +22,7 @@ from wcs.workflows import (
Workflow,
WorkflowBackofficeFieldsFormDef,
WorkflowCriticalityLevel,
WorkflowVariablesFieldsFormDef,
)
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login
@ -1205,3 +1206,72 @@ def test_inspect_page_idp_role(pub):
resp.pyquery('[data-function-key="_receiver"] a').attr.href
== 'https://idp.example.net/manage/roles/uuid:d4b59e1ffb204dfd99fd3760f4952999/'
)
def test_inspect_page_form_option(pub):
create_user(pub, is_admin=True)
FormDef.wipe()
wf = Workflow(name='variables')
wf.variables_formdef = WorkflowVariablesFieldsFormDef(workflow=wf)
wf.add_status('st1')
wf.store()
formdef = FormDef()
formdef.name = 'form title'
formdef.fields = []
formdef.workflow = wf
formdef.store()
formdef.data_class().wipe()
formdata = formdef.data_class()()
formdata.just_created()
formdata.store()
app = login(get_app(pub))
resp = app.get('%sinspect' % formdata.get_url(backoffice=True), status=200)
assert 'form_option' not in resp.text
wf.variables_formdef.fields = [
fields.StringField(label='String test', varname='string_test'),
fields.DateField(label='Date test', varname='date_test'),
]
wf.store()
resp = app.get('%sinspect' % formdata.get_url(backoffice=True), status=200)
assert (
resp.pyquery('[title="form_option_string_test"]').parents('li').children('div.value span').text()
== 'None (no value)'
)
wf.variables_formdef.fields[0].default_value = 'xxx'
wf.variables_formdef.fields[1].default_value = '2024-03-20'
wf.store()
resp = app.get('%sinspect' % formdata.get_url(backoffice=True), status=200)
assert (
resp.pyquery('[title="form_option_string_test"]').parents('li').children('div.value span').text()
== 'xxx'
)
assert (
resp.pyquery('[title="form_option_date_test"]').parents('li').children('div.value span').text()
== '2024-03-20'
)
assert (
resp.pyquery('[title="form_option_date_test_year"]').parents('li').children('div.value span').text()
== '2024 (integer number)'
)
formdef.workflow_options = {'string_test': 'yyy', 'date_test': datetime.date(2024, 3, 21).timetuple()}
formdef.store()
resp = app.get('%sinspect' % formdata.get_url(backoffice=True), status=200)
assert (
resp.pyquery('[title="form_option_string_test"]').parents('li').children('div.value span').text()
== 'yyy'
)
assert (
resp.pyquery('[title="form_option_date_test"]').parents('li').children('div.value span').text()
== '2024-03-21'
)
assert (
resp.pyquery('[title="form_option_date_test_year"]').parents('li').children('div.value span').text()
== '2024 (integer number)'
)

View File

@ -757,8 +757,6 @@ class LazyFormDef:
@property
def option(self):
if not self._formdef.workflow.variables_formdef:
return {}
return LazyFormDefOptions(self._formdef)
@property
@ -1989,14 +1987,20 @@ class LazyRequest:
class LazyFormDefOptions(LazyFormDataVar):
def __init__(self, formdef):
self._formdef = formdef
fields = self._formdef.workflow.variables_formdef.fields
try:
fields = self._formdef.workflow.variables_formdef.fields
except AttributeError:
fields = []
data = self._formdef.workflow_options or {}
for field in fields:
# change field IDs as options are stored in data with their
# varnames, not id.
field.id = field.varname or field.id
if hasattr(field, 'default_value') and data.get(field.varname) is None:
data[field.varname] = field.default_value
if isinstance(field.default_value, str):
data[field.varname] = field.convert_value_from_str(field.default_value)
else:
data[field.varname] = field.default_value
super().__init__(fields, data)
def inspect_keys(self):