42 |
42 |
from wcs.wf.form import FormWorkflowStatusItem, WorkflowFormFieldsFormDef
|
43 |
43 |
from wcs.wf.register_comment import RegisterCommenterWorkflowStatusItem
|
44 |
44 |
from wcs.wf.resubmit import ResubmitWorkflowStatusItem
|
|
45 |
from wcs.wf.create_formdata import CreateFormdataWorkflowStatusItem, Mapping
|
|
46 |
from wcs.wf.redirect_to_url import RedirectToUrlWorkflowStatusItem
|
45 |
47 |
from wcs.categories import Category
|
46 |
48 |
from wcs.roles import Role, logged_users_role
|
47 |
49 |
from wcs.tracking_code import TrackingCode
|
... | ... | |
7105 |
7107 |
|
7106 |
7108 |
resp = resp.form.submit('button_x2').follow()
|
7107 |
7109 |
assert '<span class="status">Status2' in resp.text
|
|
7110 |
|
|
7111 |
|
|
7112 |
@pytest.fixture
|
|
7113 |
def create_formdata(pub):
|
|
7114 |
class Fixture:
|
|
7115 |
pub = pub
|
|
7116 |
source_formdef = FormDef()
|
|
7117 |
source_formdef.name = 'source form'
|
|
7118 |
source_formdef.fields = [
|
|
7119 |
fields.StringField(id='0', label='string', varname='toto_string'),
|
|
7120 |
fields.FileField(id='1', label='file', type='file', varname='toto_file'),
|
|
7121 |
]
|
|
7122 |
source_formdef.store()
|
|
7123 |
|
|
7124 |
target_formdef = FormDef()
|
|
7125 |
target_formdef.name = 'target form'
|
|
7126 |
target_formdef.enable_tracking_codes = True
|
|
7127 |
target_formdef.fields = [
|
|
7128 |
fields.StringField(id='0', label='string', varname='foo_string'),
|
|
7129 |
fields.FileField(id='1', label='file', type='file', varname='foo_file'),
|
|
7130 |
]
|
|
7131 |
target_formdef.store()
|
|
7132 |
wf = Workflow(name='create-formdata')
|
|
7133 |
|
|
7134 |
st1 = wf.add_status('New')
|
|
7135 |
st2 = wf.add_status('Resubmit')
|
|
7136 |
|
|
7137 |
jump = ChoiceWorkflowStatusItem()
|
|
7138 |
jump.id = '_resubmit'
|
|
7139 |
jump.label = 'Resubmit'
|
|
7140 |
jump.by = ['_submitter']
|
|
7141 |
jump.status = st2.id
|
|
7142 |
jump.parent = st1
|
|
7143 |
st1.items.append(jump)
|
|
7144 |
|
|
7145 |
create_formdata = CreateFormdataWorkflowStatusItem()
|
|
7146 |
create_formdata.id = '_create_formdata'
|
|
7147 |
create_formdata.formdef_slug = target_formdef.url_name
|
|
7148 |
create_formdata.mappings = [
|
|
7149 |
Mapping(varname='foo_string', expression='=form_var_toto_string'),
|
|
7150 |
Mapping(varname='foo_file', expression='=form_var_toto_file_raw'),
|
|
7151 |
]
|
|
7152 |
create_formdata.parent = st2
|
|
7153 |
st2.items.append(create_formdata)
|
|
7154 |
|
|
7155 |
redirect = RedirectToUrlWorkflowStatusItem()
|
|
7156 |
redirect.id = '_redirect'
|
|
7157 |
redirect.url = '{{ linked.url }}'
|
|
7158 |
redirect.parent = st2
|
|
7159 |
st2.items.append(redirect)
|
|
7160 |
|
|
7161 |
jump = JumpOnSubmitWorkflowStatusItem()
|
|
7162 |
jump.id = '_jump'
|
|
7163 |
jump.status = st1.id
|
|
7164 |
jump.parent = st2
|
|
7165 |
st2.items.append(jump)
|
|
7166 |
|
|
7167 |
wf.store()
|
|
7168 |
source_formdef.workflow_id = wf.id
|
|
7169 |
source_formdef.store()
|
|
7170 |
return Fixture
|
|
7171 |
|
|
7172 |
|
|
7173 |
def test_create_formdata_anonymous(create_formdata):
|
|
7174 |
create_formdata.source_formdef.data_class().wipe()
|
|
7175 |
create_formdata.target_formdef.data_class().wipe()
|
|
7176 |
|
|
7177 |
app = get_app(create_formdata.pub)
|
|
7178 |
resp = app.get('/source-form/')
|
|
7179 |
resp.form['f0'] = 'zob'
|
|
7180 |
resp.form['f1$file'] = Upload('test.txt', b'foobar', 'text/plain')
|
|
7181 |
resp = resp.form.submit('submit') # -> validation
|
|
7182 |
resp = resp.form.submit('submit') # -> submission
|
|
7183 |
resp = resp.follow()
|
|
7184 |
assert create_formdata.target_formdef.data_class().count() == 0
|
|
7185 |
resp = resp.form.submit('button_resubmit')
|
|
7186 |
assert create_formdata.target_formdef.data_class().count() == 1
|
|
7187 |
assert create_formdata.target_formdef.data_class().select()[0].data.get('0') == 'zob'
|
|
7188 |
|
|
7189 |
assert create_formdata.target_formdef.data_class().select()[0].data.get('1').get_content() == b'foobar'
|
|
7190 |
assert create_formdata.target_formdef.data_class().select()[0].status == 'draft'
|
|
7191 |
assert create_formdata.target_formdef.data_class().select()[0].submission_context == {
|
|
7192 |
'orig_formdata_id': create_formdata.source_formdef.data_class().select()[0].id,
|
|
7193 |
'orig_formdef_id': create_formdata.source_formdef.id,
|
|
7194 |
}
|
|
7195 |
|
|
7196 |
resp = resp.follow()
|
|
7197 |
resp = resp.follow()
|
|
7198 |
assert 'zob' in resp
|
|
7199 |
resp = resp.forms[1].submit('submit') # -> validation
|
|
7200 |
resp = resp.forms[1].submit('submit') # -> submission
|
|
7201 |
assert create_formdata.target_formdef.data_class().count() == 1
|
|
7202 |
assert create_formdata.target_formdef.data_class().select()[0].data.get('1').get_content() == b'foobar'
|
|
7203 |
assert create_formdata.target_formdef.data_class().select()[0].data.get('1').get_content() == b'foobar'
|
|
7204 |
assert create_formdata.target_formdef.data_class().select()[0].status == 'wf-new'
|
7108 |
|
-
|