misc: allow downloading file from workflow options (#74271) #593
|
@ -1023,6 +1023,50 @@ def test_form_workflow_table_variables(pub):
|
|||
assert resp.form['f2'].value == 'foobar'
|
||||
|
||||
|
||||
def test_form_workflow_file_variable(pub):
|
||||
create_superuser(pub)
|
||||
create_role(pub)
|
||||
|
||||
FormDef.wipe()
|
||||
Workflow.wipe()
|
||||
|
||||
workflow = Workflow(name='Workflow One')
|
||||
workflow.variables_formdef = WorkflowVariablesFieldsFormDef(workflow=workflow)
|
||||
workflow.variables_formdef.fields = [fields.FileField(id='1', varname='test', label='Test')]
|
||||
workflow.store()
|
||||
|
||||
formdef = FormDef()
|
||||
formdef.name = 'form title'
|
||||
formdef.fields = []
|
||||
formdef.store()
|
||||
formdef.workflow_id = workflow.id
|
||||
formdef.store()
|
||||
|
||||
app = login(get_app(pub))
|
||||
resp = app.get('/backoffice/forms/1/workflow-variables')
|
||||
resp.forms[0]['f1$file'] = Upload('test.txt', b'foobar', 'text/plain')
|
||||
resp = resp.forms[0].submit('submit')
|
||||
|
||||
formdef.refresh_from_storage()
|
||||
assert formdef.workflow_options['test'].get_content() == b'foobar'
|
||||
|
||||
# simulate ajax upload
|
||||
resp = app.get('/backoffice/forms/1/workflow-variables')
|
||||
resp.forms[0]['f1$file'] = Upload('test.txt', b'barfoo', 'text/plain')
|
||||
upload_url = resp.form['f1$file'].attrs['data-url']
|
||||
upload_resp = app.post(upload_url, params=resp.form.submit_fields())
|
||||
resp.form['f1$file'] = None
|
||||
resp.form['f1$token'] = upload_resp.json[0]['token']
|
||||
resp = resp.forms[0].submit('submit')
|
||||
|
||||
formdef.refresh_from_storage()
|
||||
assert formdef.workflow_options['test'].get_content() == b'barfoo'
|
||||
|
||||
# check file can be downloaded
|
||||
resp = app.get('/backoffice/forms/1/workflow-variables')
|
||||
assert resp.click('test.txt').body == b'barfoo'
|
||||
|
||||
|
||||
def test_form_workflow_invalid_file_variable(pub):
|
||||
create_superuser(pub)
|
||||
create_role(pub)
|
||||
|
|
|
@ -35,6 +35,7 @@ from wcs.formdef import (
|
|||
FormdefImportRecoverableError,
|
||||
UpdateDigestAfterJob,
|
||||
)
|
||||
from wcs.forms.common import TempfileDirectoryMixin
|
||||
from wcs.forms.root import qrcode
|
||||
from wcs.qommon import _, force_str, misc, pgettext_lazy, template
|
||||
from wcs.qommon.afterjobs import AfterJob
|
||||
|
@ -576,7 +577,7 @@ class WorkflowRoleDirectory(Directory):
|
|||
return redirect('..')
|
||||
|
||||
|
||||
class FormDefPage(Directory):
|
||||
class FormDefPage(Directory, TempfileDirectoryMixin):
|
||||
do_not_call_in_templates = True
|
||||
_q_exports = [
|
||||
'',
|
||||
|
@ -598,6 +599,7 @@ class FormDefPage(Directory):
|
|||
'qrcode',
|
||||
'information',
|
||||
'inspect',
|
||||
'tempfile',
|
||||
'tests',
|
||||
('public-url', 'public_url'),
|
||||
('backoffice-submission-roles', 'backoffice_submission_roles'),
|
||||
|
|
|
@ -42,7 +42,7 @@ from wcs.conditions import Condition
|
|||
from wcs.formdata import FormData, NoContentSnapshotAt
|
||||
from wcs.formdef import FormDef, UpdateDigestAfterJob
|
||||
from wcs.forms.backoffice import FormDefUI
|
||||
from wcs.forms.common import FormdefDirectoryBase, FormStatusPage
|
||||
from wcs.forms.common import FormStatusPage, TempfileDirectoryMixin
|
||||
from wcs.roles import get_user_roles, logged_users_role
|
||||
from wcs.sql_criterias import (
|
||||
And,
|
||||
|
@ -759,7 +759,7 @@ class ManagementDirectory(Directory):
|
|||
return FormPage(component)
|
||||
|
||||
|
||||
class FormPage(FormdefDirectoryBase):
|
||||
class FormPage(Directory, TempfileDirectoryMixin):
|
||||
do_not_call_in_templates = True
|
||||
_q_exports = [
|
||||
'',
|
||||
|
|
|
@ -1014,9 +1014,12 @@ class FormStatusPage(Directory, FormTemplateMixin):
|
|||
raise errors.AccessForbiddenError()
|
||||
|
||||
|
||||
class FormdefDirectoryBase(Directory):
|
||||
class TempfileDirectoryMixin:
|
||||
user = None
|
||||
|
||||
def check_access(self):
|
||||
pass
|
||||
|
||||
def tempfile(self):
|
||||
get_request().ignore_session = True
|
||||
self.check_access()
|
||||
|
|
|
@ -37,7 +37,7 @@ from wcs.categories import Category
|
|||
from wcs.fields import MissingBlockFieldError, SetValueError
|
||||
from wcs.formdata import Evolution, FormData
|
||||
from wcs.formdef import FormDef
|
||||
from wcs.forms.common import FormdefDirectoryBase, FormStatusPage, FormTemplateMixin
|
||||
from wcs.forms.common import FormStatusPage, FormTemplateMixin, TempfileDirectoryMixin
|
||||
from wcs.qommon.admin.texts import TextsDirectory
|
||||
from wcs.qommon.storage import NothingToUpdate
|
||||
from wcs.roles import logged_users_role
|
||||
|
@ -253,7 +253,7 @@ class TrackingCodesDirectory(Directory):
|
|||
return TrackingCodeDirectory(component, self.formdef)
|
||||
|
||||
|
||||
class FormPage(FormdefDirectoryBase, FormTemplateMixin):
|
||||
class FormPage(Directory, TempfileDirectoryMixin, FormTemplateMixin):
|
||||
_q_exports = [
|
||||
'',
|
||||
'tempfile',
|
||||
|
|
Loading…
Reference in New Issue