Projet

Général

Profil

0001-misc-add-support-for-actions-on-cards-linked-via-ite.patch

Frédéric Péters, 27 juin 2022 16:09

Télécharger (5,71 ko)

Voir les différences:

Subject: [PATCH] misc: add support for actions on cards linked via items
 fields (#66648)

 tests/workflow/test_all.py | 90 ++++++++++++++++++++++++++++++++++++++
 wcs/formdata.py            | 17 ++++---
 2 files changed, 101 insertions(+), 6 deletions(-)
tests/workflow/test_all.py
6267 6267
    perform_items([delete_action], formdata)
6268 6268

  
6269 6269

  
6270
def test_call_external_workflow_with_items_data_sourced_object(two_pubs, admin_user):
6271
    FormDef.wipe()
6272
    CardDef.wipe()
6273

  
6274
    carddef_wf = Workflow(name='Carddef Workflow')
6275
    carddef_wf.add_status('status')
6276
    carddef_wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(carddef_wf)
6277
    carddef_wf.backoffice_fields_formdef.fields = [
6278
        StringField(id='bo0', varname='bo', type='string', label='bo variable'),
6279
    ]
6280
    update_action = carddef_wf.add_global_action('Update', 'ac1')
6281
    update_action.add_action('set-backoffice-fields')
6282
    setbo = update_action.items[0]
6283
    setbo.fields = [{'field_id': 'bo0', 'value': '{{ form_var_bo|default:"0"|add:1 }}'}]
6284
    trigger = update_action.append_trigger('webservice')
6285
    trigger.identifier = 'update'
6286
    carddef_wf.store()
6287

  
6288
    carddef = CardDef()
6289
    carddef.name = 'Data'
6290
    carddef.fields = [
6291
        StringField(id='0', label='string', varname='card_string'),
6292
    ]
6293
    carddef.digest_templates = {'default': '{{ form_var_card_string }}'}
6294
    carddef.workflow = carddef_wf
6295
    carddef.store()
6296

  
6297
    carddata = carddef.data_class()()
6298
    carddata.data = {'0': 'Text1'}
6299
    carddata.just_created()
6300
    carddata.store()
6301

  
6302
    carddata2 = carddef.data_class()()
6303
    carddata2.data = {'0': 'Text2'}
6304
    carddata2.just_created()
6305
    carddata2.store()
6306

  
6307
    carddata3 = carddef.data_class()()
6308
    carddata3.data = {'0': 'Text3'}
6309
    carddata3.just_created()
6310
    carddata3.store()
6311

  
6312
    wf = Workflow(name='External actions')
6313
    wf.add_status('Action')
6314

  
6315
    update_global_action = wf.add_global_action('Update linked object data')
6316
    update_action = update_global_action.add_action('external_workflow_global_action')
6317
    update_action.slug = 'carddef:%s' % carddef.url_name
6318
    update_action.trigger_id = 'action:update'
6319

  
6320
    wf.store()
6321

  
6322
    datasource = {'type': 'carddef:%s' % carddef.url_name}
6323
    formdef = FormDef()
6324
    formdef.name = 'External action form'
6325
    formdef.fields = [
6326
        ItemsField(id='0', label='Cards', type='items', varname='cards', data_source=datasource),
6327
        EmailField(id='1', label='Email', varname='email'),
6328
    ]
6329
    formdef.workflow = wf
6330
    formdef.store()
6331

  
6332
    assert carddef.data_class().count() == 3
6333

  
6334
    formdata = formdef.data_class()()
6335
    formdata.data = {'0': [str(carddata.id), str(carddata3.id)], '1': 'foo@example.com'}
6336
    formdata.data['0_display'] = formdef.fields[0].store_display_value(formdata.data, '1')
6337
    formdata.data['0_structured'] = formdef.fields[0].store_structured_value(formdata.data, '1')
6338
    formdata.store()
6339
    formdata.just_created()
6340
    formdata.perform_workflow()
6341

  
6342
    perform_items([update_action], formdata)
6343
    assert carddef.data_class().count() == 3
6344
    carddata.refresh_from_storage()
6345
    assert carddata.data['bo0'] == '1'
6346
    carddata2.refresh_from_storage()
6347
    assert not carddata2.data.get('bo0')
6348
    carddata3.refresh_from_storage()
6349
    assert carddata3.data['bo0'] == '1'
6350

  
6351
    perform_items([update_action], formdata)
6352
    carddata.refresh_from_storage()
6353
    assert carddata.data['bo0'] == '2'
6354
    carddata2.refresh_from_storage()
6355
    assert not carddata2.data.get('bo0')
6356
    carddata3.refresh_from_storage()
6357
    assert carddata3.data['bo0'] == '2'
6358

  
6359

  
6270 6360
def test_call_external_workflow_with_parent_object(pub):
6271 6361
    FormDef.wipe()
6272 6362
    CardDef.wipe()
wcs/formdata.py
1513 1513
            data_source = getattr(field, 'data_source', None)
1514 1514
            if not data_source:
1515 1515
                continue
1516
            if field.type == 'items':
1517
                linked_ids = linked_id
1518
            else:
1519
                linked_ids = [linked_id]
1516 1520
            data_source_type = data_source['type']
1517 1521
            if data_source_type.count(':') == 2:
1518 1522
                # custom view, only keep object type and object slug
......
1520 1524
            origin = _('Data Source')
1521 1525
            if field.varname:
1522 1526
                origin = '%s - varname "%s"' % (origin, field.varname)
1523
            if object_type:
1524
                # looking for a data_source of a specific type (workflow action)
1525
                if data_source_type == object_type:
1527
            for linked_id in linked_ids:
1528
                if object_type:
1529
                    # looking for a data_source of a specific type (workflow action)
1530
                    if data_source_type == object_type:
1531
                        data_ids.append((data_source_type, linked_id, origin))
1532
                else:
1533
                    # looking for any data_source (inspect page)
1526 1534
                    data_ids.append((data_source_type, linked_id, origin))
1527
            else:
1528
                # looking for any data_source (inspect page)
1529
                data_ids.append((data_source_type, linked_id, origin))
1530 1535

  
1531 1536
        # search in evolution
1532 1537
        for part in self.iter_evolution_parts():
1533
-