Projet

Général

Profil

0001-tests-check-for-live-data-sources-in-workflow-forms-.patch

Frédéric Péters, 20 septembre 2019 12:08

Télécharger (3,86 ko)

Voir les différences:

Subject: [PATCH 1/2] tests: check for live data sources in workflow forms
 (#35903)

 tests/test_form_pages.py | 75 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 75 insertions(+)
tests/test_form_pages.py
6303 6303
    assert formdata.data['3'] == 'a'
6304 6304
    assert formdata.data['3_display'] == 'b'
6305 6305

  
6306
def test_field_live_select_content_on_workflow_form(pub, http_requests):
6307
    create_user(pub)
6308
    wf = Workflow(name='wf-title')
6309
    st1 = wf.add_status('Status1', 'st1')
6310

  
6311
    # form displayed into the workflow
6312
    display_form = FormWorkflowStatusItem()
6313
    display_form.id = '_x'
6314
    display_form.by = ['_submitter']
6315
    display_form.varname = 'xxx'
6316
    display_form.formdef = WorkflowFormFieldsFormDef(item=display_form)
6317
    display_form.formdef.fields = [
6318
        fields.StringField(type='string', id='1', label='Bar', size='40',
6319
            required=True, varname='bar'),
6320
        fields.StringField(type='string', id='2', label='Bar2', size='40',
6321
            required=True, varname='bar2'),
6322
        fields.ItemField(type='item', id='3', label='Foo',
6323
            required=False, varname='foo',
6324
            data_source={
6325
                'type': 'json',
6326
                'value': '{% if xxx_var_bar2 %}http://remote.example.net/json-list?plop={{xxx_var_bar2}}{% endif %}'
6327
            }),
6328
    ]
6329
    st1.items.append(display_form)
6330
    display_form.parent = st1
6331
    wf.store()
6332

  
6333
    # initial empty form
6334
    formdef = create_formdef()
6335
    formdef.fields = []
6336
    formdef.confirmation = False
6337
    formdef.workflow_id = wf.id
6338
    formdef.store()
6339
    formdef.data_class().wipe()
6340

  
6341
    app = get_app(pub)
6342
    resp = login(app, username='foo', password='foo').get('/test/')
6343
    assert 'Forms - test' in resp.text
6344

  
6345
    resp = resp.form.submit('submit').follow()
6346
    assert 'The form has been recorded' in resp.text
6347

  
6348
    assert 'f1' in resp.form.fields
6349
    assert 'f2' in resp.form.fields
6350
    assert resp.html.find('div', {'data-field-id': '2'}).attrs['data-live-source'] == 'true'
6351
    assert resp.html.find('div', {'data-field-id': '3'}).find('select')
6352
    resp.form['f1'] = 'hello'
6353
    live_resp = app.post('/test/1/live', params=resp.form.submit_fields())
6354
    assert live_resp.json['result']['1']['visible']
6355
    assert live_resp.json['result']['2']['visible']
6356
    assert live_resp.json['result']['3']['visible']
6357
    assert not 'items' in live_resp.json['result']['3']
6358
    resp.form['f2'] = 'plop'
6359
    live_resp = app.post('/test/1/live?modified_field_id=2', params=resp.form.submit_fields())
6360
    assert live_resp.json['result']['1']['visible']
6361
    assert live_resp.json['result']['2']['visible']
6362
    assert live_resp.json['result']['3']['visible']
6363
    assert 'items' in live_resp.json['result']['3']
6364
    assert len(live_resp.json['result']['3']['items']) > 0
6365

  
6366
    resp.form['f3'].options = []
6367
    for item in live_resp.json['result']['3']['items']:
6368
        # simulate javascript filling the <select>
6369
        resp.form['f3'].options.append((item['id'], False, item['text']))
6370
    resp.form['f3'] = 'a'
6371

  
6372
    resp = resp.form.submit('submit')
6373
    assert 'invalid value selected' not in resp
6374
    resp = resp.follow()
6375
    formdata = formdef.data_class().select()[0]
6376
    assert formdata.workflow_data['xxx_var_bar'] == 'hello'
6377
    assert formdata.workflow_data['xxx_var_bar2'] == 'plop'
6378
    assert formdata.workflow_data['xxx_var_foo_raw'] == 'a'
6379
    assert formdata.workflow_data['xxx_var_foo'] == 'b'
6380

  
6306 6381
def test_field_live_comment_content(pub, http_requests):
6307 6382
    FormDef.wipe()
6308 6383
    formdef = FormDef()
6309
-