misc: handle workflow's form file attachments like those of forms (#75525) #172

Merged
bdauvergne merged 1 commits from wip/75525-Fichiers-attaches-venant-d-un-bl into main 2023-04-20 20:22:38 +02:00
2 changed files with 40 additions and 12 deletions

View File

@ -9879,7 +9879,6 @@ def test_workflow_form_file_access(pub):
wf = Workflow(name='test')
status = wf.add_status('New', 'st1')
next_status = wf.add_status('Next', 'st2')
status.items = []
display_form = status.add_action('form', id='_display_form')
@ -9893,15 +9892,23 @@ def test_workflow_form_file_access(pub):
]
jump = status.add_action('jumponsubmit', id='_jump')
jump.status = next_status.id
jump.status = status.id
register_comment = next_status.add_action('register-comment', id='_register')
register_comment.comment = '''<p>
<a href="{{ form_workflow_form_blah_var_fooblock_0_test_url }}" id="t1">1st file in block</a>
<a href="{{ form_workflow_form_blah_var_fooblock_1_test_url }}" id="t2">2nd file in block</a>
<a href="{{ form_workflow_form_blah_0_var_fooblock_0_test_url }}" id="t3">again 1st file in block</a>
<a href="{{ form_workflow_form_blah_0_var_file_url }}" id="t4">file field</a>
display_message = status.add_action('displaymsg', id='_display')
display_message.message = '''<p>
<a href="{{ form_workflow_form_blah_var_fooblock_0_test_url }}" id="t1">1st file in block for last form</a>
<a href="{{ form_workflow_form_blah_var_fooblock_1_test_url }}" id="t2">2nd file in block for last form</a>
<a href="{{ form_workflow_form_blah_var_file_url }}" id="t3">file field for last form</a>
<a href="{{ form_workflow_form_blah_0_var_fooblock_0_test_url }}" id="t4">again 1st file in block for 1st form</a>
<a href="{{ form_workflow_form_blah_0_var_fooblock_1_test_url }}" id="t5">again 1st file in block for 1st form</a>
<a href="{{ form_workflow_form_blah_0_var_file_url }}" id="t6">file field for 1st form</a>
<a href="{{ form_workflow_form_blah_1_var_fooblock_0_test_url }}" id="t7">again 1st file in block for 2nd form</a>
<a href="{{ form_workflow_form_blah_1_var_fooblock_1_test_url }}" id="t8">again 1st file in block for 2nd form</a>
<a href="{{ form_workflow_form_blah_1_var_file_url }}" id="t9">file field< for 2nd form/a>
</p>'''
display_message.to = []
wf.store()
@ -9924,10 +9931,32 @@ def test_workflow_form_file_access(pub):
resp.form['fblah_1$element1$f123$file'] = Upload('test2.txt', b'foobar2', 'text/plain')
resp.form['fblah_2$file'] = Upload('test3.txt', b'foobar3', 'text/plain')
resp = resp.form.submit('submit').follow()
assert app.get(resp.pyquery('#t1').attr.href).body == b'foobar1'
assert app.get(resp.pyquery('#t2').attr.href).body == b'foobar2'
assert app.get(resp.pyquery('#t3').attr.href).body == b'foobar1'
assert app.get(resp.pyquery('#t4').attr.href).body == b'foobar3'
assert app.get(resp.pyquery('#t3').attr.href).body == b'foobar3'
assert app.get(resp.pyquery('#t4').attr.href).body == b'foobar1'
assert app.get(resp.pyquery('#t5').attr.href).body == b'foobar2'
assert app.get(resp.pyquery('#t6').attr.href).body == b'foobar3'
resp.form['fblah_1$element0$f123$file'] = Upload('test4.txt', b'foobar4', 'text/plain')
resp = resp.form.submit('fblah_1$add_element')
resp.form['fblah_1$element1$f123$file'] = Upload('test5.txt', b'foobar5', 'text/plain')
resp.form['fblah_2$file'] = Upload('test6.txt', b'foobar6', 'text/plain')
resp = resp.form.submit('submit').follow()
# afer second submit of workflow form, general variable
# form_workflow_form_blah_var contains the last submitted form values
assert app.get(resp.pyquery('#t1').attr.href).body == b'foobar4'
assert app.get(resp.pyquery('#t2').attr.href).body == b'foobar5'
assert app.get(resp.pyquery('#t3').attr.href).body == b'foobar6'
assert app.get(resp.pyquery('#t4').attr.href).body == b'foobar1'
assert app.get(resp.pyquery('#t5').attr.href).body == b'foobar2'
assert app.get(resp.pyquery('#t6').attr.href).body == b'foobar3'
assert app.get(resp.pyquery('#t7').attr.href).body == b'foobar4'
assert app.get(resp.pyquery('#t8').attr.href).body == b'foobar5'
assert app.get(resp.pyquery('#t9').attr.href).body == b'foobar6'
app.get(resp.pyquery('#t4').attr.href + 'X', status=404) # wrong URL, unknown file
# unlogged user

View File

@ -432,8 +432,7 @@ class FormData(StorableObject):
yield part
elif isinstance(part, WorkflowFormEvolutionPart):
for field_data in (part.data or {}).values():
if misc.is_upload(field_data):
yield field_data
yield from check_field_data(field_data)
elif isinstance(part, ContentSnapshotPart):
# look into old and new values (belt and suspenders)
for field_data in list((part.old_data or {}).values()) + list((part.new_data or {}).values()):