157 lines
5.3 KiB
Python
157 lines
5.3 KiB
Python
import io
|
|
|
|
import pytest
|
|
from quixote.http_request import Upload as QuixoteUpload
|
|
|
|
from wcs import fields
|
|
from wcs.formdef import FormDef
|
|
from wcs.qommon.form import UploadedFile
|
|
from wcs.qommon.http_request import HTTPRequest
|
|
from wcs.wf.create_formdata import Mapping
|
|
from wcs.workflows import Workflow, WorkflowBackofficeFieldsFormDef
|
|
|
|
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login
|
|
from .test_all import create_superuser
|
|
|
|
|
|
@pytest.fixture
|
|
def pub(emails):
|
|
pub = create_temporary_pub()
|
|
|
|
req = HTTPRequest(None, {'SCRIPT_NAME': '/', 'SERVER_NAME': 'example.net'})
|
|
pub.cfg['identification'] = {'methods': ['password']}
|
|
pub.cfg['language'] = {'language': 'en'}
|
|
pub.write_cfg()
|
|
pub.set_app_dir(req)
|
|
return pub
|
|
|
|
|
|
def teardown_module(module):
|
|
clean_temporary_pub()
|
|
|
|
|
|
def test_workflow_inspect_page(pub):
|
|
admin = create_superuser(pub)
|
|
|
|
workflow = Workflow(name='blah')
|
|
st1 = workflow.add_status('Status1')
|
|
jump = st1.add_action('jump', id='_jump')
|
|
jump.timeout = '=86400'
|
|
jump.status = 'finished'
|
|
workflow.store()
|
|
|
|
app = login(get_app(pub))
|
|
resp = app.get('/backoffice/workflows/%s/inspect' % workflow.id)
|
|
assert '=86400' in resp.text
|
|
|
|
jump.timeout = '82800'
|
|
workflow.store()
|
|
resp = app.get('/backoffice/workflows/%s/inspect' % workflow.id)
|
|
assert '23 hours' in resp.text
|
|
|
|
target_formdef = FormDef()
|
|
target_formdef.name = 'target form'
|
|
target_formdef.workflow_roles = {'_receiver': 1}
|
|
target_formdef.backoffice_submission_roles = admin.roles[:]
|
|
target_formdef.fields = [
|
|
fields.StringField(id='0', label='string', varname='foo_string'),
|
|
fields.FileField(id='1', label='file', type='file', varname='foo_file'),
|
|
]
|
|
|
|
st2 = workflow.add_status('Status2')
|
|
|
|
target_formdef.store()
|
|
create_formdata = st2.add_action('create_formdata', id='_create_formdata')
|
|
create_formdata.varname = 'resubmitted'
|
|
create_formdata.draft = True
|
|
create_formdata.formdef_slug = target_formdef.url_name
|
|
create_formdata.user_association_mode = 'keep-user'
|
|
create_formdata.backoffice_submission = True
|
|
create_formdata.mappings = [
|
|
Mapping(field_id='0', expression='=form_var_toto_string'),
|
|
Mapping(field_id='1', expression='=form_var_toto_file_raw'),
|
|
Mapping(field_id='2', expression='=form_var_foobar_raw'),
|
|
]
|
|
workflow.store()
|
|
|
|
resp = app.get('/backoffice/workflows/%s/inspect' % workflow.id)
|
|
assert (
|
|
'<ul class="mappings"><li>string → =form_var_toto_string</li>'
|
|
'<li>file → =form_var_toto_file_raw</li>'
|
|
'<li>#2 → =form_var_foobar_raw</li></ul>'
|
|
) in resp.text
|
|
|
|
workflow.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(workflow)
|
|
workflow.backoffice_fields_formdef.fields = [
|
|
fields.StringField(id='bo1', label='Foo Bar 1', varname='foo_bar'),
|
|
fields.StringField(id='bo2', label='Foo Bar 2', varname='foo_bar'),
|
|
fields.StringField(id='bo3', label='Foo Bar 3', varname='foo_bar'),
|
|
]
|
|
setbo = st2.add_action('set-backoffice-fields')
|
|
setbo.fields = [
|
|
{'field_id': 'bo1', 'value': 'go'},
|
|
{'field_id': 'bo2', 'value': ''},
|
|
{'field_id': 'bo3', 'value': None},
|
|
{'field_id': 'unknown', 'value': 'foobar'},
|
|
]
|
|
workflow.store()
|
|
resp = app.get('/backoffice/workflows/%s/inspect' % workflow.id)
|
|
assert (
|
|
'<ul class="fields"><li>Foo Bar 1 → go</li>'
|
|
'<li>Foo Bar 2 → </li>'
|
|
'<li>Foo Bar 3 → None</li>'
|
|
'<li>#unknown → foobar</li></ul>'
|
|
) in resp.text
|
|
|
|
st3 = workflow.add_status('Status3', 'st3')
|
|
export_to = st3.add_action('export_to_model', id='_export_to')
|
|
export_to.convert_to_pdf = False
|
|
export_to.label = 'create doc'
|
|
upload = QuixoteUpload('/foo/test.rtf', content_type='application/rtf')
|
|
upload.fp = io.BytesIO()
|
|
upload.fp.write(b'HELLO WORLD')
|
|
upload.fp.seek(0)
|
|
export_to.model_file = UploadedFile(pub.app_dir, None, upload)
|
|
export_to.by = ['_submitter']
|
|
workflow.store()
|
|
|
|
resp = app.get('/backoffice/workflows/%s/inspect' % workflow.id)
|
|
assert (
|
|
'<span class="parameter">Model:</span> '
|
|
'<a href="status/st3/items/_export_to/?file=model_file">test.rtf</a></li>'
|
|
) in resp.text
|
|
|
|
|
|
def test_workflow_user_roles_inspect_page(pub):
|
|
create_superuser(pub)
|
|
app = login(get_app(pub))
|
|
|
|
wf = Workflow(name='blah')
|
|
st1 = wf.add_status('New')
|
|
add_role = st1.add_action('add_role')
|
|
remove_role = st1.add_action('remove_role')
|
|
wf.store()
|
|
|
|
resp = app.get('/backoffice/workflows/%s/inspect' % wf.id)
|
|
assert '<span class="parameter">Role:</span>' not in resp
|
|
|
|
add_role.role_id = 'foobar'
|
|
remove_role.role_id = 'barfoo'
|
|
wf.store()
|
|
|
|
resp = app.get('/backoffice/workflows/%s/inspect' % wf.id)
|
|
assert '<span class="parameter">Role to Add:</span> unknown - foobar' in resp
|
|
assert '<span class="parameter">Role to Remove:</span> unknown - barfoo' in resp
|
|
|
|
role_a = pub.role_class(name='role A')
|
|
role_a.store()
|
|
role_b = pub.role_class(name='role B')
|
|
role_b.store()
|
|
add_role.role_id = role_a.id
|
|
remove_role.role_id = role_b.id
|
|
wf.store()
|
|
|
|
resp = app.get('/backoffice/workflows/%s/inspect' % wf.id)
|
|
assert '<span class="parameter">Role to Add:</span> role A' in resp
|
|
assert '<span class="parameter">Role to Remove:</span> role B' in resp
|