forms: don't reset user during backoffice edition (#31729)
This commit is contained in:
parent
340cba66e1
commit
ff55130941
|
@ -13,6 +13,7 @@ import urlparse
|
|||
import xml.etree.ElementTree as ET
|
||||
import zipfile
|
||||
|
||||
import mock
|
||||
import pytest
|
||||
|
||||
try:
|
||||
|
@ -2648,6 +2649,57 @@ def test_backoffice_wfedit_and_backoffice_fields(pub):
|
|||
resp = resp.follow()
|
||||
assert form_class().get(number31.id).data['bo1'] == 'plop'
|
||||
|
||||
def test_backoffice_wfedit_and_data_source_with_user_info(pub):
|
||||
user = create_user(pub)
|
||||
create_environment(pub)
|
||||
formdef = FormDef.get_by_urlname('form-title')
|
||||
|
||||
formdef.fields[2].data_source = {'type': 'json',
|
||||
'value': 'https://www.example.invalid/?name_id={% firstof form_user_display_name "XXX" %}'
|
||||
}
|
||||
formdef.store()
|
||||
|
||||
form_class = formdef.data_class()
|
||||
|
||||
number31 = [x for x in form_class.select() if x.data['1'] == 'FOO BAR 30'][0]
|
||||
|
||||
# attach a custom workflow
|
||||
workflow = Workflow(name='wfedit')
|
||||
st1 = workflow.add_status('Status1', number31.status.split('-')[1])
|
||||
|
||||
wfedit = EditableWorkflowStatusItem()
|
||||
wfedit.id = '_wfedit'
|
||||
wfedit.by = [user.roles[0]]
|
||||
st1.items.append(wfedit)
|
||||
wfedit.parent = st1
|
||||
workflow.store()
|
||||
|
||||
formdef.workflow_id = workflow.id
|
||||
formdef.store()
|
||||
|
||||
number31 = form_class().get(number31.id)
|
||||
number31.user_id = user.id
|
||||
number31.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
|
||||
with mock.patch('qommon.misc.urlopen') as urlopen:
|
||||
data = {'data': [{'id': 'A', 'text': 'hello'}, {'id': 'B', 'text': 'world'}]}
|
||||
def side_effect(url, *args):
|
||||
assert '?name_id=admin' in url
|
||||
return StringIO.StringIO(json.dumps(data))
|
||||
|
||||
urlopen.side_effect = side_effect
|
||||
|
||||
resp = app.get('/backoffice/management/form-title/%s/' % number31.id)
|
||||
resp = resp.form.submit('button_wfedit')
|
||||
resp = resp.follow()
|
||||
assert urlopen.call_count == 1
|
||||
resp.form['f3'].value = 'A'
|
||||
resp = resp.form.submit('submit')
|
||||
assert urlopen.call_count == 2
|
||||
resp = resp.follow()
|
||||
|
||||
def test_global_listing(pub):
|
||||
if not pub.is_using_postgresql():
|
||||
pytest.skip('this requires SQL')
|
||||
|
|
|
@ -494,6 +494,13 @@ class FormPage(Directory, FormTemplateMixin):
|
|||
formdata._formdef = self.formdef
|
||||
formdata.user = get_request().user
|
||||
formdata.data = get_session().get_by_magictoken(magictoken, {})
|
||||
|
||||
if self.edit_mode:
|
||||
# keep associated user as it may be required as a parameter in
|
||||
# data source URLs.
|
||||
formdata.user = self.edited_data.user
|
||||
return formdata
|
||||
|
||||
if get_request().is_in_backoffice():
|
||||
formdata.user_id = None
|
||||
draft_formdata_id = formdata.data.get('draft_formdata_id')
|
||||
|
|
Loading…
Reference in New Issue