Projet

Général

Profil

0001-bo-fields-warning-table-fields-required-python-array.patch

Nicolas Roche, 02 janvier 2020 18:36

Télécharger (4,95 ko)

Voir les différences:

Subject: [PATCH] bo-fields: warning table fields required python arrays
 (#38541)

 tests/test_admin_pages.py | 67 +++++++++++++++++++++++++++++++++++++++
 wcs/admin/workflows.py    | 10 ++++++
 2 files changed, 77 insertions(+)
tests/test_admin_pages.py
41 41
from wcs.workflows import (Workflow, DisplayMessageWorkflowStatusItem,
42 42
        WorkflowCriticalityLevel, WorkflowBackofficeFieldsFormDef,
43 43
        CommentableWorkflowStatusItem)
44
from wcs.wf.backoffice_fields import SetBackofficeFieldsWorkflowStatusItem
44 45
from wcs.wf.export_to_model import ExportToModel
45 46
from wcs.wf.jump import JumpWorkflowStatusItem
46 47
from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem
......
3142 3143
    workflow = Workflow.get(workflow.id)
3143 3144
    assert workflow.possible_status[0].items[0].fields == [{'field_id': first_field_id, 'value': 'Hello'}]
3144 3145

  
3146
def test_workflows_edit_backoffice_table_fields(pub):
3147
    create_superuser(pub)
3148
    create_role()
3149

  
3150
    Workflow.wipe()
3151
    workflow = Workflow(name='test')
3152
    workflow.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(workflow)
3153
    workflow.backoffice_fields_formdef.fields = [
3154
        fields.TableField(
3155
            id='bo0', label='bo table field',
3156
            type='table', varname='backoffice_table',
3157
            rows=['row1', 'row2'], columns=['col1', 'col2']),
3158
    ]
3159
    st1 = workflow.add_status('status1', 'st1')
3160
    setbo = SetBackofficeFieldsWorkflowStatusItem()
3161
    setbo.parent = st1
3162
    setbo.fields = [
3163
        {'field_id': 'bo0', 'value': "=[['a1', 'a2'], ['b1', 'b2']]"},
3164
    ]
3165
    st1.items.append(setbo)
3166
    workflow.store()
3167

  
3168
    formdef = FormDef()
3169
    formdef.name = 'form title'
3170
    formdef.workflow_id = workflow.id
3171
    formdef.fields = []
3172
    formdef.store()
3173

  
3174
    app = login(get_app(pub))
3175
    resp = app.get('/backoffice/workflows/1/')
3176
    resp = resp.click('status1')
3177
    resp = resp.click('Backoffice Data')
3178

  
3179
    # check backoffice fields
3180
    value = "[['a1', 'a2'], ['b1', 'b2']]"
3181
    assert [x[0] for x
3182
            in resp.form['fields$element0$field_id'].options
3183
            if x[1] == True][0] == 'bo0'  # selected var
3184
    assert [x[0] for x
3185
            in resp.form['fields$element0$value$type'].options
3186
            if x[1] == True][0] == 'python'  # selected type
3187
    assert resp.form['fields$element0$value$value_python'].value == value
3188

  
3189
    # assert python expression is required for table fields
3190
    resp.form['fields$element0$value$value_python'].value = ''
3191
    resp = resp.form.submit('submit')
3192
    assert 'There were errors processing your form' in resp.text
3193
    assert 'Array fields require python expression' not in resp.text
3194

  
3195
    resp.form['fields$element0$value$type'] = 'text'
3196
    resp.form['fields$element0$value$value_text'].value = value
3197
    resp = resp.form.submit('submit')
3198
    assert 'There were errors processing your form' in resp.text
3199
    assert 'Array fields require python expression' in resp.text
3200

  
3201
    resp.form['fields$element0$value$type'] = 'template'
3202
    resp.form['fields$element0$value$value_template'].value = value
3203
    resp = resp.form.submit('submit')
3204
    assert 'There were errors processing your form' in resp.text
3205
    assert 'Array fields require python expression' in resp.text
3206

  
3207
    resp.form['fields$element0$value$type'] = 'python'
3208
    resp.form['fields$element0$value$value_python'].value = value
3209
    resp = resp.form.submit('submit')
3210
    assert 'There were errors processing your form' not in resp.text
3211

  
3145 3212
def test_workflows_functions(pub):
3146 3213
    create_superuser(pub)
3147 3214
    create_role()
wcs/admin/workflows.py
279 279
        if form.get_widget('cancel').parse():
280 280
            return redirect('..')
281 281

  
282
        if (not form.has_errors()
283
                and form._names.get('fields') and form._names['fields'].value):
284
            workflow =  self.item.parent.parent
285
            for bo_field in form._names['fields'].value or []:
286
                bo_field_type = [x.type for x
287
                                 in workflow.backoffice_fields_formdef.fields
288
                                 if x.id == bo_field['field_id']][0]
289
                if bo_field_type == 'table' and not bo_field['value'].startswith('='):
290
                    form.widgets[1].error = _('Array fields require python expression')
291

  
282 292
        if not form.get_submit() == 'submit' or form.has_errors():
283 293
            self.html_top('%s - %s' % (_('Workflow'), self.workflow.name))
284 294
            r = TemplateIO(html=True)
285
-