misc: restore backoffice drafts to the correct page (#23942)
This commit is contained in:
parent
6d9d9fddb0
commit
3d79ca4cbc
|
@ -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)
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue