Projet

Général

Profil

0001-misc-handle-adding-a-block-line-in-workflow-forms-in.patch

Frédéric Péters, 30 avril 2021 15:11

Télécharger (3,96 ko)

Voir les différences:

Subject: [PATCH] misc: handle adding a block line in workflow forms in front
 (#53607)

 tests/form_pages/test_block.py | 64 +++++++++++++++++++++++++++++++++-
 wcs/forms/common.py            | 11 ++++--
 2 files changed, 71 insertions(+), 4 deletions(-)
tests/form_pages/test_block.py
13 13
from wcs.data_sources import NamedDataSource
14 14
from wcs.formdef import FormDef
15 15
from wcs.wf.form import FormWorkflowStatusItem, WorkflowFormFieldsFormDef
16
from wcs.workflows import Workflow
16
from wcs.workflows import JumpOnSubmitWorkflowStatusItem, Workflow
17 17

  
18 18
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login
19 19
from .test_all import create_user
......
1517 1517
    assert 'Blah Title' not in resp.text
1518 1518
    assert 'Blah Subtitle' not in resp.text
1519 1519
    assert 'Blah Comment' not in resp.text
1520

  
1521

  
1522
def test_workflow_display_form_with_block_add(pub):
1523
    user = create_user(pub)
1524

  
1525
    block = BlockDef()
1526
    block.name = 'foobar'
1527
    block.fields = [
1528
        fields.StringField(id='123', required=True, label='Test', type='string'),
1529
    ]
1530
    block.store()
1531

  
1532
    wf = Workflow.get_default_workflow()
1533
    wf.id = '2'
1534
    wf.store()
1535
    wf = Workflow.get(wf.id)
1536
    status = wf.get_status('new')
1537
    status.items = []
1538
    display_form = FormWorkflowStatusItem()
1539
    display_form.id = '_display_form'
1540
    display_form.by = ['_submitter']
1541
    display_form.varname = 'blah'
1542
    display_form.formdef = WorkflowFormFieldsFormDef(item=display_form)
1543
    display_form.formdef.fields = [
1544
        fields.StringField(id='1', label='Test', varname='str', type='string', required=True),
1545
        fields.BlockField(id='2', label='Blocks', type='block:foobar', varname='data', max_items=3),
1546
    ]
1547
    status.items.append(display_form)
1548
    display_form.parent = status
1549

  
1550
    jump = JumpOnSubmitWorkflowStatusItem()
1551
    jump.id = '_jump'
1552
    jump.status = 'accepted'
1553
    status.items.append(jump)
1554
    jump.parent = status
1555

  
1556
    wf.store()
1557

  
1558
    formdef = FormDef()
1559
    formdef.name = 'form title'
1560
    formdef.fields = []
1561
    formdef.workflow_id = wf.id
1562
    formdef.store()
1563

  
1564
    formdata = formdef.data_class()()
1565
    formdata.user_id = user.id
1566
    formdata.just_created()
1567
    formdata.status = 'wf-new'
1568
    formdata.store()
1569

  
1570
    resp = login(get_app(pub), username='foo', password='foo').get(formdata.get_url())
1571
    resp.form['fblah_1'] = 'blah'
1572
    resp.form['fblah_2$element0$f123'] = 'foo'
1573
    resp = resp.form.submit('fblah_2$add_element')
1574
    resp.form['fblah_2$element1$f123'] = 'bar'
1575
    resp = resp.form.submit('submit')
1576

  
1577
    assert formdef.data_class().get(formdata.id).workflow_data == {
1578
        'blah_var_data': 'foobar, foobar',
1579
        'blah_var_data_raw': {'data': [{'123': 'foo'}, {'123': 'bar'}], 'schema': {'123': 'string'}},
1580
        'blah_var_str': 'blah',
1581
    }
wcs/forms/common.py
257 257

  
258 258
        user = get_request().user
259 259
        form = self.get_workflow_form(user)
260
        response = self.check_submitted_form(form)
261
        if response:
262
            return response
260
        try:
261
            response = self.check_submitted_form(form)
262
        except RedisplayFormException:
263
            # don't display errors after "add block" button has been clicked.
264
            form.clear_errors()
265
        else:
266
            if response:
267
                return response
263 268

  
264 269
        if form:
265 270
            form.add_media()
266
-