Projet

Général

Profil

0001-workflows-ignore-form-errors-when-clicking-on-global.patch

Frédéric Péters, 30 juin 2020 08:23

Télécharger (3,55 ko)

Voir les différences:

Subject: [PATCH] workflows: ignore form errors when clicking on global action
 button (#39098)

 tests/test_form_pages.py | 55 ++++++++++++++++++++++++++++++++++++++++
 wcs/workflows.py         |  7 +++--
 2 files changed, 60 insertions(+), 2 deletions(-)
tests/test_form_pages.py
6386 6386
    assert emails.get('New form2 (test condition on action)')
6387 6387

  
6388 6388

  
6389
def test_user_global_action_along_form(pub):
6390
    # check it's possible to click on a global action button even if there's a
6391
    # form with required fields.
6392
    user = create_user(pub)
6393

  
6394
    workflow = Workflow.get_default_workflow()
6395
    workflow.id = '2'
6396
    action = workflow.add_global_action('FOOBAR')
6397
    register_comment = action.append_item('register-comment')
6398
    register_comment.comment = 'HELLO WORLD GLOBAL ACTION'
6399
    jump = action.append_item('jump')
6400
    jump.status = 'finished'
6401
    trigger = action.triggers[0]
6402
    trigger.roles = ['_submitter']
6403

  
6404
    status = workflow.get_status('new')
6405
    display_form = FormWorkflowStatusItem()
6406
    display_form.id = '_x'
6407
    display_form.by = ['_submitter']
6408
    display_form.varname = 'xxx'
6409
    display_form.formdef = WorkflowFormFieldsFormDef(item=display_form)
6410
    display_form.formdef.fields.append(fields.StringField(id='1', label='blah',
6411
        type='string', required=True))
6412
    status.items.append(display_form)
6413
    display_form.parent = status
6414

  
6415
    workflow.store()
6416

  
6417
    formdef = FormDef()
6418
    formdef.name = 'test global action'
6419
    formdef.fields = []
6420
    formdef.workflow_id = workflow.id
6421
    formdef.workflow_roles = {}
6422
    formdef.store()
6423

  
6424
    formdef.data_class().wipe()
6425

  
6426
    app = login(get_app(pub), username='foo', password='foo')
6427
    resp = app.get(formdef.get_url())
6428
    resp = resp.form.submit('submit')
6429
    resp = resp.form.submit('submit')
6430

  
6431
    assert formdef.data_class().count() == 1
6432
    formdata = formdef.data_class().select()[0]
6433

  
6434
    resp = app.get(formdata.get_url())
6435
    assert resp.form['f1'].attrs['aria-required'] == 'true'
6436
    assert 'button-action-1' in resp.form.fields
6437
    resp = resp.form.submit('button-action-1')
6438

  
6439
    resp = app.get(formdata.get_url())
6440
    assert 'HELLO WORLD GLOBAL ACTION' in resp.text
6441
    assert formdef.data_class().get(formdata.id).status == 'wf-finished'
6442

  
6443

  
6389 6444
def test_email_actions(pub, emails):
6390 6445
    user = create_user(pub)
6391 6446

  
wcs/workflows.py
1507 1507

  
1508 1508
        for action in filled.formdef.workflow.get_global_actions_for_user(filled, user):
1509 1509
            form.add_submit('button-action-%s' % action.id, action.name)
1510
            if form.get_widget('button-action-%s' % action.id):
1511
                form.get_widget('button-action-%s' % action.id).backoffice_info_text = action.backoffice_info_text
1510
            widget = form.get_widget('button-action-%s' % action.id)
1511
            if widget:
1512
                widget.backoffice_info_text = action.backoffice_info_text
1513
                widget.ignore_form_errors = True
1514
                widget.attrs['formnovalidate'] = 'formnovalidate'
1512 1515

  
1513 1516
        if form.widgets or form.submit_widgets:
1514 1517
            return form
1515
-