0001-workflows-allow-a-card-to-modify-itself-53789.patch
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 |
- |