0001-workflows-add-jump-button-option-to-ignore-form-erro.patch
tests/test_form_pages.py | ||
---|---|---|
28 | 28 |
from wcs.workflows import (Workflow, EditableWorkflowStatusItem, |
29 | 29 |
DisplayMessageWorkflowStatusItem, WorkflowBackofficeFieldsFormDef, |
30 | 30 |
ChoiceWorkflowStatusItem, JumpOnSubmitWorkflowStatusItem, |
31 |
SendmailWorkflowStatusItem) |
|
31 |
SendmailWorkflowStatusItem, CommentableWorkflowStatusItem)
|
|
32 | 32 |
from wcs.wf.backoffice_fields import SetBackofficeFieldsWorkflowStatusItem |
33 | 33 |
from wcs.wf.export_to_model import ExportToModel, transform_to_pdf |
34 | 34 |
from wcs.wf.jump import JumpWorkflowStatusItem |
... | ... | |
7025 | 7025 |
resp = app.get(formdata.get_url(backoffice=False)) |
7026 | 7026 |
assert 'f1' not in resp.form.fields |
7027 | 7027 |
assert resp.html.find('div', {'data-field-id': '2'}).attrs.get('style') == 'display: none' |
7028 | ||
7029 |
def test_choice_button_ignore_form_errors(pub): |
|
7030 |
user = create_user(pub) |
|
7031 | ||
7032 |
formdef = create_formdef() |
|
7033 |
formdef.roles = [logged_users_role().id] |
|
7034 |
formdef.store() |
|
7035 | ||
7036 |
wf = Workflow(name='status') |
|
7037 |
st1 = wf.add_status('Status1', 'st1') |
|
7038 |
st2 = wf.add_status('Status2', 'st2') |
|
7039 | ||
7040 |
commentable = CommentableWorkflowStatusItem() |
|
7041 |
commentable.id = '_commentable' |
|
7042 |
commentable.by = [logged_users_role().id] |
|
7043 |
commentable.required = True |
|
7044 |
st1.items.append(commentable) |
|
7045 |
commentable.parent = st1 |
|
7046 | ||
7047 |
choice = ChoiceWorkflowStatusItem() |
|
7048 |
choice.label = 'Submit' |
|
7049 |
choice.by = [logged_users_role().id] |
|
7050 |
choice.id = '_x1' |
|
7051 |
choice.status = st2.id |
|
7052 |
st1.items.append(choice) |
|
7053 |
choice.parent = st1 |
|
7054 | ||
7055 |
choice2 = ChoiceWorkflowStatusItem() |
|
7056 |
choice2.label = 'Submit no check' |
|
7057 |
choice2.by = [logged_users_role().id] |
|
7058 |
choice2.id = '_x2' |
|
7059 |
choice2.status = st2.id |
|
7060 |
choice2.ignore_form_errors = True |
|
7061 |
st1.items.append(choice2) |
|
7062 |
choice2.parent = st1 |
|
7063 | ||
7064 |
wf.store() |
|
7065 | ||
7066 |
formdef.workflow = wf |
|
7067 |
formdef.store() |
|
7068 | ||
7069 |
# no comment |
|
7070 |
resp = login(get_app(pub), username='foo', password='foo').get('/test/') |
|
7071 |
resp = resp.form.submit('submit') # -> validation page |
|
7072 |
resp = resp.form.submit('submit') # -> submission |
|
7073 |
resp = resp.follow() |
|
7074 | ||
7075 |
resp = resp.form.submit('button_x1') |
|
7076 |
assert 'There were errors processing your form.' in resp.body |
|
7077 | ||
7078 |
# comment |
|
7079 |
resp = login(get_app(pub), username='foo', password='foo').get('/test/') |
|
7080 |
resp = resp.form.submit('submit') # -> validation page |
|
7081 |
resp = resp.form.submit('submit') # -> submission |
|
7082 |
resp = resp.follow() |
|
7083 | ||
7084 |
resp.form['comment'] = 'plop' |
|
7085 |
resp = resp.form.submit('button_x1').follow() |
|
7086 |
assert '<p>plop</p>' in resp.body |
|
7087 |
assert '<span class="status">Status2' in resp.body |
|
7088 | ||
7089 |
# no comment but no check |
|
7090 |
resp = login(get_app(pub), username='foo', password='foo').get('/test/') |
|
7091 |
resp = resp.form.submit('submit') # -> validation page |
|
7092 |
resp = resp.form.submit('submit') # -> submission |
|
7093 |
resp = resp.follow() |
|
7094 | ||
7095 |
resp = resp.form.submit('button_x2').follow() |
|
7096 |
assert '<span class="status">Status2' in resp.body |
wcs/forms/common.py | ||
---|---|---|
280 | 280 | |
281 | 281 | |
282 | 282 |
def check_submitted_form(self, form): |
283 |
if form and form.is_submitted() and not form.has_errors(): |
|
283 |
if form and form.is_submitted(): |
|
284 |
submit_button_name = form.get_submit() |
|
285 |
if submit_button_name: |
|
286 |
submit_button = form.get_widget(submit_button_name) |
|
287 |
if getattr(submit_button, 'ignore_form_errors', False): |
|
288 |
form.clear_errors() |
|
289 |
if form.has_errors(): |
|
290 |
return |
|
284 | 291 |
url = self.submit(form) |
285 | 292 |
if url is None: |
286 | 293 |
url = get_request().get_frontoffice_url() |
wcs/workflows.py | ||
---|---|---|
2319 | 2319 |
by = [] |
2320 | 2320 |
backoffice_info_text = None |
2321 | 2321 |
require_confirmation = False |
2322 |
ignore_form_errors = False |
|
2322 | 2323 | |
2323 | 2324 |
def get_label(self): |
2324 | 2325 |
expression = self.get_expression(self.label) |
... | ... | |
2355 | 2356 |
if self.require_confirmation: |
2356 | 2357 |
get_response().add_javascript(['jquery.js', '../../i18n.js', 'qommon.js']) |
2357 | 2358 |
widget.attrs = {'data-ask-for-confirmation': 'true'} |
2358 |
form.get_widget('button%s' % self.id).backoffice_info_text = self.backoffice_info_text |
|
2359 |
widget.backoffice_info_text = self.backoffice_info_text |
|
2360 |
widget.ignore_form_errors = self.ignore_form_errors |
|
2361 |
if self.ignore_form_errors: |
|
2362 |
widget.attrs['formnovalidate'] = 'formnovalidate' |
|
2359 | 2363 | |
2360 | 2364 |
def submit_form(self, form, formdata, user, evo): |
2361 | 2365 |
if form.get_submit() == 'button%s' % self.id: |
... | ... | |
2390 | 2394 |
form.add(VarnameWidget, '%sidentifier' % prefix, |
2391 | 2395 |
title=_('Identifier'), value=self.identifier, |
2392 | 2396 |
advanced=True) |
2397 |
if 'ignore_form_errors' in parameters: |
|
2398 |
form.add(CheckboxWidget, '%signore_form_errors' % prefix, |
|
2399 |
title=_('Ignore form errors'), |
|
2400 |
value=self.ignore_form_errors, |
|
2401 |
advanced=True) |
|
2393 | 2402 | |
2394 | 2403 |
def get_parameters(self): |
2395 | 2404 |
return ('label', 'by', 'status', |
2396 | 2405 |
'require_confirmation', |
2397 | 2406 |
'backoffice_info_text', |
2407 |
'ignore_form_errors', |
|
2398 | 2408 |
'set_marker_on_status', |
2399 | 2409 |
'condition', 'identifier',) |
2400 | 2410 | |
2401 |
- |