0001-testdef-add-support-for-blocks-73332.patch
tests/test_testdef.py | ||
---|---|---|
4 | 4 |
import pytest |
5 | 5 | |
6 | 6 |
from wcs import fields |
7 |
from wcs.blocks import BlockDef |
|
7 | 8 |
from wcs.formdef import FormDef |
8 | 9 |
from wcs.qommon.http_request import HTTPRequest |
9 | 10 |
from wcs.qommon.upload_storage import PicklableUpload |
... | ... | |
439 | 440 |
assert str(excinfo.value) == 'Invalid value "hop.pdf" for field "File": forbidden file type.' |
440 | 441 | |
441 | 442 | |
443 |
def test_validation_block_field(pub): |
|
444 |
block = BlockDef() |
|
445 |
block.name = 'foobar' |
|
446 |
block.fields = [ |
|
447 |
fields.StringField(id='1', label='Text', varname='text'), |
|
448 |
fields.StringField(id='2', label='Hop'), |
|
449 |
] |
|
450 |
block.store() |
|
451 | ||
452 |
formdef = FormDef() |
|
453 |
formdef.name = 'test title' |
|
454 |
formdef.fields = [ |
|
455 |
fields.PageField( |
|
456 |
id='0', |
|
457 |
label='1st page', |
|
458 |
type='page', |
|
459 |
post_conditions=[ |
|
460 |
{ |
|
461 |
'condition': {'type': 'django', 'value': 'form_var_blockdata_1_text == "a"'}, |
|
462 |
'error_message': '', |
|
463 |
} |
|
464 |
], |
|
465 |
), |
|
466 |
fields.BlockField(id='1', label='Block Data', varname='blockdata', type='block:foobar', max_items=3), |
|
467 |
] |
|
468 |
formdef.store() |
|
469 | ||
470 |
formdata = formdef.data_class()() |
|
471 |
formdata.just_created() |
|
472 |
formdata.receipt_time = datetime.datetime(2021, 1, 1, 0, 0).timetuple() |
|
473 |
formdata.data['1'] = {'data': [{'1': 'a'}, {'1': 'b'}]} |
|
474 | ||
475 |
testdef = TestDef.create_from_formdata(formdef, formdata) |
|
476 |
with pytest.raises(TestError) as excinfo: |
|
477 |
testdef.run(formdef) |
|
478 |
assert str(excinfo.value) == 'Empty value for field "Hop" (of field "Block Data"): required field.' |
|
479 | ||
480 |
formdata.data['1'] = {'data': [{'1': 'a', '2': 'z'}, {'1': 'b', '2': 'z'}]} |
|
481 |
testdef = TestDef.create_from_formdata(formdef, formdata) |
|
482 |
with pytest.raises(TestError) as excinfo: |
|
483 |
testdef.run(formdef) |
|
484 |
assert str(excinfo.value) == 'Page 1 post condition was not met (form_var_blockdata_1_text == "a").' |
|
485 | ||
486 |
formdata.data['1'] = {'data': [{'1': 'b', '2': 'z'}, {'1': 'a', '2': 'z'}]} |
|
487 |
testdef = TestDef.create_from_formdata(formdef, formdata) |
|
488 |
testdef.run(formdef) |
|
489 | ||
490 | ||
442 | 491 |
def test_computed_field_support(pub): |
443 | 492 |
formdef = FormDef() |
444 | 493 |
formdef.name = 'test title' |
wcs/testdef.py | ||
---|---|---|
239 | 239 |
value = ','.join(set(value) - set(widget.value)) |
240 | 240 |
widget.set_error(get_selection_error_text()) |
241 | 241 | |
242 |
if widget.error: |
|
242 |
if widget.has_error(): |
|
243 |
field_label = _('"%s"') % field.label |
|
244 |
if not widget.error: |
|
245 |
widget = self.get_error_subwidget(widget) |
|
246 |
value = widget.value |
|
247 |
field = widget.field |
|
248 |
field_label = _('"%(subfield)s" (of field %(field)s)') % { |
|
249 |
'subfield': field.label, |
|
250 |
'field': field_label, |
|
251 |
} |
|
252 | ||
243 | 253 |
if field.convert_value_to_str: |
244 | 254 |
value = field.convert_value_to_str(value) |
245 | 255 | |
246 | 256 |
error_msg = 'Invalid value "%s"' % value if value else _('Empty value') |
247 | 257 |
raise TestError( |
248 |
'%(error)s for field "%(label)s": %(details)s.'
|
|
258 |
'%(error)s for field %(label)s: %(details)s.'
|
|
249 | 259 |
% { |
250 | 260 |
'error': error_msg, |
251 |
'label': field.label,
|
|
261 |
'label': field_label,
|
|
252 | 262 |
'details': widget.error, |
253 | 263 |
} |
254 | 264 |
) |
255 | 265 | |
266 |
def get_error_subwidget(self, widget): |
|
267 |
for widget in widget.get_widgets(): |
|
268 |
if widget.error: |
|
269 |
return widget |
|
270 | ||
271 |
return self.get_error_subwidget(widget) |
|
272 | ||
256 | 273 |
def export_to_json(self): |
257 | 274 |
return { |
258 | 275 |
'name': self.name, |
259 |
- |