3664 |
3664 |
|
3665 |
3665 |
|
3666 |
3666 |
def test_form_page_template_prefill_items_field(pub):
|
|
3667 |
BlockDef.wipe()
|
3667 |
3668 |
create_user(pub)
|
|
3669 |
|
|
3670 |
block = BlockDef()
|
|
3671 |
block.name = 'foobar'
|
|
3672 |
block.fields = [
|
|
3673 |
fields.StringField(id='123', required=True, label='Test', type='string', varname='test'),
|
|
3674 |
]
|
|
3675 |
block.store()
|
|
3676 |
|
3668 |
3677 |
formdef = create_formdef()
|
3669 |
3678 |
formdef.data_class().wipe()
|
3670 |
3679 |
formdef.fields = [
|
... | ... | |
3673 |
3682 |
label='items',
|
3674 |
3683 |
items=['foo', 'bar', 'baz'],
|
3675 |
3684 |
prefill={'type': 'string', 'value': 'foo,baz'},
|
3676 |
|
)
|
|
3685 |
),
|
|
3686 |
fields.FileField(id='1', label='file', type='file', varname='file'),
|
|
3687 |
fields.BlockField(id='2', label='test', type='block:foobar', varname='foobar'),
|
3677 |
3688 |
]
|
3678 |
3689 |
formdef.store()
|
3679 |
3690 |
|
... | ... | |
3685 |
3696 |
resp.form['f0$element1'].checked = True
|
3686 |
3697 |
resp.form['f0$element2'].checked = False
|
3687 |
3698 |
assert 'widget-prefilled' in resp.text
|
|
3699 |
resp.form['f1$file'] = Upload('test.txt', b'foobar', 'text/plain')
|
|
3700 |
resp.form['f2$element0$f123'] = 'plop'
|
3688 |
3701 |
resp = resp.form.submit('submit')
|
3689 |
3702 |
resp = resp.form.submit('submit')
|
3690 |
3703 |
assert formdef.data_class().count() == 1
|
3691 |
3704 |
|
3692 |
3705 |
# check with remote json
|
3693 |
3706 |
ds = {'type': 'json', 'value': 'http://remote.example.net/json'}
|
3694 |
|
formdef.fields = [
|
3695 |
|
fields.ItemsField(
|
3696 |
|
id='0',
|
3697 |
|
label='items',
|
3698 |
|
data_source=ds,
|
3699 |
|
display_disabled_items=True,
|
3700 |
|
prefill={'type': 'string', 'value': 'foo,baz'},
|
3701 |
|
)
|
3702 |
|
]
|
|
3707 |
formdef.fields[0] = fields.ItemsField(
|
|
3708 |
id='0',
|
|
3709 |
label='items',
|
|
3710 |
data_source=ds,
|
|
3711 |
display_disabled_items=True,
|
|
3712 |
prefill={'type': 'string', 'value': 'foo,baz'},
|
|
3713 |
)
|
3703 |
3714 |
formdef.store()
|
3704 |
3715 |
|
3705 |
3716 |
with mock.patch('wcs.qommon.misc.urlopen') as urlopen:
|
... | ... | |
3717 |
3728 |
assert resp.form['f0$elementbaz'].checked
|
3718 |
3729 |
|
3719 |
3730 |
# check with template returning a complex data
|
3720 |
|
formdef.fields = [
|
3721 |
|
fields.ItemsField(
|
3722 |
|
id='0',
|
3723 |
|
varname='items',
|
3724 |
|
label='items',
|
3725 |
|
data_source=ds,
|
3726 |
|
display_disabled_items=True,
|
3727 |
|
prefill={'type': 'string', 'value': '{{form_objects|first|get:"form_var_items_raw"}}'},
|
3728 |
|
)
|
3729 |
|
]
|
|
3731 |
formdef.fields[0] = fields.ItemsField(
|
|
3732 |
id='0',
|
|
3733 |
varname='items',
|
|
3734 |
label='items',
|
|
3735 |
data_source=ds,
|
|
3736 |
display_disabled_items=True,
|
|
3737 |
prefill={'type': 'string', 'value': '{{form_objects|first|get:"form_var_items_raw"}}'},
|
|
3738 |
)
|
3730 |
3739 |
formdef.store()
|
3731 |
3740 |
|
3732 |
3741 |
# it will use foo,bar as selected in the first part of this test
|
... | ... | |
3735 |
3744 |
assert resp.form['f0$elementbar'].checked
|
3736 |
3745 |
assert not resp.form['f0$elementbaz'].checked
|
3737 |
3746 |
|
|
3747 |
# check with complex data of wrong type
|
|
3748 |
for invalid_prefill_value in [
|
|
3749 |
{'type': 'string', 'value': '{{form_objects|first|get:"form_var_file_raw"}}'},
|
|
3750 |
{'type': 'string', 'value': '{{form_objects|first|get:"form_var_foobar"}}'},
|
|
3751 |
{'type': 'formula', 'value': '[{"a": "foo", "b": "baz"}]'},
|
|
3752 |
]:
|
|
3753 |
formdef.fields[0] = fields.ItemsField(
|
|
3754 |
id='0',
|
|
3755 |
varname='items',
|
|
3756 |
label='items',
|
|
3757 |
data_source=ds,
|
|
3758 |
display_disabled_items=True,
|
|
3759 |
prefill=invalid_prefill_value,
|
|
3760 |
)
|
|
3761 |
formdef.store()
|
|
3762 |
|
|
3763 |
resp = get_app(pub).get('/test/')
|
|
3764 |
assert not resp.form['f0$elementfoo'].checked
|
|
3765 |
assert not resp.form['f0$elementbar'].checked
|
|
3766 |
assert not resp.form['f0$elementbaz'].checked
|
|
3767 |
|
|
3768 |
if pub.is_using_postgresql():
|
|
3769 |
assert pub.loggederror_class.count() == 1
|
|
3770 |
logged_error = pub.loggederror_class.select()[0]
|
|
3771 |
assert logged_error.summary == 'Invalid value for items prefill on field "items"'
|
|
3772 |
pub.loggederror_class.wipe()
|
|
3773 |
|
3738 |
3774 |
|
3739 |
3775 |
def test_form_page_changing_prefill(pub):
|
3740 |
3776 |
formdef = create_formdef()
|