backoffice: make selected channel available to post conditions (#69951) #683
|
@ -1516,6 +1516,85 @@ def test_backoffice_submission_channel_selection(pub):
|
|||
assert data_class.get(formdata_no).submission_channel == 'counter'
|
||||
|
||||
|
||||
def test_backoffice_submission_channel_post_condition_check(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
FormDef.wipe()
|
||||
formdef = FormDef()
|
||||
formdef.name = 'form title'
|
||||
formdef.fields = [
|
||||
fields.PageField(
|
||||
id='0',
|
||||
label='1st page',
|
||||
post_conditions=[
|
||||
{
|
||||
'condition': {'type': 'django', 'value': 'form_submission_channel'},
|
||||
'error_message': 'a channel must be selected',
|
||||
}
|
||||
],
|
||||
),
|
||||
fields.StringField(id='1', label='Field on 1st page'),
|
||||
]
|
||||
formdef.backoffice_submission_roles = user.roles[:]
|
||||
formdef.workflow_roles = {'_receiver': 1}
|
||||
formdef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
|
||||
resp = app.get('/backoffice/submission/%s/' % formdef.url_name)
|
||||
resp.form['f1'] = 'test submission'
|
||||
resp = resp.form.submit('submit') # -> error
|
||||
assert 'a channel must be selected' in resp.text
|
||||
|
||||
resp.form['submission_channel'] = 'phone' # happens via javascript when a channel is selected in sidebar
|
||||
resp = resp.form.submit('submit') # -> validation page
|
||||
assert 'Check values then click submit.' in resp
|
||||
assert '<h3>Channel: Phone</h3>' in resp
|
||||
resp = resp.form.submit('submit') # final submit
|
||||
formdata_no = resp.location.split('/')[-2]
|
||||
data_class = formdef.data_class()
|
||||
assert data_class.get(formdata_no).submission_channel == 'phone'
|
||||
|
||||
# check if it's selected on a second page
|
||||
FormDef.wipe()
|
||||
formdef = FormDef()
|
||||
formdef.name = 'form title'
|
||||
formdef.fields = [
|
||||
fields.PageField(id='0', label='1st page'),
|
||||
fields.StringField(id='1', label='Field on 1st page'),
|
||||
fields.PageField(
|
||||
id='2',
|
||||
label='2nd page',
|
||||
post_conditions=[
|
||||
{
|
||||
'condition': {'type': 'django', 'value': 'form_submission_channel'},
|
||||
'error_message': 'a channel must be selected',
|
||||
}
|
||||
],
|
||||
),
|
||||
fields.StringField(id='3', label='Field on 2nd page'),
|
||||
]
|
||||
formdef.backoffice_submission_roles = user.roles[:]
|
||||
formdef.workflow_roles = {'_receiver': 1}
|
||||
formdef.store()
|
||||
|
||||
resp = app.get('/backoffice/submission/%s/' % formdef.url_name)
|
||||
resp.form['f1'] = 'test submission'
|
||||
resp = resp.form.submit('submit') # -> second page
|
||||
resp.form['f3'] = 'test submission'
|
||||
resp = resp.form.submit('submit') # -> error
|
||||
assert 'a channel must be selected' in resp.text
|
||||
|
||||
resp.form['submission_channel'] = 'phone' # happens via javascript when a channel is selected in sidebar
|
||||
resp = resp.form.submit('submit') # -> validation page
|
||||
assert 'Check values then click submit.' in resp
|
||||
assert '<h3>Channel: Phone</h3>' in resp
|
||||
resp = resp.form.submit('submit') # final submit
|
||||
formdata_no = resp.location.split('/')[-2]
|
||||
data_class = formdef.data_class()
|
||||
assert data_class.get(formdata_no).submission_channel == 'phone'
|
||||
|
||||
|
||||
def test_backoffice_submission_user_selection(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
|
|
|
@ -184,6 +184,8 @@ class FormFillPage(PublicFormFillPage):
|
|||
# when used via /live endpoint
|
||||
formdata.user_id = get_request().form['user_id']
|
||||
formdata.backoffice_submission = True
|
||||
if self.selected_submission_channel:
|
||||
formdata.submission_channel = self.selected_submission_channel
|
||||
return formdata
|
||||
|
||||
@classmethod
|
||||
|
|
Loading…
Reference in New Issue