backoffice: use /backoffice/ URLs for live evaluation (#34213)

This is required to get a correct value for is_in_backoffice.
This commit is contained in:
Frédéric Péters 2019-06-21 12:32:46 +02:00
parent 52b6046edd
commit ce2e7d3c18
3 changed files with 51 additions and 1 deletions

View File

@ -2002,6 +2002,48 @@ def test_backoffice_submission_remove_drafts(pub):
resp = app.get('/backoffice/submission/form-title/remove/%s' % formdata.id,
status=403)
def test_backoffice_submission_live_condition(pub):
user = create_user(pub)
create_environment(pub)
formdef = FormDef.get_by_urlname('form-title')
formdef.backoffice_submission_roles = user.roles[:]
formdef.store()
formdef.fields = [
fields.StringField(type='string', id='1', label='Bar', size='40',
required=True, varname='bar'),
fields.StringField(type='string', id='2', label='Foo', size='40',
required=True, varname='foo',
condition={'type': 'django', 'value': 'form_var_bar == "bye"'}),
]
formdef.store()
app = login(get_app(pub))
resp = app.get('/backoffice/submission/form-title/')
assert 'f1' in resp.form.fields
assert 'f2' in resp.form.fields
assert resp.html.find('div', {'data-field-id': '1'}).attrs['data-live-source'] == 'true'
assert resp.html.find('div', {'data-field-id': '2'}).attrs.get('style') == 'display: none'
resp.form['f1'] = 'hello'
live_url = resp.html.find('form').attrs['data-live-url']
assert '/backoffice/' in 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'] = 'bye'
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']
resp.form['f1'] = 'hello'
resp = resp.form.submit('submit')
assert 'Check values then click submit.' in resp.body
assert 'name="f1"' in resp.body
assert 'name="f2"' not in resp.body
resp = resp.form.submit('submit')
resp = resp.follow()
assert '<span class="label">Bar</span>' in resp.body
assert '<span class="label">Foo</span>' not in resp.body
def test_backoffice_submission_sections(pub):
user = create_user(pub)
create_environment(pub)
@ -3747,6 +3789,7 @@ def test_backoffice_workflow_form_with_conditions(pub):
assert resp.html.find('div', {'data-field-id': '1'}).attrs['data-live-source'] == 'true'
assert resp.html.find('div', {'data-field-id': '2'}).attrs.get('style') == 'display: none'
live_url = resp.html.find('form').attrs['data-live-url']
assert '/backoffice/' in live_url
resp.form['f1'] = ''
live_resp = app.post(live_url, params=resp.form.submit_fields())
assert live_resp.json['result']['1']['visible']

View File

@ -1996,7 +1996,7 @@ class FormPage(Directory):
class FormBackOfficeStatusPage(FormStatusPage):
_q_exports_orig = ['', 'download', 'json', 'action',
_q_exports_orig = ['', 'download', 'json', 'action', 'live',
'inspect', ('inspect-tool', 'inspect_tool'),
('user-pending-forms', 'user_pending_forms')]
form_page_class = FormFillPage
@ -2029,6 +2029,12 @@ class FormBackOfficeStatusPage(FormStatusPage):
def get_sidebar(self):
return self.get_extra_context_bar()
def get_workflow_form(self, user):
form = super(FormBackOfficeStatusPage, self).get_workflow_form(user)
if form:
form.attrs['data-live-url'] = self.filled.get_url(backoffice=True) + 'live'
return form
def user_pending_forms(self):
self.check_receiver()
get_response().filter = {'raw': True}

View File

@ -179,6 +179,7 @@ class FormFillPage(PublicFormFillPage):
def create_form(self, *args, **kwargs):
form = super(FormFillPage, self).create_form(*args, **kwargs)
form.attrs['data-live-url'] = self.formdef.get_backoffice_submission_url() + 'live'
welco_url = get_publisher().get_site_option('welco_url', 'options')
if not welco_url:
form.add_hidden('submission_channel', self.selected_submission_channel)