tests: check for live data sources in workflow forms (#35903)

This commit is contained in:
Nicolas Roche 2019-09-10 10:43:22 +02:00 committed by Frédéric Péters
parent 497d8d83d2
commit e8384beceb
1 changed files with 82 additions and 0 deletions

View File

@ -6413,6 +6413,88 @@ def test_field_live_select_content(pub, http_requests):
assert formdata.data['3'] == 'a'
assert formdata.data['3_display'] == 'b'
def test_field_live_select_content_on_workflow_form(pub, http_requests):
create_user(pub)
wf = Workflow(name='wf-title')
st1 = wf.add_status('Status1', 'st1')
# form displayed into the workflow
display_form = FormWorkflowStatusItem()
display_form.id = '_x'
display_form.by = ['_submitter']
display_form.varname = 'xxx'
display_form.formdef = WorkflowFormFieldsFormDef(item=display_form)
display_form.formdef.fields = [
fields.StringField(type='string', id='1', label='Bar', size='40',
required=True, varname='bar'),
fields.StringField(type='string', id='2', label='Bar2', size='40',
required=True, varname='bar2'),
fields.ItemField(type='item', id='3', label='Foo',
required=False, varname='foo',
data_source={
'type': 'json',
'value': '{% if xxx_var_bar2 %}http://remote.example.net/json-list?plop={{xxx_var_bar2}}{% endif %}'
}),
]
st1.items.append(display_form)
display_form.parent = st1
wf.store()
# initial empty form
formdef = create_formdef()
formdef.fields = []
formdef.confirmation = False
formdef.workflow_id = wf.id
formdef.store()
formdef.data_class().wipe()
app = get_app(pub)
resp = login(app, username='foo', password='foo').get('/test/')
assert 'Forms - test' in resp.text
resp = resp.form.submit('submit').follow()
assert 'The form has been recorded' in resp.text
assert 'data-live-url' in resp.html.find('form').attrs
assert 'f1' in resp.form.fields
assert 'f2' in resp.form.fields
assert resp.html.find('div', {'data-field-id': '2'}).attrs['data-live-source'] == 'true'
assert resp.html.find('div', {'data-field-id': '3'}).find('select')
resp = resp.form.submit('submit') # submit with error, to check <form> attributes
assert 'data-live-url' in resp.html.find('form').attrs
assert 'f1' in resp.form.fields
assert 'f2' in resp.form.fields
assert resp.html.find('div', {'data-field-id': '2'}).attrs['data-live-source'] == 'true'
assert resp.html.find('div', {'data-field-id': '3'}).find('select')
resp.form['f1'] = 'hello'
live_resp = app.post('/test/1/live', params=resp.form.submit_fields())
assert live_resp.json['result']['1']['visible']
assert live_resp.json['result']['2']['visible']
assert live_resp.json['result']['3']['visible']
assert not 'items' in live_resp.json['result']['3']
resp.form['f2'] = 'plop'
live_resp = app.post('/test/1/live?modified_field_id=2', params=resp.form.submit_fields())
assert live_resp.json['result']['1']['visible']
assert live_resp.json['result']['2']['visible']
assert live_resp.json['result']['3']['visible']
assert 'items' in live_resp.json['result']['3']
assert len(live_resp.json['result']['3']['items']) > 0
resp.form['f3'].options = []
for item in live_resp.json['result']['3']['items']:
# simulate javascript filling the <select>
resp.form['f3'].options.append((item['id'], False, item['text']))
resp.form['f3'] = 'a'
resp = resp.form.submit('submit')
assert 'invalid value selected' not in resp
resp = resp.follow()
formdata = formdef.data_class().select()[0]
assert formdata.workflow_data['xxx_var_bar'] == 'hello'
assert formdata.workflow_data['xxx_var_bar2'] == 'plop'
assert formdata.workflow_data['xxx_var_foo_raw'] == 'a'
assert formdata.workflow_data['xxx_var_foo'] == 'b'
def test_field_live_comment_content(pub, http_requests):
FormDef.wipe()
formdef = FormDef()