3814 |
3814 |
|
3815 |
3815 |
assert formdef.data_class().get(formdata.id).workflow_data == {'blah_var_str': 'xxx2', 'blah_var_str2': None}
|
3816 |
3816 |
|
|
3817 |
def test_backoffice_workflow_form_with_live_data_source(pub):
|
|
3818 |
user = create_user(pub)
|
|
3819 |
create_environment(pub)
|
|
3820 |
|
|
3821 |
wf = Workflow.get_default_workflow()
|
|
3822 |
wf.id = '2'
|
|
3823 |
wf.store()
|
|
3824 |
wf = Workflow.get(wf.id)
|
|
3825 |
status = wf.get_status('new')
|
|
3826 |
status.items = []
|
|
3827 |
display_form = FormWorkflowStatusItem()
|
|
3828 |
display_form.id = '_display_form'
|
|
3829 |
display_form.by = [user.roles[0]]
|
|
3830 |
display_form.varname = 'blah'
|
|
3831 |
display_form.formdef = WorkflowFormFieldsFormDef(item=display_form)
|
|
3832 |
display_form.formdef.fields = [
|
|
3833 |
fields.StringField(id='1', label='Test', varname='str', type='string', required=True),
|
|
3834 |
fields.ItemField(id='2', label='Test2', varname='str2', type='item', required=True,
|
|
3835 |
data_source={'type': 'json', 'value': 'https://www.example.invalid/{{ blah_var_str }}'}),
|
|
3836 |
]
|
|
3837 |
status.items.append(display_form)
|
|
3838 |
display_form.parent = status
|
|
3839 |
|
|
3840 |
wf.store()
|
|
3841 |
formdef = FormDef.get_by_urlname('form-title')
|
|
3842 |
formdef.workflow_id = wf.id
|
|
3843 |
formdef.fields[0].varname = 'plop'
|
|
3844 |
formdef.store()
|
|
3845 |
|
|
3846 |
for formdata in formdef.data_class().select():
|
|
3847 |
if formdata.status == 'wf-new':
|
|
3848 |
break
|
|
3849 |
|
|
3850 |
app = get_app(pub)
|
|
3851 |
|
|
3852 |
with mock.patch('qommon.misc.urlopen') as urlopen:
|
|
3853 |
data1 = {'data': [{'id': 'A', 'text': 'hello'}, {'id': 'B', 'text': 'world'}]}
|
|
3854 |
data2 = {'data': [{'id': 'C', 'text': 'hello'}, {'id': 'D', 'text': 'world'}]}
|
|
3855 |
def side_effect(url, *args):
|
|
3856 |
if 'toto' not in url:
|
|
3857 |
return StringIO.StringIO(json.dumps(data1))
|
|
3858 |
else:
|
|
3859 |
return StringIO.StringIO(json.dumps(data2))
|
|
3860 |
urlopen.side_effect = side_effect
|
|
3861 |
|
|
3862 |
resp = login(app).get(formdata.get_url(backoffice=True))
|
|
3863 |
assert 'f1' in resp.form.fields
|
|
3864 |
assert 'f2' in resp.form.fields
|
|
3865 |
assert resp.form.fields['f2'][0].options == [(u'A', False, u'hello'), (u'B', False, u'world')]
|
|
3866 |
|
|
3867 |
live_url = resp.html.find('form').attrs['data-live-url']
|
|
3868 |
resp.form['f1'] = 'toto'
|
|
3869 |
live_resp = app.post(live_url + '?modified_field_id=1', params=resp.form.submit_fields())
|
|
3870 |
assert live_resp.json['result']['2']['items'] == [{u'text': u'hello', u'id': u'C'}, {u'text': u'world', u'id': u'D'}]
|
|
3871 |
|
3817 |
3872 |
def test_backoffice_criticality_in_formdef_listing(pub):
|
3818 |
3873 |
if not pub.is_using_postgresql():
|
3819 |
3874 |
pytest.skip('this requires SQL')
|