Projet

Général

Profil

0001-workflows-allow-a-card-to-modify-itself-53789.patch

Thomas Noël, 06 mai 2021 00:22

Télécharger (2,9 ko)

Voir les différences:

Subject: [PATCH] workflows: allow a card to modify itself (#53789)

 tests/test_workflows.py | 51 +++++++++++++++++++++++++++++++++++++++++
 wcs/wf/edit_carddata.py |  5 ++++
 2 files changed, 56 insertions(+)
tests/test_workflows.py
6915 6915
    assert carddef.data_class().get(7).data['2'] == '3'
6916 6916

  
6917 6917

  
6918
def test_edit_carddata_targeting_itself(pub):
6919
    CardDef.wipe()
6920
    carddef = CardDef()
6921
    carddef.name = 'Foo Card'
6922
    carddef.fields = [
6923
        StringField(id='0', label='foo', varname='foo'),
6924
    ]
6925
    carddef.store()
6926
    carddef.data_class().wipe()
6927

  
6928
    # card workflow: update itself then jump to second status
6929
    card_wf = Workflow(name='Card workflow')
6930
    st1 = card_wf.add_status('Status1')
6931
    st2 = card_wf.add_status('Status2')
6932

  
6933
    edit = EditCarddataWorkflowStatusItem()
6934
    edit.id = '_edit'
6935
    edit.formdef_slug = carddef.url_name
6936
    edit.target_mode = 'manual'
6937
    edit.target_id = '{{ form_internal_id }}'  # itself
6938
    edit.mappings = [
6939
        Mapping(field_id='0', expression='bar {{ form_internal_id }}'),
6940
    ]
6941
    edit.parent = st1
6942
    st1.items.append(edit)
6943

  
6944
    jump = JumpWorkflowStatusItem()
6945
    jump.id = '_jump'
6946
    jump.status = st2.id
6947
    st1.items.append(jump)
6948
    jump.parent = st1
6949

  
6950
    card_wf.store()
6951

  
6952
    carddef.workflow = card_wf
6953
    carddef.store()
6954

  
6955
    # create some cardata
6956
    for i in range(1, 4):
6957
        carddata = carddef.data_class()()
6958
        carddata.data = {
6959
            '0': 'foo %s' % i,
6960
        }
6961
        carddata.store()
6962
        # run workflow, verify that carddata is modified
6963
        carddata.just_created()
6964
        carddata.perform_workflow()
6965
        assert carddata.data['0'] == 'bar %s' % carddata.id
6966
        assert carddata.status == 'wf-%s' % st2.id
6967

  
6968

  
6918 6969
def test_edit_carddata_from_created_object(pub):
6919 6970
    FormDef.wipe()
6920 6971
    CardDef.wipe()
wcs/wf/edit_carddata.py
47 47
        if not carddef:
48 48
            return
49 49

  
50
        formdata.store()
51

  
50 52
        for target_data in self.iter_target_datas(formdata, carddef):
51 53
            self.apply_mappings(dest=target_data, src=formdata)
52 54
            with get_publisher().substitutions.freeze():
53 55
                target_data.store()
54 56

  
57
        # update local object as it may have modified itself
58
        formdata.refresh_from_storage()
59

  
55 60

  
56 61
register_item_class(EditCarddataWorkflowStatusItem)
57
-