tests: check for live data sources in workflow forms (#35903)
This commit is contained in:
parent
497d8d83d2
commit
e8384beceb
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue