fields: item fields are stored as None if value is empty string (#59542)
This commit is contained in:
parent
a64a01ed97
commit
b8d8dc66ae
|
@ -2,7 +2,8 @@ import pytest
|
|||
from quixote import cleanup, get_response
|
||||
|
||||
from wcs import sessions
|
||||
from wcs.fields import EmailField, StringField
|
||||
from wcs.carddef import CardDef
|
||||
from wcs.fields import EmailField, ItemField, StringField
|
||||
from wcs.formdef import FormDef
|
||||
from wcs.qommon.http_request import HTTPRequest
|
||||
from wcs.wf.create_formdata import CreateFormdataWorkflowStatusItem, Mapping
|
||||
|
@ -278,3 +279,59 @@ def test_create_formdata_attach_to_history(two_pubs):
|
|||
target_formdef.remove_self()
|
||||
formdata.refresh_from_storage()
|
||||
assert 'deleted' in str(formdata.evolution[-1].parts[0].view())
|
||||
|
||||
|
||||
def test_create_formdata_item_optional_mapping(pub):
|
||||
FormDef.wipe()
|
||||
CardDef.wipe()
|
||||
|
||||
carddef = CardDef()
|
||||
carddef.name = 'Bar'
|
||||
carddef.fields = [
|
||||
StringField(id='0', label='Bar', varname='bar'),
|
||||
]
|
||||
carddef.digest_templates = {'default': '{{ form_var_bar }}'}
|
||||
carddef.store()
|
||||
carddef.data_class().wipe()
|
||||
|
||||
for i in range(0, 4):
|
||||
carddata = carddef.data_class()()
|
||||
carddata.data = {'0': 'Bar %s' % (i + 1)}
|
||||
carddata.store()
|
||||
|
||||
target_formdef = FormDef()
|
||||
target_formdef.name = 'Foo'
|
||||
target_formdef.fields = [
|
||||
ItemField(id='0', label='Bar', type='item', data_source={'type': 'carddef:bar'}, required=False),
|
||||
]
|
||||
target_formdef.store()
|
||||
target_formdef.data_class().wipe()
|
||||
|
||||
wf = Workflow(name='create-formdata')
|
||||
wf.possible_status = Workflow.get_default_workflow().possible_status[:]
|
||||
create = CreateFormdataWorkflowStatusItem()
|
||||
create.label = 'create a new linked form'
|
||||
create.id = '_create'
|
||||
create.formdef_slug = 'foo'
|
||||
create.mappings = [
|
||||
Mapping(field_id='0', expression='{% if False %}3{% endif %}'),
|
||||
]
|
||||
create.parent = wf.possible_status[1]
|
||||
wf.possible_status[1].items.insert(0, create)
|
||||
wf.store()
|
||||
|
||||
source_formdef = FormDef()
|
||||
source_formdef.name = 'Foo'
|
||||
source_formdef.fields = []
|
||||
source_formdef.workflow_id = wf.id
|
||||
source_formdef.store()
|
||||
source_formdef.data_class().wipe()
|
||||
|
||||
formdata = source_formdef.data_class()()
|
||||
formdata.data = {}
|
||||
formdata.just_created()
|
||||
formdata.perform_workflow()
|
||||
|
||||
assert target_formdef.data_class().count() == 1
|
||||
target_formdata = target_formdef.data_class().get(1)
|
||||
assert target_formdata.data == {'0': None}
|
||||
|
|
|
@ -2100,7 +2100,7 @@ class ItemField(WidgetField, MapOptionsMixin, ItemFieldMixin):
|
|||
return value
|
||||
|
||||
def convert_value_from_anything(self, value):
|
||||
if value is None:
|
||||
if not value:
|
||||
return None
|
||||
value = str(value)
|
||||
if self.data_source:
|
||||
|
|
Loading…
Reference in New Issue