6158 |
6158 |
params = resp.form.submit_fields()
|
6159 |
6159 |
params = [(key, value if key != 'page_id' else 'eiuiu') for key, value in params]
|
6160 |
6160 |
app.post('/foo/live', params=params)
|
|
6161 |
|
|
6162 |
def test_unfeed_structured_list_when_condition_changes(pub):
|
|
6163 |
"""
|
|
6164 |
simulate selection of a structured list via condition on from,
|
|
6165 |
followed by an evaluation on workflow in order to get structured value
|
|
6166 |
from the selected list.
|
|
6167 |
ie: test unfeed on ConditionVars
|
|
6168 |
"""
|
|
6169 |
Workflow.wipe()
|
|
6170 |
workflow = Workflow(name='test')
|
|
6171 |
workflow.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(workflow)
|
|
6172 |
workflow.backoffice_fields_formdef.fields = [
|
|
6173 |
fields.StringField(
|
|
6174 |
id='bo1', label='first text', type='string', varname='both_text'),
|
|
6175 |
fields.StringField(
|
|
6176 |
id='bo2', label='first more', type='string', varname='both_more')
|
|
6177 |
]
|
|
6178 |
|
|
6179 |
st1 = workflow.add_status('Status1', 'st1')
|
|
6180 |
setbo = SetBackofficeFieldsWorkflowStatusItem()
|
|
6181 |
setbo.parent = st1
|
|
6182 |
setbo.fields = [
|
|
6183 |
{'field_id': 'bo1',
|
|
6184 |
'value': '{{ form_var_listA }} vs {{ form_var_listB }}'},
|
|
6185 |
{'field_id': 'bo2',
|
|
6186 |
'value': '{{ form_var_listA_more }} vs {{ form_var_listB_more }}'}
|
|
6187 |
]
|
|
6188 |
st1.items.append(setbo)
|
|
6189 |
workflow.store()
|
|
6190 |
|
|
6191 |
items_A = [{'id': '1', 'text': 'A1', 'more':'moreA1'}]
|
|
6192 |
items_B = [{'id': '1', 'text': 'B1', 'more':'moreB1'},
|
|
6193 |
{'id': '2', 'text': 'B2', 'more':'moreB2'}]
|
|
6194 |
formdef = create_formdef()
|
|
6195 |
formdef.fields = [
|
|
6196 |
fields.ItemField(id='1', varname='choice', items=['A', 'B'],
|
|
6197 |
type='item', label='list to choice'),
|
|
6198 |
fields.ItemField(id='2', varname='listA', type='item', label='list A',
|
|
6199 |
data_source={'type': 'formula', 'value': str(items_A)},
|
|
6200 |
condition={'type': 'python',
|
|
6201 |
'value': 'form_var_choice_raw == "A"'}),
|
|
6202 |
fields.ItemField(id='3', varname='listB', type='item', label='list B',
|
|
6203 |
data_source={'type': 'formula', 'value': str(items_B)},
|
|
6204 |
condition={'type': 'python',
|
|
6205 |
'value': 'form_var_choice_raw == "B"'})
|
|
6206 |
]
|
|
6207 |
formdef.confirmation = False
|
|
6208 |
formdef.workflow_id = workflow.id
|
|
6209 |
formdef.store()
|
|
6210 |
formdef.data_class().wipe()
|
|
6211 |
|
|
6212 |
create_user_and_admin(pub)
|
|
6213 |
resp = get_app(pub).get('/test/')
|
|
6214 |
|
|
6215 |
resp.form['f1'].value = 'B'
|
|
6216 |
resp.form['f2'].value = '1'
|
|
6217 |
resp.form['f3'].value = '2'
|
|
6218 |
|
|
6219 |
resp = resp.form.submit('submit').follow()
|
|
6220 |
assert 'The form has been recorded' in resp.body
|
|
6221 |
|
|
6222 |
assert formdef.data_class().count() == 1
|
|
6223 |
formdata = formdef.data_class().select()[0]
|
|
6224 |
assert formdata.data['1'] == 'B'
|
|
6225 |
assert formdata.data.get('2') is None
|
|
6226 |
assert formdata.data['3'] == '2'
|
|
6227 |
|
|
6228 |
assert formdata.data['bo1'] == 'None vs B2'
|
|
6229 |
assert formdata.data['bo2'] == ' vs moreB2'
|
|
6230 |
|
|
6231 |
def test_form_edit_and_backoffice_field_condition_change(pub):
|
|
6232 |
"""
|
|
6233 |
test unfeed on ConditionVars within edit context
|
|
6234 |
"""
|
|
6235 |
Workflow.wipe()
|
|
6236 |
workflow = Workflow(name='test')
|
|
6237 |
workflow.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(workflow)
|
|
6238 |
workflow.backoffice_fields_formdef.fields = [
|
|
6239 |
fields.StringField(
|
|
6240 |
id='bo1', label='both text', type='string', varname='both_text'),
|
|
6241 |
fields.StringField(
|
|
6242 |
id='bo2', label='both more', type='string', varname='both_more')
|
|
6243 |
]
|
|
6244 |
|
|
6245 |
st1 = workflow.add_status('Status1', 'st1')
|
|
6246 |
setbo = SetBackofficeFieldsWorkflowStatusItem()
|
|
6247 |
setbo.parent = st1
|
|
6248 |
setbo.fields = [
|
|
6249 |
{'field_id': 'bo1',
|
|
6250 |
'value': '{{ form_var_listA }} vs {{ form_var_listB }}'},
|
|
6251 |
{'field_id': 'bo2',
|
|
6252 |
'value': '{{ form_var_listA_more }} vs {{ form_var_listB_more }}'}
|
|
6253 |
]
|
|
6254 |
editable = EditableWorkflowStatusItem()
|
|
6255 |
editable.id = '_editable'
|
|
6256 |
editable.by = ['_submitter']
|
|
6257 |
editable.parent = st1
|
|
6258 |
editable.status = st1.id
|
|
6259 |
st1.items = [setbo, editable]
|
|
6260 |
workflow.store()
|
|
6261 |
|
|
6262 |
items_A = [{'id': '1', 'text': 'A1', 'more':'moreA1'}]
|
|
6263 |
items_B = [{'id': '1', 'text': 'B1', 'more':'moreB1'},
|
|
6264 |
{'id': '2', 'text': 'B2', 'more':'moreB2'}]
|
|
6265 |
formdef = create_formdef()
|
|
6266 |
formdef.fields = [
|
|
6267 |
fields.ItemField(id='1', varname='choice', items=['A', 'B'],
|
|
6268 |
type='item', label='list to choice'),
|
|
6269 |
fields.ItemField(id='2', varname='listA', type='item', label='list A',
|
|
6270 |
data_source={'type': 'formula', 'value': str(items_A)},
|
|
6271 |
condition={'type': 'python',
|
|
6272 |
'value': 'form_var_choice_raw == "A"'}),
|
|
6273 |
fields.ItemField(id='3', varname='listB', type='item', label='list B',
|
|
6274 |
data_source={'type': 'formula', 'value': str(items_B)},
|
|
6275 |
condition={'type': 'python',
|
|
6276 |
'value': 'form_var_choice_raw == "B"'})
|
|
6277 |
]
|
|
6278 |
formdef.confirmation = False
|
|
6279 |
formdef.workflow_id = workflow.id
|
|
6280 |
formdef.store()
|
|
6281 |
formdef.data_class().wipe()
|
|
6282 |
|
|
6283 |
create_user(pub)
|
|
6284 |
resp = login(get_app(pub), username='foo', password='foo').get('/test/')
|
|
6285 |
|
|
6286 |
resp.form['f1'].value = 'B'
|
|
6287 |
resp.form['f2'].value = '1'
|
|
6288 |
resp.form['f3'].value = '2'
|
|
6289 |
|
|
6290 |
resp = resp.form.submit('submit').follow()
|
|
6291 |
assert 'The form has been recorded' in resp.body
|
|
6292 |
|
|
6293 |
assert formdef.data_class().count() == 1
|
|
6294 |
formdata = formdef.data_class().select()[0]
|
|
6295 |
assert formdata.data['1'] == 'B'
|
|
6296 |
assert formdata.data.get('2') is None
|
|
6297 |
assert formdata.data['3'] == '2'
|
|
6298 |
|
|
6299 |
# check unfeed on FormPage::submitted()
|
|
6300 |
assert formdata.data['bo1'] == 'None vs B2'
|
|
6301 |
assert formdata.data['bo2'] == ' vs moreB2'
|
|
6302 |
|
|
6303 |
app = login(get_app(pub), username='foo', password='foo')
|
|
6304 |
resp = app.get('/test/%s/' % formdata.id)
|
|
6305 |
assert 'button_editable-button' in resp.body
|
|
6306 |
|
|
6307 |
resp = resp.form.submit('button_editable').follow()
|
|
6308 |
assert resp.form['f1'].value == 'B'
|
|
6309 |
resp.form['f1'].value = 'A'
|
|
6310 |
resp = resp.form.submit('submit').follow() # -> saved
|
|
6311 |
assert 'The form has been recorded' in resp.body
|
|
6312 |
|
|
6313 |
assert formdef.data_class().count() == 1
|
|
6314 |
formdata = formdef.data_class().select()[0]
|
|
6315 |
assert formdata.data['1'] == 'A'
|
|
6316 |
assert formdata.data['2'] == '1'
|
|
6317 |
assert formdata.data.get('3') is None
|
|
6318 |
|
|
6319 |
# check unfeed on FormPage::submitted_existing()
|
|
6320 |
assert formdata.data['bo1'] == 'A1 vs None'
|
|
6321 |
assert formdata.data['bo2'] == 'moreA1 vs '
|