misc: restore backoffice drafts to the correct page (#23942)

This commit is contained in:
Frédéric Péters 2018-05-20 19:20:31 +02:00
parent 6d9d9fddb0
commit 3d79ca4cbc
2 changed files with 62 additions and 2 deletions

View File

@ -8,6 +8,7 @@ import StringIO
import time
import hashlib
import random
import urllib
import urlparse
import xml.etree.ElementTree as ET
import zipfile
@ -21,6 +22,7 @@ except ImportError:
from quixote import cleanup, get_publisher
from qommon import ods
from wcs.api_utils import sign_url
from wcs.qommon import errors, sessions
from wcs.qommon.form import PicklableUpload
from qommon.ident.password_accounts import PasswordAccount
@ -61,6 +63,10 @@ def pub(request):
pub.cfg['language'] = {'language': 'en'}
pub.write_cfg()
fd = open(os.path.join(pub.app_dir, 'site-options.cfg'), 'w')
fd.write('''
[api-secrets]
coucou = 1234
''')
fd.close()
return pub
@ -1541,6 +1547,60 @@ def test_backoffice_submission_welco(pub, welco_url):
# check agent name is displayed next to pending submission
assert '(%s)' % user.display_name in resp.body
def test_backoffice_submission_initiated_from_welco(pub, welco_url):
user = create_user(pub)
create_environment(pub)
app = login(get_app(pub))
formdef = FormDef.get_by_urlname('form-title')
formdef.fields = [
fields.PageField(id='0', label='1st PAGE', type='page',
condition={'type': 'python', 'value': 'form_submission_channel != "counter" and is_in_backoffice'}),
fields.StringField(id='1', label='Field on 1st page', type='string'),
fields.PageField(id='2', label='2nd PAGE', type='page'),
fields.StringField(id='3', label='Field on 2nd page', type='string'),
]
formdef.backoffice_submission_roles = user.roles[:]
formdef.store()
def post_formdata():
signed_url = sign_url('http://example.net/api/formdefs/form-title/submit' +
'?format=json&orig=coucou&email=%s' % urllib.quote(user.email), '1234')
url = signed_url[len('http://example.net'):]
resp = get_app(pub).post_json(url, {
'meta': {
'draft': True,
'backoffice-submission': True,
},
'data': {},
'context': {
'channel': 'counter'
}
})
return resp.json['data']['id']
resp = app.get('/backoffice/management/form-title/%s/' % post_formdata())
resp = resp.follow() # -> /backoffice/submission/form-title/XXX
resp = resp.follow() # -> /backoffice/submission/form-title/?mt=XYZ
# second page should be shown
pq = resp.pyquery.remove_namespaces()
assert pq('#steps li.current .label').text() == '2nd PAGE'
assert 'Field on 2nd page' in resp.body # and in fields
# reverse condition
formdef.fields[0].condition['value'] = 'form_submission_channel == "counter" and is_in_backoffice'
formdef.store()
resp = app.get('/backoffice/management/form-title/%s/' % post_formdata())
resp = resp.follow() # -> /backoffice/submission/form-title/XXX
resp = resp.follow() # -> /backoffice/submission/form-title/?mt=XYZ
pq = resp.pyquery.remove_namespaces()
assert pq('#steps li.current .label').text() == '1st PAGE'
assert 'Field on 1st page' in resp.body # and in fields
def test_backoffice_parallel_submission(pub):
user = create_user(pub)
create_environment(pub)

View File

@ -626,7 +626,8 @@ class FormPage(Directory):
magictoken = randbytes(8)
session.add_magictoken(magictoken, data)
get_request().form['magictoken'] = magictoken
if data.has_key('page_no'):
self.feed_current_data(magictoken)
if 'page_no' in data and int(data['page_no']) != 0:
page_no = int(data['page_no'])
del data['page_no']
if page_no == -1 or page_no >= self.page_number:
@ -641,7 +642,6 @@ class FormPage(Directory):
return self.validating(data)
else:
page_no = self.formdef.get_start_page()
self.feed_current_data(magictoken)
return self.page(page_no, True)
self.feed_current_data(None)
if self.formdef.get_start_page() is None: