backoffice: allow live evaluation even without any submission right (#55229)

This commit is contained in:
Frédéric Péters 2021-06-28 14:58:48 +02:00
parent 2d5377e542
commit f0e061c164
2 changed files with 51 additions and 1 deletions

View File

@ -3014,6 +3014,45 @@ def test_backoffice_wfedit_and_user_selection_multi_page(pub):
assert formdef.data_class().get(number31.id).user_id == str(user.id)
def test_backoffice_wfedit_and_live_condition(pub):
user = create_user(pub)
create_environment(pub)
formdef = FormDef.get_by_urlname('form-title')
formdef.fields[0].varname = 'foo'
formdef.fields[1].condition = {'type': 'django', 'value': 'form_var_foo == "test"'}
form_class = formdef.data_class()
number31 = [x for x in form_class.select() if x.data['1'] == 'FOO BAR 30'][0]
# attach a custom workflow
workflow = Workflow(name='wfedit')
st1 = workflow.add_status('Status1', number31.status.split('-')[1])
wfedit = EditableWorkflowStatusItem()
wfedit.id = '_wfedit'
wfedit.by = [user.roles[0]]
st1.items.append(wfedit)
wfedit.parent = st1
workflow.store()
formdef.workflow_id = workflow.id
formdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/management/form-title/%s/' % number31.id)
resp = resp.form.submit('button_wfedit').follow()
live_url = resp.html.find('form').attrs['data-live-url']
live_resp = app.post(live_url, params=resp.form.submit_fields())
assert live_resp.json['result']['1']['visible']
assert not live_resp.json['result']['2']['visible']
resp.form['f1'].value = 'test'
live_resp = app.post(live_url, params=resp.form.submit_fields())
assert live_resp.json['result']['1']['visible']
assert live_resp.json['result']['2']['visible']
def test_global_listing(pub):
if not pub.is_using_postgresql():
pytest.skip('this requires SQL')

View File

@ -1097,6 +1097,7 @@ class ManagementDirectory(Directory):
class FormPage(Directory):
_q_exports = [
'',
'live',
'csv',
'stats',
'ods',
@ -2736,6 +2737,16 @@ class FormPage(Directory):
return FormBackOfficeStatusPage(self.formdef, filled)
def live(self):
return FormBackofficeEditPage(self.formdef.url_name).live()
class FormBackofficeEditPage(FormFillPage):
def create_form(self, *args, **kwargs):
form = super().create_form(*args, **kwargs)
form.attrs['data-live-url'] = self.formdef.get_url(backoffice=True) + 'live'
return form
class FormBackOfficeStatusPage(FormStatusPage):
_q_exports_orig = [
@ -2750,7 +2761,7 @@ class FormBackOfficeStatusPage(FormStatusPage):
('lateral-block', 'lateral_block'),
('user-pending-forms', 'user_pending_forms'),
]
form_page_class = FormFillPage
form_page_class = FormBackofficeEditPage
sidebar_recorded_message = _('The form has been recorded on %(date)s with the number %(number)s.')
sidebar_recorded_by_agent_message = _(