0002-workflow-prefix-fields-in-FormWorkflowStatusItem-138.patch
tests/backoffice_pages/test_all.py | ||
---|---|---|
3654 | 3654 |
break |
3655 | 3655 |
app = login(get_app(pub)) |
3656 | 3656 |
resp = app.get(formdata.get_url(backoffice=True)) |
3657 |
assert 'f1' in resp.form.fields |
|
3658 |
resp.form['f1'] = 'blah' |
|
3657 |
assert 'fblah_1' in resp.form.fields
|
|
3658 |
resp.form['fblah_1'] = 'blah'
|
|
3659 | 3659 |
# don't fill required radio button |
3660 | 3660 |
resp = resp.form.submit('submit') |
3661 | 3661 |
assert formdef.data_class().get(formdata.id).status == 'wf-new' |
3662 | 3662 |
assert 'There were errors processing your form.' in resp.text |
3663 |
resp.form['f2'] = 'c' |
|
3663 |
resp.form['fblah_2'] = 'c'
|
|
3664 | 3664 |
resp = resp.form.submit('submit') |
3665 | 3665 |
assert formdef.data_class().get(formdata.id).status == 'wf-accepted' |
3666 | 3666 |
assert formdef.data_class().get(formdata.id).workflow_data == { |
... | ... | |
3704 | 3704 |
break |
3705 | 3705 |
app = login(get_app(pub)) |
3706 | 3706 |
resp = app.get(formdata.get_url(backoffice=True)) |
3707 |
assert 'f1' in resp.form.fields |
|
3708 |
assert 'f2' in resp.form.fields |
|
3707 |
assert 'fblah_1' in resp.form.fields
|
|
3708 |
assert 'fblah_2' in resp.form.fields
|
|
3709 | 3709 | |
3710 | 3710 |
# check with static condition |
3711 | 3711 |
display_form.formdef.fields = [ |
... | ... | |
3717 | 3717 |
wf.store() |
3718 | 3718 | |
3719 | 3719 |
resp = login(get_app(pub)).get(formdata.get_url(backoffice=True)) |
3720 |
assert 'f1' in resp.form.fields |
|
3721 |
assert 'f2' not in resp.form.fields |
|
3720 |
assert 'fblah_1' in resp.form.fields
|
|
3721 |
assert 'fblah_2' not in resp.form.fields
|
|
3722 | 3722 | |
3723 | 3723 |
# check condition based on formdata |
3724 | 3724 |
display_form.formdef.fields = [ |
... | ... | |
3730 | 3730 |
wf.store() |
3731 | 3731 | |
3732 | 3732 |
resp = login(get_app(pub)).get(formdata.get_url(backoffice=True)) |
3733 |
assert 'f1' in resp.form.fields |
|
3734 |
assert 'f2' in resp.form.fields |
|
3733 |
assert 'fblah_1' in resp.form.fields
|
|
3734 |
assert 'fblah_2' in resp.form.fields
|
|
3735 | 3735 | |
3736 | 3736 |
display_form.formdef.fields = [ |
3737 | 3737 |
fields.StringField(id='1', label='Test', varname='str', type='string', required=True), |
... | ... | |
3742 | 3742 |
wf.store() |
3743 | 3743 | |
3744 | 3744 |
resp = login(get_app(pub)).get(formdata.get_url(backoffice=True)) |
3745 |
assert 'f1' in resp.form.fields |
|
3746 |
assert 'f2' in resp.form.fields |
|
3745 |
assert 'fblah_1' in resp.form.fields
|
|
3746 |
assert 'fblah_2' in resp.form.fields
|
|
3747 | 3747 | |
3748 | 3748 |
# check with live conditions |
3749 | 3749 |
display_form.formdef.fields = [ |
... | ... | |
3755 | 3755 |
wf.store() |
3756 | 3756 | |
3757 | 3757 |
resp = login(get_app(pub)).get(formdata.get_url(backoffice=True)) |
3758 |
assert 'f1' in resp.form.fields |
|
3759 |
assert 'f2' in resp.form.fields |
|
3760 |
assert resp.html.find('div', {'data-field-id': '1'}).attrs['data-live-source'] == 'true' |
|
3761 |
assert resp.html.find('div', {'data-field-id': '2'}).attrs.get('style') == 'display: none' |
|
3758 |
assert 'fblah_1' in resp.form.fields
|
|
3759 |
assert 'fblah_2' in resp.form.fields
|
|
3760 |
assert resp.html.find('div', {'data-field-id': 'blah_1'}).attrs['data-live-source'] == 'true'
|
|
3761 |
assert resp.html.find('div', {'data-field-id': 'blah_2'}).attrs.get('style') == 'display: none'
|
|
3762 | 3762 |
live_url = resp.html.find('form').attrs['data-live-url'] |
3763 | 3763 |
assert '/backoffice/' in live_url |
3764 |
resp.form['f1'] = '' |
|
3764 |
resp.form['fblah_1'] = ''
|
|
3765 | 3765 |
live_resp = app.post(live_url, params=resp.form.submit_fields()) |
3766 |
assert live_resp.json['result']['1']['visible'] |
|
3767 |
assert not live_resp.json['result']['2']['visible'] |
|
3766 |
assert live_resp.json['result']['blah_1']['visible']
|
|
3767 |
assert not live_resp.json['result']['blah_2']['visible']
|
|
3768 | 3768 | |
3769 |
resp.form['f1'] = 'xxx' |
|
3769 |
resp.form['fblah_1'] = 'xxx'
|
|
3770 | 3770 |
live_resp = app.post(live_url, params=resp.form.submit_fields()) |
3771 |
assert live_resp.json['result']['1']['visible'] |
|
3772 |
assert live_resp.json['result']['2']['visible'] |
|
3771 |
assert live_resp.json['result']['blah_1']['visible']
|
|
3772 |
assert live_resp.json['result']['blah_2']['visible']
|
|
3773 | 3773 | |
3774 | 3774 |
# check submit doesn't work |
3775 | 3775 |
resp = resp.form.submit('submit') |
3776 | 3776 |
assert 'There were errors processing your form.' in resp.text |
3777 | 3777 | |
3778 |
resp.form['f1'] = 'xxx2' |
|
3778 |
resp.form['fblah_1'] = 'xxx2'
|
|
3779 | 3779 |
live_resp = app.post(live_url, params=resp.form.submit_fields()) |
3780 |
assert live_resp.json['result']['1']['visible'] |
|
3781 |
assert not live_resp.json['result']['2']['visible'] |
|
3780 |
assert live_resp.json['result']['blah_1']['visible']
|
|
3781 |
assert not live_resp.json['result']['blah_2']['visible']
|
|
3782 | 3782 | |
3783 | 3783 |
# check submit does work when second field is hidden |
3784 | 3784 |
resp = resp.form.submit('submit').follow() |
... | ... | |
3832 | 3832 |
urlopen.side_effect = side_effect |
3833 | 3833 | |
3834 | 3834 |
resp = login(app).get(formdata.get_url(backoffice=True)) |
3835 |
assert 'f1' in resp.form.fields |
|
3836 |
assert 'f2' in resp.form.fields |
|
3837 |
assert resp.form.fields['f2'][0].options == [(u'A', False, u'hello'), (u'B', False, u'world')] |
|
3835 |
assert 'fblah_1' in resp.form.fields
|
|
3836 |
assert 'fblah_2' in resp.form.fields
|
|
3837 |
assert resp.form.fields['fblah_2'][0].options == [(u'A', False, u'hello'), (u'B', False, u'world')]
|
|
3838 | 3838 | |
3839 | 3839 |
live_url = resp.html.find('form').attrs['data-live-url'] |
3840 |
resp.form['f1'] = 'toto' |
|
3841 |
live_resp = app.post(live_url + '?modified_field_id=1', params=resp.form.submit_fields()) |
|
3842 |
assert live_resp.json['result']['2']['items'] == [{u'text': u'hello', u'id': u'C'}, {u'text': u'world', u'id': u'D'}] |
|
3840 |
resp.form['fblah_1'] = 'toto'
|
|
3841 |
live_resp = app.post(live_url + '?modified_field_id=blah_1', params=resp.form.submit_fields())
|
|
3842 |
assert live_resp.json['result']['blah_2']['items'] == [{u'text': u'hello', u'id': u'C'}, {u'text': u'world', u'id': u'D'}]
|
|
3843 | 3843 | |
3844 | 3844 | |
3845 | 3845 |
def test_backoffice_criticality_in_formdef_listing(pub): |
... | ... | |
5211 | 5211 |
formdata.store() |
5212 | 5212 | |
5213 | 5213 |
resp = app.get(formdata.get_url(backoffice=True)) |
5214 |
resp.forms[0]['f1'] = 'a' |
|
5215 |
resp.forms[0]['f2'] = 'b' |
|
5214 |
resp.forms[0]['flocal_1'] = 'a'
|
|
5215 |
resp.forms[0]['flocal_2'] = 'b'
|
|
5216 | 5216 |
resp = resp.forms[0].submit() |
5217 | 5217 |
assert formdata.select()[0].status == 'wf-done' |
5218 | 5218 |
tests/form_pages/test_all.py | ||
---|---|---|
5973 | 5973 |
formdata = formdef.data_class().select()[0] |
5974 | 5974 | |
5975 | 5975 |
resp = app.get(formdata.get_url()) |
5976 |
assert resp.form['f1'].attrs['aria-required'] == 'true' |
|
5976 |
assert resp.form['fxxx_1'].attrs['aria-required'] == 'true'
|
|
5977 | 5977 |
assert 'button-action-1' in resp.form.fields |
5978 | 5978 |
resp = resp.form.submit('button-action-1') |
5979 | 5979 | |
... | ... | |
6577 | 6577 |
assert 'The form has been recorded' in resp.text |
6578 | 6578 | |
6579 | 6579 |
assert 'data-live-url' in resp.html.find('form').attrs |
6580 |
assert 'f1' in resp.form.fields |
|
6581 |
assert 'f2' in resp.form.fields |
|
6582 |
assert resp.html.find('div', {'data-field-id': '2'}).attrs['data-live-source'] == 'true' |
|
6583 |
assert resp.html.find('div', {'data-field-id': '3'}).find('select') |
|
6580 |
assert 'fxxx_1' in resp.form.fields
|
|
6581 |
assert 'fxxx_2' in resp.form.fields
|
|
6582 |
assert resp.html.find('div', {'data-field-id': 'xxx_2'}).attrs['data-live-source'] == 'true'
|
|
6583 |
assert resp.html.find('div', {'data-field-id': 'xxx_3'}).find('select')
|
|
6584 | 6584 |
resp = resp.form.submit('submit') # submit with error, to check <form> attributes |
6585 | 6585 |
assert 'data-live-url' in resp.html.find('form').attrs |
6586 |
assert 'f1' in resp.form.fields |
|
6587 |
assert 'f2' in resp.form.fields |
|
6588 |
assert resp.html.find('div', {'data-field-id': '2'}).attrs['data-live-source'] == 'true' |
|
6589 |
assert resp.html.find('div', {'data-field-id': '3'}).find('select') |
|
6590 |
resp.form['f1'] = 'hello' |
|
6586 |
assert 'fxxx_1' in resp.form.fields
|
|
6587 |
assert 'fxxx_2' in resp.form.fields
|
|
6588 |
assert resp.html.find('div', {'data-field-id': 'xxx_2'}).attrs['data-live-source'] == 'true'
|
|
6589 |
assert resp.html.find('div', {'data-field-id': 'xxx_3'}).find('select')
|
|
6590 |
resp.form['fxxx_1'] = 'hello'
|
|
6591 | 6591 |
live_resp = app.post('/test/1/live', params=resp.form.submit_fields()) |
6592 |
assert live_resp.json['result']['1']['visible'] |
|
6593 |
assert live_resp.json['result']['2']['visible'] |
|
6594 |
assert live_resp.json['result']['3']['visible'] |
|
6595 |
assert not 'items' in live_resp.json['result']['3'] |
|
6596 |
resp.form['f2'] = 'plop' |
|
6597 |
live_resp = app.post('/test/1/live?modified_field_id=2', params=resp.form.submit_fields()) |
|
6598 |
assert live_resp.json['result']['1']['visible'] |
|
6599 |
assert live_resp.json['result']['2']['visible'] |
|
6600 |
assert live_resp.json['result']['3']['visible'] |
|
6601 |
assert 'items' in live_resp.json['result']['3'] |
|
6602 |
assert len(live_resp.json['result']['3']['items']) > 0 |
|
6603 | ||
6604 |
resp.form['f3'].options = [] |
|
6605 |
for item in live_resp.json['result']['3']['items']: |
|
6592 |
assert live_resp.json['result']['xxx_1']['visible']
|
|
6593 |
assert live_resp.json['result']['xxx_2']['visible']
|
|
6594 |
assert live_resp.json['result']['xxx_3']['visible']
|
|
6595 |
assert not 'items' in live_resp.json['result']['xxx_3']
|
|
6596 |
resp.form['fxxx_2'] = 'plop'
|
|
6597 |
live_resp = app.post('/test/1/live?modified_field_id=xxx_2', params=resp.form.submit_fields())
|
|
6598 |
assert live_resp.json['result']['xxx_1']['visible']
|
|
6599 |
assert live_resp.json['result']['xxx_2']['visible']
|
|
6600 |
assert live_resp.json['result']['xxx_3']['visible']
|
|
6601 |
assert 'items' in live_resp.json['result']['xxx_3']
|
|
6602 |
assert len(live_resp.json['result']['xxx_3']['items']) > 0
|
|
6603 | ||
6604 |
resp.form['fxxx_3'].options = []
|
|
6605 |
for item in live_resp.json['result']['xxx_3']['items']:
|
|
6606 | 6606 |
# simulate javascript filling the <select> |
6607 |
resp.form['f3'].options.append((item['id'], False, item['text'])) |
|
6608 |
resp.form['f3'] = 'a' |
|
6607 |
resp.form['fxxx_3'].options.append((item['id'], False, item['text']))
|
|
6608 |
resp.form['fxxx_3'] = 'a'
|
|
6609 | 6609 | |
6610 | 6610 |
resp = resp.form.submit('submit') |
6611 | 6611 |
assert 'invalid value selected' not in resp |
... | ... | |
7129 | 7129 | |
7130 | 7130 |
app = login(get_app(pub), username='foo', password='foo') |
7131 | 7131 |
resp = app.get(formdata.get_url(backoffice=False)) |
7132 |
assert 'f1' in resp.form.fields |
|
7133 |
assert 'f2' in resp.form.fields |
|
7132 |
assert 'fblah_1' in resp.form.fields
|
|
7133 |
assert 'fblah_2' in resp.form.fields
|
|
7134 | 7134 | |
7135 | 7135 |
# check with static condition |
7136 | 7136 |
display_form.formdef.fields = [ |
... | ... | |
7142 | 7142 |
wf.store() |
7143 | 7143 | |
7144 | 7144 |
resp = login(get_app(pub), username='foo', password='foo').get(formdata.get_url(backoffice=False)) |
7145 |
assert 'f1' in resp.form.fields |
|
7146 |
assert 'f2' not in resp.form.fields |
|
7145 |
assert 'fblah_1' in resp.form.fields
|
|
7146 |
assert 'fblah_2' not in resp.form.fields
|
|
7147 | 7147 | |
7148 | 7148 |
# check condition based on formdata |
7149 | 7149 |
display_form.formdef.fields = [ |
... | ... | |
7155 | 7155 |
wf.store() |
7156 | 7156 | |
7157 | 7157 |
resp = login(get_app(pub), username='foo', password='foo').get(formdata.get_url(backoffice=False)) |
7158 |
assert 'f1' in resp.form.fields |
|
7159 |
assert 'f2' in resp.form.fields |
|
7158 |
assert 'fblah_1' in resp.form.fields
|
|
7159 |
assert 'fblah_2' in resp.form.fields
|
|
7160 | 7160 | |
7161 | 7161 |
display_form.formdef.fields = [ |
7162 | 7162 |
fields.StringField(id='1', label='Test', varname='str', type='string', required=True), |
... | ... | |
7167 | 7167 |
wf.store() |
7168 | 7168 | |
7169 | 7169 |
resp = login(get_app(pub), username='foo', password='foo').get(formdata.get_url(backoffice=False)) |
7170 |
assert 'f1' in resp.form.fields |
|
7171 |
assert 'f2' in resp.form.fields |
|
7170 |
assert 'fblah_1' in resp.form.fields
|
|
7171 |
assert 'fblah_2' in resp.form.fields
|
|
7172 | 7172 | |
7173 | 7173 |
# check with live conditions |
7174 | 7174 |
display_form.formdef.fields = [ |
... | ... | |
7180 | 7180 |
wf.store() |
7181 | 7181 | |
7182 | 7182 |
resp = login(get_app(pub), username='foo', password='foo').get(formdata.get_url(backoffice=False)) |
7183 |
assert 'f1' in resp.form.fields |
|
7184 |
assert 'f2' in resp.form.fields |
|
7185 |
assert resp.html.find('div', {'data-field-id': '1'}).attrs['data-live-source'] == 'true' |
|
7186 |
assert resp.html.find('div', {'data-field-id': '2'}).attrs.get('style') == 'display: none' |
|
7183 |
assert 'fblah_1' in resp.form.fields
|
|
7184 |
assert 'fblah_2' in resp.form.fields
|
|
7185 |
assert resp.html.find('div', {'data-field-id': 'blah_1'}).attrs['data-live-source'] == 'true'
|
|
7186 |
assert resp.html.find('div', {'data-field-id': 'blah_2'}).attrs.get('style') == 'display: none'
|
|
7187 | 7187 |
live_url = resp.html.find('form').attrs['data-live-url'] |
7188 |
resp.form['f1'] = '' |
|
7188 |
resp.form['fblah_1'] = ''
|
|
7189 | 7189 |
live_resp = app.post(live_url, params=resp.form.submit_fields()) |
7190 |
assert live_resp.json['result']['1']['visible'] |
|
7191 |
assert not live_resp.json['result']['2']['visible'] |
|
7190 |
assert live_resp.json['result']['blah_1']['visible']
|
|
7191 |
assert not live_resp.json['result']['blah_2']['visible']
|
|
7192 | 7192 | |
7193 |
resp.form['f1'] = 'xxx' |
|
7193 |
resp.form['fblah_1'] = 'xxx'
|
|
7194 | 7194 |
live_resp = app.post(live_url, params=resp.form.submit_fields()) |
7195 |
assert live_resp.json['result']['1']['visible'] |
|
7196 |
assert live_resp.json['result']['2']['visible'] |
|
7195 |
assert live_resp.json['result']['blah_1']['visible']
|
|
7196 |
assert live_resp.json['result']['blah_2']['visible']
|
|
7197 | 7197 | |
7198 | 7198 |
# check submit doesn't work |
7199 | 7199 |
resp = resp.form.submit('submit') |
7200 | 7200 |
assert 'There were errors processing your form.' in resp.text |
7201 | 7201 | |
7202 |
resp.form['f1'] = 'xxx2' |
|
7202 |
resp.form['fblah_1'] = 'xxx2'
|
|
7203 | 7203 |
live_resp = app.post(live_url, params=resp.form.submit_fields()) |
7204 |
assert live_resp.json['result']['1']['visible'] |
|
7205 |
assert not live_resp.json['result']['2']['visible'] |
|
7204 |
assert live_resp.json['result']['blah_1']['visible']
|
|
7205 |
assert not live_resp.json['result']['blah_2']['visible']
|
|
7206 | 7206 | |
7207 | 7207 |
# check submit does work when second field is hidden |
7208 | 7208 |
resp = resp.form.submit('submit').follow() |
... | ... | |
7246 | 7246 | |
7247 | 7247 |
app = login(get_app(pub), username='foo', password='foo') |
7248 | 7248 |
resp = app.get(formdata.get_url(backoffice=False)) |
7249 |
assert 'f1' in resp.form.fields |
|
7249 |
assert 'fblah_1' in resp.form.fields
|
|
7250 | 7250 | |
7251 | 7251 |
live_url = resp.html.find('form').attrs['data-live-url'] |
7252 |
resp.form['f1'] = 'test' |
|
7252 |
resp.form['fblah_1'] = 'test'
|
|
7253 | 7253 |
live_resp = app.post(live_url, params=resp.form.submit_fields()) |
7254 |
assert live_resp.json['result']['2']['visible'] |
|
7255 |
assert live_resp.json['result']['2']['content'] == '<p>value is test</p>' |
|
7254 |
assert live_resp.json['result']['blah_2']['visible']
|
|
7255 |
assert live_resp.json['result']['blah_2']['content'] == '<p>value is test</p>'
|
|
7256 | 7256 | |
7257 | 7257 | |
7258 | 7258 |
def test_frontoffice_workflow_form_with_impossible_condition(pub): |
... | ... | |
7292 | 7292 | |
7293 | 7293 |
app = login(get_app(pub), username='foo', password='foo') |
7294 | 7294 |
resp = app.get(formdata.get_url(backoffice=False)) |
7295 |
assert 'f1' not in resp.form.fields |
|
7296 |
assert resp.html.find('div', {'data-field-id': '2'}).attrs.get('style') == 'display: none' |
|
7295 |
assert 'fblah_1' not in resp.form.fields
|
|
7296 |
assert resp.html.find('div', {'data-field-id': 'blah_2'}).attrs.get('style') == 'display: none'
|
|
7297 | 7297 | |
7298 | 7298 | |
7299 | 7299 |
def test_choice_button_ignore_form_errors(pub): |
tests/form_pages/test_block.py | ||
---|---|---|
412 | 412 |
resp = resp.form.submit('submit') # -> validation |
413 | 413 |
resp = resp.form.submit('submit').follow() |
414 | 414 |
assert 'The form has been recorded' in resp |
415 |
assert resp.form['f3$element0$f123'].value == 'foo@localhost' |
|
415 |
assert resp.form['fxxx_3$element0$f123'].value == 'foo@localhost'
|
|
416 | 416 | |
417 | 417 | |
418 | 418 |
def test_block_title_and_comment(pub, blocks_feature): |
tests/form_pages/test_formdata.py | ||
---|---|---|
1037 | 1037 |
assert 'The form has been recorded' in resp.text |
1038 | 1038 | |
1039 | 1039 |
assert 'qommon.fileupload.js' in resp.text |
1040 |
resp.forms[0]['f1$file'] = Upload('test.txt', b'foobar', 'text/plain') |
|
1040 |
resp.forms[0]['fxxx_1$file'] = Upload('test.txt', b'foobar', 'text/plain')
|
|
1041 | 1041 |
resp = resp.forms[0].submit('submit') |
1042 | 1042 | |
1043 | 1043 |
assert formdef.data_class().count() == 1 |
... | ... | |
1086 | 1086 |
assert resp.status_int == 302 |
1087 | 1087 |
resp = resp.follow() |
1088 | 1088 |
assert 'The form has been recorded' in resp.text |
1089 |
assert resp.forms[0]['f1'].value == 'foo@localhost' |
|
1089 |
assert resp.forms[0]['fxxx_1'].value == 'foo@localhost'
|
|
1090 | 1090 | |
1091 | 1091 | |
1092 | 1092 |
def test_formdata_workflow_form_prefill_conditional_field(pub): |
... | ... | |
1127 | 1127 |
assert resp.status_int == 302 |
1128 | 1128 |
resp = resp.follow() |
1129 | 1129 |
assert 'The form has been recorded' in resp.text |
1130 |
assert resp.forms[0]['f2'].value == 'foo@localhost' |
|
1130 |
assert resp.forms[0]['fxxx_2'].value == 'foo@localhost'
|
|
1131 | 1131 | |
1132 | 1132 | |
1133 | 1133 |
def test_formdata_workflow_form_prefill_checkbox(pub): |
... | ... | |
1164 | 1164 |
assert 'Check values then click submit.' in resp |
1165 | 1165 |
resp = resp.form.submit('submit').follow() |
1166 | 1166 |
assert 'The form has been recorded' in resp |
1167 |
assert resp.form['f1'].checked is True |
|
1168 |
assert resp.form['f2'].checked is True |
|
1169 |
resp.form['f1'].checked = False |
|
1167 |
assert resp.form['fxxx_1'].checked is True
|
|
1168 |
assert resp.form['fxxx_2'].checked is True
|
|
1169 |
resp.form['fxxx_1'].checked = False
|
|
1170 | 1170 |
resp = resp.form.submit('submit') |
1171 | 1171 | |
1172 | 1172 |
formdata = formdef.data_class().select()[0] |
... | ... | |
1242 | 1242 |
assert 'The form has been recorded' in resp |
1243 | 1243 | |
1244 | 1244 |
# check display value is in form action widget |
1245 |
assert resp.form['f4'].attrs['data-value'] == '1' |
|
1246 |
assert resp.form['f4'].attrs['data-initial-display-value'] == 'hello' |
|
1245 |
assert resp.form['fxxx_4'].attrs['data-value'] == '1'
|
|
1246 |
assert resp.form['fxxx_4'].attrs['data-initial-display-value'] == 'hello'
|
|
1247 | 1247 | |
1248 | 1248 |
# check it is also displayed in a fresh session |
1249 | 1249 |
resp = login(get_app(pub), username='foo', password='foo').get(resp.request.url) |
1250 |
assert resp.form['f4'].attrs['data-value'] == '1' |
|
1251 |
assert resp.form['f4'].attrs['data-initial-display-value'] == 'hello' |
|
1250 |
assert resp.form['fxxx_4'].attrs['data-value'] == '1' |
|
1251 |
assert resp.form['fxxx_4'].attrs['data-initial-display-value'] == 'hello' |
|
1252 | ||
1253 | ||
1254 |
def test_formdata_workflow_many_forms(pub): |
|
1255 |
create_user(pub) |
|
1256 |
wf = Workflow(name='status') |
|
1257 |
st1 = wf.add_status('Status1', 'st1') |
|
1258 | ||
1259 |
# first form |
|
1260 |
display_form1 = FormWorkflowStatusItem() |
|
1261 |
display_form1.id = '_x' |
|
1262 |
display_form1.by = ['_submitter'] |
|
1263 |
display_form1.varname = 'xxx' |
|
1264 |
display_form1.formdef = WorkflowFormFieldsFormDef(item=display_form1) |
|
1265 |
display_form1.formdef.fields = [fields.StringField(id='1', label='blah1')] |
|
1266 |
st1.items.append(display_form1) |
|
1267 |
display_form1.parent = st1 |
|
1268 | ||
1269 |
# second form with live condition |
|
1270 |
display_form2 = FormWorkflowStatusItem() |
|
1271 |
display_form2.id = '_y' |
|
1272 |
display_form2.by = ['_submitter'] |
|
1273 |
display_form2.varname = 'yyy' |
|
1274 |
display_form2.formdef = WorkflowFormFieldsFormDef(item=display_form2) |
|
1275 |
display_form2.formdef.fields = [ |
|
1276 |
fields.StringField(id='1', label='Test', varname='str', type='string', required=True), |
|
1277 |
fields.StringField( |
|
1278 |
id='2', label='Test2', varname='str2', |
|
1279 |
type='string', required=True, |
|
1280 |
condition={'type': 'django', 'value': 'yyy_var_str == "xxx"'}), |
|
1281 |
] |
|
1282 |
st1.items.append(display_form2) |
|
1283 |
display_form2.parent = st1 |
|
1284 | ||
1285 |
wf.store() |
|
1286 | ||
1287 |
FormDef.wipe() |
|
1288 |
formdef = FormDef() |
|
1289 |
formdef.name = 'test' |
|
1290 |
formdef.workflow_id = wf.id |
|
1291 |
formdef.fields = [fields.StringField(id='1', label='blah')] |
|
1292 |
formdef.store() |
|
1293 |
formdef.data_class().wipe() |
|
1294 | ||
1295 |
app = login(get_app(pub), username='foo', password='foo') |
|
1296 |
resp = app.get('/test/') |
|
1297 |
resp.form['f1'] = 'foobar' |
|
1298 |
resp = resp.forms[0].submit('submit') |
|
1299 |
assert 'Check values then click submit.' in resp.text |
|
1300 |
resp = resp.forms[0].submit('submit') |
|
1301 |
assert resp.status_int == 302 |
|
1302 |
resp = resp.follow() |
|
1303 |
assert 'The form has been recorded' in resp.text |
|
1304 |
assert 'fxxx_1' in resp.form.fields |
|
1305 |
assert 'fyyy_1' in resp.form.fields |
|
1306 |
assert 'fyyy_2' in resp.form.fields |
|
1307 |
assert 'submit' in resp.form.fields # only one submit button |
|
1308 | ||
1309 |
assert resp.html.find('div', {'data-field-id': 'yyy_1'}).attrs['data-live-source'] == 'true' |
|
1310 |
assert resp.html.find('div', {'data-field-id': 'yyy_2'}).attrs.get('style') == 'display: none' |
|
1311 |
live_url = resp.html.find('form').attrs['data-live-url'] |
|
1312 |
resp.form['fyyy_1'] = '' |
|
1313 |
live_resp = app.post(live_url, params=resp.form.submit_fields()) |
|
1314 |
assert live_resp.json['result']['xxx_1']['visible'] |
|
1315 |
assert live_resp.json['result']['yyy_1']['visible'] |
|
1316 |
assert not live_resp.json['result']['yyy_2']['visible'] |
|
1317 |
resp.form['fyyy_1'] = 'xxx' |
|
1318 |
live_resp = app.post(live_url, params=resp.form.submit_fields()) |
|
1319 |
assert live_resp.json['result']['xxx_1']['visible'] |
|
1320 |
assert live_resp.json['result']['yyy_1']['visible'] |
|
1321 |
assert live_resp.json['result']['yyy_2']['visible'] |
|
1252 | 1322 | |
1253 | 1323 | |
1254 | 1324 |
def test_formdata_named_wscall(http_requests, pub): |
tests/test_workflows.py | ||
---|---|---|
2413 | 2413 |
assert form.widgets[1].title == 'Date' |
2414 | 2414 | |
2415 | 2415 |
two_pubs.get_request().environ['REQUEST_METHOD'] = 'POST' |
2416 |
two_pubs.get_request().form = {'f1': 'Foobar', 'f2': '2015-05-12', 'submit': 'submit'}
|
|
2416 |
two_pubs.get_request().form = {'fxxx_1': 'Foobar', 'fxxx_2': '2015-05-12', 'submit': 'submit'}
|
|
2417 | 2417 |
display_form.submit_form(form, formdata, None, None) |
2418 | 2418 | |
2419 | 2419 |
assert formdata.get_substitution_variables()['xxx_var_date'] == '2015-05-12' |
... | ... | |
2426 | 2426 |
form = Form(action='#', use_tokens=False) |
2427 | 2427 |
display_form.fill_form(form, formdata, None) |
2428 | 2428 |
two_pubs.get_request().environ['REQUEST_METHOD'] = 'POST' |
2429 |
two_pubs.get_request().form = {'f1': 'Foobar', 'f2': '12/05/2015', 'submit': 'submit'}
|
|
2429 |
two_pubs.get_request().form = {'fxxx_1': 'Foobar', 'fxxx_2': '12/05/2015', 'submit': 'submit'}
|
|
2430 | 2430 |
display_form.submit_form(form, formdata, None, None) |
2431 | 2431 |
assert formdata.get_substitution_variables()['xxx_var_date'] == '12/05/2015' |
2432 | 2432 |
wcs/fields.py | ||
---|---|---|
550 | 550 |
def perform_more_widget_changes(self, form, kwargs, edit = True): |
551 | 551 |
pass |
552 | 552 | |
553 | ||
554 | 553 |
def add_to_view_form(self, form, value = None): |
555 | 554 |
kwargs = {'render_br': False} |
556 | 555 |
wcs/wf/form.py | ||
---|---|---|
165 | 165 |
return fields_directory |
166 | 166 |
return None |
167 | 167 | |
168 |
def prefix_form_fields(self): |
|
169 |
for field in self.formdef.fields: |
|
170 |
try: |
|
171 |
field.id = '%s_%s' % (self.varname, int(field.id)) |
|
172 |
except ValueError: |
|
173 |
# already prefixed |
|
174 |
pass |
|
175 | ||
168 | 176 |
def fill_form(self, form, formdata, user, displayed_fields=None, **kwargs): |
169 | 177 |
if not self.formdef: |
170 | 178 |
return |
179 |
self.prefix_form_fields() |
|
171 | 180 |
self.formdef.var_prefix = self.varname |
172 | 181 |
self.formdef.add_fields_to_form(form, displayed_fields=displayed_fields) |
173 |
form.add_submit('submit', _('Submit')) |
|
182 |
if 'submit' not in form._names: |
|
183 |
form.add_submit('submit', _('Submit')) |
|
174 | 184 | |
175 | 185 |
# put varname in a form attribute so it can be used in templates to |
176 | 186 |
# identify the form. |
... | ... | |
192 | 202 | |
193 | 203 |
def evaluate_live_form(self, form, formdata, user): |
194 | 204 |
workflow_data = {} |
205 |
self.prefix_form_fields() |
|
195 | 206 |
for k, v in get_dict_with_varnames( |
196 | 207 |
self.formdef.fields, self.formdef.get_data(form), |
197 | 208 |
varnames_only=True).items(): |
198 |
- |