diff --git a/tests/backoffice_pages/test_form_inspect.py b/tests/backoffice_pages/test_form_inspect.py index 35cbd0767..3eec58d37 100644 --- a/tests/backoffice_pages/test_form_inspect.py +++ b/tests/backoffice_pages/test_form_inspect.py @@ -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)' + ) diff --git a/wcs/variables.py b/wcs/variables.py index 7083d98a2..0857aee9b 100644 --- a/wcs/variables.py +++ b/wcs/variables.py @@ -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):