397 |
397 |
]
|
398 |
398 |
block.store()
|
399 |
399 |
|
|
400 |
block2 = BlockDef()
|
|
401 |
block2.name = 'foobar2'
|
|
402 |
block2.fields = [
|
|
403 |
fields.StringField(
|
|
404 |
id='123', required=True, label='Test', type='string'),
|
|
405 |
]
|
|
406 |
block2.store()
|
|
407 |
|
400 |
408 |
formdef = FormDef()
|
401 |
409 |
formdef.name = 'form title'
|
402 |
410 |
formdef.fields = [
|
... | ... | |
404 |
412 |
fields.StringField(id='1', label='string', varname='foo'),
|
405 |
413 |
fields.PageField(id='2', label='2nd page', type='page'),
|
406 |
414 |
fields.BlockField(id='3', label='test', type='block:foobar'),
|
|
415 |
fields.BlockField(id='4', label='test', type='block:foobar2'),
|
|
416 |
]
|
|
417 |
formdef.store()
|
|
418 |
|
|
419 |
for i in range(2):
|
|
420 |
if i == 1:
|
|
421 |
# second pass, add another prefilled field in second block
|
|
422 |
block2.fields.append(
|
|
423 |
fields.StringField(
|
|
424 |
id='124', required=True, label='Test', type='string',
|
|
425 |
prefill={'type': 'string', 'value': '{{ form_var_foo }} World'})
|
|
426 |
)
|
|
427 |
block2.store()
|
|
428 |
|
|
429 |
formdef.data_class().wipe()
|
|
430 |
|
|
431 |
app = get_app(pub)
|
|
432 |
resp = app.get(formdef.get_url())
|
|
433 |
resp.form['f1'] = 'Hello'
|
|
434 |
resp = resp.form.submit('submit') # -> 2nd page
|
|
435 |
assert not resp.pyquery('#form_error_f3') # not marked as error
|
|
436 |
assert not resp.pyquery('#form_error_f4') # ...
|
|
437 |
assert '>required field<' not in resp
|
|
438 |
assert resp.form['f3$element0$f123'].value == 'Hello World'
|
|
439 |
assert resp.form['f4$element0$f123'].value == ''
|
|
440 |
resp.form['f4$element0$f123'] = 'plop'
|
|
441 |
resp = resp.form.submit('submit') # -> validation page
|
|
442 |
resp = resp.form.submit('submit') # -> end page
|
|
443 |
resp = resp.follow()
|
|
444 |
|
|
445 |
formdata = formdef.data_class().select()[0]
|
|
446 |
assert formdata.data['3']['data'][0]['123'] == 'Hello World'
|
|
447 |
if i == 1:
|
|
448 |
assert formdata.data['4']['data'][0]['124'] == 'Hello World'
|
|
449 |
|
|
450 |
# check unmodified prefilled field
|
|
451 |
app = get_app(pub)
|
|
452 |
resp = app.get(formdef.get_url())
|
|
453 |
resp.form['f1'] = 'Hello'
|
|
454 |
resp = resp.form.submit('submit') # -> 2nd page
|
|
455 |
assert resp.form['f3$element0$f123'].value == 'Hello World'
|
|
456 |
resp.form['f4$element0$f123'] = 'plop'
|
|
457 |
resp = resp.form.submit('submit') # -> validation page
|
|
458 |
resp = resp.form.submit('previous') # -> 2nd page
|
|
459 |
resp = resp.form.submit('previous') # -> 1st page
|
|
460 |
resp.form['f1'] = 'Test'
|
|
461 |
resp = resp.form.submit('submit') # -> 2nd page
|
|
462 |
assert resp.form['f3$element0$f123'].value == 'Test World'
|
|
463 |
|
|
464 |
# check modified prefilled field
|
|
465 |
app = get_app(pub)
|
|
466 |
resp = app.get(formdef.get_url())
|
|
467 |
resp.form['f1'] = 'Hello'
|
|
468 |
resp = resp.form.submit('submit') # -> 2nd page
|
|
469 |
assert resp.form['f3$element0$f123'].value == 'Hello World'
|
|
470 |
resp.form['f3$element0$f123'] = 'Foobar'
|
|
471 |
resp.form['f4$element0$f123'] = 'plop'
|
|
472 |
resp = resp.form.submit('submit') # -> validation page
|
|
473 |
resp = resp.form.submit('previous') # -> 2nd page
|
|
474 |
resp = resp.form.submit('previous') # -> 1st page
|
|
475 |
resp.form['f1'] = 'Test'
|
|
476 |
resp = resp.form.submit('submit') # -> 2nd page
|
|
477 |
assert resp.form['f3$element0$f123'].value == 'Foobar'
|
|
478 |
|
|
479 |
|
|
480 |
def test_block_prefill_and_required(pub, blocks_feature):
|
|
481 |
FormDef.wipe()
|
|
482 |
BlockDef.wipe()
|
|
483 |
|
|
484 |
block = BlockDef()
|
|
485 |
block.name = 'foobar'
|
|
486 |
block.fields = [
|
|
487 |
fields.StringField(
|
|
488 |
id='123', required=True, label='Test', type='string',
|
|
489 |
prefill={'type': 'string', 'value': 'World'}),
|
|
490 |
]
|
|
491 |
block.store()
|
|
492 |
|
|
493 |
block2 = BlockDef()
|
|
494 |
block2.name = 'foobar2'
|
|
495 |
block2.fields = [
|
|
496 |
fields.StringField(id='123', required=True, label='Test', type='string'),
|
|
497 |
fields.BoolField(id='234', required=True, label='Test2', type='bool'),
|
|
498 |
]
|
|
499 |
block2.store()
|
|
500 |
|
|
501 |
formdef = FormDef()
|
|
502 |
formdef.name = 'form title'
|
|
503 |
formdef.fields = [
|
|
504 |
fields.ItemField(
|
|
505 |
id='1', required=True, label='Test2', type='item', items=['Foo', 'Bar']),
|
|
506 |
fields.BlockField(id='2', label='test', type='block:foobar'),
|
|
507 |
fields.BlockField(id='3', label='test', type='block:foobar2'),
|
407 |
508 |
]
|
408 |
509 |
formdef.store()
|
|
510 |
|
409 |
511 |
formdef.data_class().wipe()
|
410 |
512 |
|
411 |
513 |
app = get_app(pub)
|
412 |
514 |
resp = app.get(formdef.get_url())
|
413 |
|
resp.form['f1'] = 'Hello'
|
414 |
|
resp = resp.form.submit('submit') # -> 2nd page
|
415 |
|
assert not resp.pyquery('#form_error_f3') # not marked as error
|
416 |
|
assert resp.form['f3$element0$f123'].value == 'Hello World'
|
|
515 |
assert '>required field<' not in resp
|
|
516 |
assert resp.form['f2$element0$f123'].value == 'World'
|
|
517 |
resp.form['f3$element0$f123'] = 'Hello'
|
|
518 |
resp = resp.form.submit('submit') # -> same page, error displyed
|
|
519 |
assert resp.text.count('>required field<') == 1
|
|
520 |
resp.form['f3$element0$f234'].checked = True
|
417 |
521 |
resp = resp.form.submit('submit') # -> validation page
|
418 |
522 |
resp = resp.form.submit('submit') # -> end page
|
419 |
523 |
resp = resp.follow()
|
420 |
524 |
|
421 |
525 |
formdata = formdef.data_class().select()[0]
|
422 |
|
assert formdata.data['3']['data'][0]['123'] == 'Hello World'
|
423 |
|
|
424 |
|
# check unmodified prefilled field
|
425 |
|
app = get_app(pub)
|
426 |
|
resp = app.get(formdef.get_url())
|
427 |
|
resp.form['f1'] = 'Hello'
|
428 |
|
resp = resp.form.submit('submit') # -> 2nd page
|
429 |
|
assert resp.form['f3$element0$f123'].value == 'Hello World'
|
430 |
|
resp = resp.form.submit('submit') # -> validation page
|
431 |
|
resp = resp.form.submit('previous') # -> 2nd page
|
432 |
|
resp = resp.form.submit('previous') # -> 1st page
|
433 |
|
resp.form['f1'] = 'Test'
|
434 |
|
resp = resp.form.submit('submit') # -> 2nd page
|
435 |
|
assert resp.form['f3$element0$f123'].value == 'Test World'
|
436 |
|
|
437 |
|
# check modified prefilled field
|
438 |
|
app = get_app(pub)
|
439 |
|
resp = app.get(formdef.get_url())
|
440 |
|
resp.form['f1'] = 'Hello'
|
441 |
|
resp = resp.form.submit('submit') # -> 2nd page
|
442 |
|
assert resp.form['f3$element0$f123'].value == 'Hello World'
|
443 |
|
resp.form['f3$element0$f123'] = 'Foobar'
|
444 |
|
resp = resp.form.submit('submit') # -> validation page
|
445 |
|
resp = resp.form.submit('previous') # -> 2nd page
|
446 |
|
resp = resp.form.submit('previous') # -> 1st page
|
447 |
|
resp.form['f1'] = 'Test'
|
448 |
|
resp = resp.form.submit('submit') # -> 2nd page
|
449 |
|
assert resp.form['f3$element0$f123'].value == 'Foobar'
|
|
526 |
assert formdata.data['2']['data'][0]['123'] == 'World'
|
|
527 |
assert formdata.data['3']['data'][0]['123'] == 'Hello'
|
|
528 |
assert formdata.data['3']['data'][0]['234'] is True
|
450 |
529 |
|
451 |
530 |
|
452 |
531 |
def test_block_locked_prefill(pub, blocks_feature):
|