Projet

Général

Profil

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

Frédéric Péters, 21 octobre 2019 15:05

Télécharger (4,3 ko)

Voir les différences:

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

 tests/test_form_pages.py | 82 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)
tests/test_form_pages.py
6412 6412
    assert formdata.data['3'] == 'a'
6413 6413
    assert formdata.data['3_display'] == 'b'
6414 6414

  
6415
def test_field_live_select_content_on_workflow_form(pub, http_requests):
6416
    create_user(pub)
6417
    wf = Workflow(name='wf-title')
6418
    st1 = wf.add_status('Status1', 'st1')
6419

  
6420
    # form displayed into the workflow
6421
    display_form = FormWorkflowStatusItem()
6422
    display_form.id = '_x'
6423
    display_form.by = ['_submitter']
6424
    display_form.varname = 'xxx'
6425
    display_form.formdef = WorkflowFormFieldsFormDef(item=display_form)
6426
    display_form.formdef.fields = [
6427
        fields.StringField(type='string', id='1', label='Bar', size='40',
6428
            required=True, varname='bar'),
6429
        fields.StringField(type='string', id='2', label='Bar2', size='40',
6430
            required=True, varname='bar2'),
6431
        fields.ItemField(type='item', id='3', label='Foo',
6432
            required=False, varname='foo',
6433
            data_source={
6434
                'type': 'json',
6435
                'value': '{% if xxx_var_bar2 %}http://remote.example.net/json-list?plop={{xxx_var_bar2}}{% endif %}'
6436
            }),
6437
    ]
6438
    st1.items.append(display_form)
6439
    display_form.parent = st1
6440
    wf.store()
6441

  
6442
    # initial empty form
6443
    formdef = create_formdef()
6444
    formdef.fields = []
6445
    formdef.confirmation = False
6446
    formdef.workflow_id = wf.id
6447
    formdef.store()
6448
    formdef.data_class().wipe()
6449

  
6450
    app = get_app(pub)
6451
    resp = login(app, username='foo', password='foo').get('/test/')
6452
    assert 'Forms - test' in resp.text
6453

  
6454
    resp = resp.form.submit('submit').follow()
6455
    assert 'The form has been recorded' in resp.text
6456

  
6457
    assert 'data-live-url' in resp.html.find('form').attrs
6458
    assert 'f1' in resp.form.fields
6459
    assert 'f2' in resp.form.fields
6460
    assert resp.html.find('div', {'data-field-id': '2'}).attrs['data-live-source'] == 'true'
6461
    assert resp.html.find('div', {'data-field-id': '3'}).find('select')
6462
    resp = resp.form.submit('submit')  # submit with error, to check <form> attributes
6463
    assert 'data-live-url' in resp.html.find('form').attrs
6464
    assert 'f1' in resp.form.fields
6465
    assert 'f2' in resp.form.fields
6466
    assert resp.html.find('div', {'data-field-id': '2'}).attrs['data-live-source'] == 'true'
6467
    assert resp.html.find('div', {'data-field-id': '3'}).find('select')
6468
    resp.form['f1'] = 'hello'
6469
    live_resp = app.post('/test/1/live', params=resp.form.submit_fields())
6470
    assert live_resp.json['result']['1']['visible']
6471
    assert live_resp.json['result']['2']['visible']
6472
    assert live_resp.json['result']['3']['visible']
6473
    assert not 'items' in live_resp.json['result']['3']
6474
    resp.form['f2'] = 'plop'
6475
    live_resp = app.post('/test/1/live?modified_field_id=2', params=resp.form.submit_fields())
6476
    assert live_resp.json['result']['1']['visible']
6477
    assert live_resp.json['result']['2']['visible']
6478
    assert live_resp.json['result']['3']['visible']
6479
    assert 'items' in live_resp.json['result']['3']
6480
    assert len(live_resp.json['result']['3']['items']) > 0
6481

  
6482
    resp.form['f3'].options = []
6483
    for item in live_resp.json['result']['3']['items']:
6484
        # simulate javascript filling the <select>
6485
        resp.form['f3'].options.append((item['id'], False, item['text']))
6486
    resp.form['f3'] = 'a'
6487

  
6488
    resp = resp.form.submit('submit')
6489
    assert 'invalid value selected' not in resp
6490
    resp = resp.follow()
6491
    formdata = formdef.data_class().select()[0]
6492
    assert formdata.workflow_data['xxx_var_bar'] == 'hello'
6493
    assert formdata.workflow_data['xxx_var_bar2'] == 'plop'
6494
    assert formdata.workflow_data['xxx_var_foo_raw'] == 'a'
6495
    assert formdata.workflow_data['xxx_var_foo'] == 'b'
6496

  
6415 6497
def test_field_live_comment_content(pub, http_requests):
6416 6498
    FormDef.wipe()
6417 6499
    formdef = FormDef()
6418
-