backoffice: add support for cancelurl to backoffice submission (#46441) #711
|
@ -362,6 +362,46 @@ def test_backoffice_submission_with_return_url(pub):
|
|||
assert resp.location == 'https://example.org'
|
||||
|
||||
|
||||
def test_backoffice_submission_with_cancel_url(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
FormDef.wipe()
|
||||
formdef = FormDef()
|
||||
formdef.name = 'form title'
|
||||
formdef.fields = [
|
||||
fields.StringField(
|
||||
id='1', label='1st field', display_locations=['validation', 'summary', 'listings']
|
||||
),
|
||||
]
|
||||
formdef.backoffice_submission_roles = user.roles[:]
|
||||
formdef.workflow_roles = {'_receiver': 1}
|
||||
formdef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/submission/form-title/?cancelurl=https://example.org')
|
||||
resp = resp.follow().follow()
|
||||
resp = resp.form.submit('cancel')
|
||||
assert resp.location == 'https://example.org'
|
||||
|
||||
# check cancelurl is used, not return url
|
||||
resp = app.get(
|
||||
'/backoffice/submission/form-title/?cancelurl=https://example.org&ReturnURL=https://example.com'
|
||||
)
|
||||
resp = resp.follow().follow()
|
||||
resp = resp.form.submit('cancel')
|
||||
assert resp.location == 'https://example.org'
|
||||
|
||||
# test submission when agent is not receiver (cancelurl should not be used in this case)
|
||||
formdef.workflow_roles = {}
|
||||
formdef.store()
|
||||
resp = app.get('/backoffice/submission/form-title/?cancelurl=https://example.org')
|
||||
resp = resp.follow().follow()
|
||||
resp.form['f1'] = 'test submission'
|
||||
resp = resp.form.submit('submit') # -> to validation
|
||||
resp = resp.form.submit('submit') # -> to submit
|
||||
assert resp.location == 'http://example.net/backoffice/submission/'
|
||||
|
||||
|
||||
def test_backoffice_submission_with_caller(pub):
|
||||
user = create_user(pub)
|
||||
|
||||
|
|
|
@ -126,9 +126,10 @@ class FormFillPage(PublicFormFillPage):
|
|||
# create a new draft with these parameters, and redirect to it
|
||||
submission_channel = get_request().form.get('channel')
|
||||
name_id = get_request().form.get('NameID')
|
||||
cancel_url = get_request().form.get('cancelurl')
|
||||
return_url = get_request().form.get('ReturnURL')
|
||||
caller = get_request().form.get('caller')
|
||||
if name_id or submission_channel or return_url or caller:
|
||||
if name_id or submission_channel or return_url or cancel_url or caller:
|
||||
formdata = self.formdef.data_class()()
|
||||
formdata.data = {}
|
||||
formdata.backoffice_submission = True
|
||||
|
@ -148,6 +149,8 @@ class FormFillPage(PublicFormFillPage):
|
|||
)
|
||||
if return_url:
|
||||
formdata.submission_context['return_url'] = return_url
|
||||
if cancel_url:
|
||||
formdata.submission_context['cancel_url'] = cancel_url
|
||||
if submission_channel == 'phone' and caller:
|
||||
formdata.submission_context['caller'] = caller
|
||||
formdata.store()
|
||||
|
@ -156,7 +159,7 @@ class FormFillPage(PublicFormFillPage):
|
|||
extra_query_params = {
|
||||
x: y
|
||||
for x, y in get_request().form.items()
|
||||
if x not in ('channel', 'NameID', 'ReturnURL', 'caller')
|
||||
if x not in ('channel', 'NameID', 'ReturnURL', 'cancelurl', 'caller')
|
||||
}
|
||||
if extra_query_params:
|
||||
redirect_url += '?' + urllib.parse.urlencode(extra_query_params)
|
||||
|
@ -265,7 +268,7 @@ class FormFillPage(PublicFormFillPage):
|
|||
if (
|
||||
formdata
|
||||
and formdata.submission_context
|
||||
and set(formdata.submission_context.keys()) != {'return_url'}
|
||||
and set(formdata.submission_context.keys()).difference({'return_url', 'cancel_url'})
|
||||
):
|
||||
r += FormBackOfficeStatusPage(self.formdef, formdata).get_extra_submission_context_bar()
|
||||
|
||||
|
@ -388,8 +391,11 @@ class FormFillPage(PublicFormFillPage):
|
|||
def cancelled(self):
|
||||
url = self.get_default_return_url()
|
||||
formdata = self.get_current_draft() or self.formdef.data_class()()
|
||||
if formdata.submission_context and formdata.submission_context.get('return_url'):
|
||||
url = formdata.submission_context.get('return_url')
|
||||
if formdata.submission_context:
|
||||
if formdata.submission_context.get('return_url'):
|
||||
url = formdata.submission_context.get('return_url')
|
||||
if formdata.submission_context.get('cancel_url'):
|
||||
url = formdata.submission_context.get('cancel_url')
|
||||
if formdata.id:
|
||||
formdata.remove_self()
|
||||
return redirect(url)
|
||||
|
|
Loading…
Reference in New Issue