0001-fields-add-check-for-value-given-as-block-field-6343.patch
tests/workflow/test_all.py | ||
---|---|---|
5749 | 5749 |
assert formdata.data['bo1_display'] == 'XNoneY' |
5750 | 5750 | |
5751 | 5751 | |
5752 |
def test_set_backoffice_field_invalid_block_value(pub): |
|
5753 |
BlockDef.wipe() |
|
5754 |
Workflow.wipe() |
|
5755 |
FormDef.wipe() |
|
5756 | ||
5757 |
block = BlockDef() |
|
5758 |
block.name = 'foobar' |
|
5759 |
block.fields = [StringField(id='123', required=True, label='Test', type='string', varname='foo')] |
|
5760 |
block.store() |
|
5761 | ||
5762 |
wf = Workflow(name='xxx') |
|
5763 |
wf.backoffice_fields_formdef = WorkflowBackofficeFieldsFormDef(wf) |
|
5764 |
st1 = wf.add_status('Status1') |
|
5765 |
wf.backoffice_fields_formdef.fields = [ |
|
5766 |
BlockField(id='bo1', label='1st backoffice field', max_items=3, type='block:foobar'), |
|
5767 |
] |
|
5768 |
wf.store() |
|
5769 | ||
5770 |
formdef = FormDef() |
|
5771 |
formdef.name = 'baz' |
|
5772 |
formdef.fields = [] |
|
5773 |
formdef.workflow_id = wf.id |
|
5774 |
formdef.store() |
|
5775 | ||
5776 |
formdata = formdef.data_class()() |
|
5777 |
formdata.just_created() |
|
5778 |
formdata.store() |
|
5779 |
get_publisher().substitutions.feed(formdata) |
|
5780 | ||
5781 |
item = SetBackofficeFieldsWorkflowStatusItem() |
|
5782 |
item.parent = st1 |
|
5783 |
item.fields = [{'field_id': 'bo1', 'value': 'xxx'}] |
|
5784 | ||
5785 |
pub.loggederror_class.wipe() |
|
5786 |
item.perform(formdata) |
|
5787 |
assert pub.loggederror_class.count() == 1 |
|
5788 |
logged_error = pub.loggederror_class.select()[0] |
|
5789 |
assert ( |
|
5790 |
logged_error.summary |
|
5791 |
== 'Failed to set Field Block (foobar) field (bo1), error: invalid value for block' |
|
5792 |
) |
|
5793 | ||
5794 |
formdata = formdef.data_class().get(formdata.id) |
|
5795 |
assert not formdata.data.get('bo1') |
|
5796 | ||
5797 | ||
5752 | 5798 |
def test_set_backoffice_field_immediate_use(http_requests, pub): |
5753 | 5799 |
Workflow.wipe() |
5754 | 5800 |
FormDef.wipe() |
wcs/fields.py | ||
---|---|---|
3855 | 3855 |
value = None |
3856 | 3856 |
if isinstance(value, BlockRowValue): |
3857 | 3857 |
value = value.make_value(block=self.block, field=self, data=data) |
3858 |
elif value and not (isinstance(value, dict) and 'data' in value and 'schema' in value): |
|
3859 |
raise SetValueError('invalid value for block') |
|
3858 | 3860 |
super().set_value(data, value, **kwargs) |
3859 | 3861 | |
3860 | 3862 |
def get_json_value(self, value, **kwargs): |
wcs/wf/backoffice_fields.py | ||
---|---|---|
169 | 169 |
except ValueError as e: |
170 | 170 |
summary = _('Failed to convert %(class)s value to %(kind)s field (%(id)s)') % { |
171 | 171 |
'class': type(new_value), |
172 |
'kind': getattr(formdef_field, 'description', _('unknown')),
|
|
172 |
'kind': formdef_field.get_type_label(),
|
|
173 | 173 |
'id': field['field_id'], |
174 | 174 |
} |
175 | 175 |
expression_dict = self.get_expression(field['value']) |
... | ... | |
187 | 187 |
formdef_field.set_value(formdata.data, new_value) |
188 | 188 |
except SetValueError as e: |
189 | 189 |
summary = _('Failed to set %(kind)s field (%(id)s), error: %(exc)s') % { |
190 |
'kind': getattr(formdef_field, 'description', _('unknown')),
|
|
190 |
'kind': formdef_field.get_type_label(),
|
|
191 | 191 |
'id': field['field_id'], |
192 | 192 |
'exc': e, |
193 | 193 |
} |
194 |
- |