0003-formdefs-report-all-missing-things-in-one-time-57753.patch
tests/test_formdef_import.py | ||
---|---|---|
396 | 396 | |
397 | 397 |
formdef.fields = [fields.StringField(id='1', type='string', data_source={'type': 'foobar'})] |
398 | 398 |
export = ET.tostring(export_to_indented_xml(formdef)) |
399 |
with pytest.raises(FormdefImportError, match='Unknown datasources'):
|
|
399 |
with pytest.raises(FormdefImportError) as excinfo:
|
|
400 | 400 |
FormDef.import_from_xml(io.BytesIO(export)) |
401 |
assert excinfo.value.msg == 'Unknown referenced objects' |
|
402 |
assert excinfo.value.details == 'Unknown datasources: foobar' |
|
401 | 403 | |
402 | 404 |
# carddef as datasource |
403 | 405 |
carddef = CardDef() |
... | ... | |
454 | 456 | |
455 | 457 |
BlockDef.wipe() |
456 | 458 |
export = ET.tostring(export_to_indented_xml(formdef)) |
457 |
with pytest.raises(FormdefImportError, match='Unknown field type'):
|
|
459 |
with pytest.raises(FormdefImportError) as excinfo:
|
|
458 | 460 |
FormDef.import_from_xml(io.BytesIO(export)) |
461 |
assert excinfo.value.msg == 'Unknown referenced objects' |
|
462 |
assert excinfo.value.details == 'Unknown field types: block:foobar' |
|
459 | 463 | |
460 | 464 | |
461 | 465 |
def test_duplicated_field_ids(pub): |
... | ... | |
824 | 828 |
assert custom_views[0].order_by == 'receipt_time' |
825 | 829 |
assert custom_views[0].formdef_id == formdef2.id |
826 | 830 |
assert custom_views[0].formdef_type == 'formdef' |
831 | ||
832 | ||
833 |
def test_import_formdef_multiple_errors(pub): |
|
834 |
BlockDef.wipe() |
|
835 | ||
836 |
formdef = FormDef() |
|
837 |
formdef.name = 'foo' |
|
838 |
formdef.fields = [ |
|
839 |
fields.BlockField(id='1', type='block:foobar'), |
|
840 |
fields.BlockField(id='2', type='block:foobaz'), |
|
841 |
fields.StringField(id='3', type='string', data_source={'type': 'foobar'}), |
|
842 |
fields.StringField(id='4', type='string', data_source={'type': 'carddef:unknown'}), |
|
843 |
] |
|
844 | ||
845 |
export = ET.tostring(export_to_indented_xml(formdef)) |
|
846 |
with pytest.raises(FormdefImportError) as excinfo: |
|
847 |
FormDef.import_from_xml(io.BytesIO(export)) |
|
848 |
assert excinfo.value.msg == 'Unknown referenced objects' |
|
849 |
assert ( |
|
850 |
excinfo.value.details |
|
851 |
== 'Unknown field types: block:foobar, block:foobaz; Unknown datasources: carddef:unknown, foobar' |
|
852 |
) |
tests/test_workflow_import.py | ||
---|---|---|
927 | 927 | |
928 | 928 |
for wf in [wf1, wf2, wf3]: |
929 | 929 |
export = ET.tostring(export_to_indented_xml(wf)) |
930 |
with pytest.raises(WorkflowImportError, match='Unknown datasources'):
|
|
930 |
with pytest.raises(WorkflowImportError) as excinfo:
|
|
931 | 931 |
Workflow.import_from_xml(io.BytesIO(export)) |
932 |
assert excinfo.value.msg == 'Unknown referenced objects' |
|
933 |
assert excinfo.value.details == 'Unknown datasources: foobar' |
|
932 | 934 | |
933 | 935 |
# carddef as datasource |
934 | 936 |
CardDef.wipe() |
... | ... | |
951 | 953 | |
952 | 954 |
for wf in [wf1, wf2, wf3]: |
953 | 955 |
export = ET.tostring(export_to_indented_xml(wf)) |
954 |
with pytest.raises(WorkflowImportError, match='Unknown datasources'):
|
|
956 |
with pytest.raises(WorkflowImportError) as excinfo:
|
|
955 | 957 |
Workflow.import_from_xml(io.BytesIO(export)) |
958 |
assert excinfo.value.msg == 'Unknown referenced objects' |
|
959 |
assert excinfo.value.details == 'Unknown datasources: carddef:unknown' |
|
956 | 960 | |
957 | 961 |
# carddef custom view as datasource |
958 | 962 |
pub.custom_view_class.wipe() |
... | ... | |
978 | 982 | |
979 | 983 |
for wf in [wf1, wf2, wf3]: |
980 | 984 |
export = ET.tostring(export_to_indented_xml(wf)) |
981 |
with pytest.raises(WorkflowImportError, match='Unknown datasources'):
|
|
985 |
with pytest.raises(WorkflowImportError) as excinfo:
|
|
982 | 986 |
Workflow.import_from_xml(io.BytesIO(export)) |
987 |
assert excinfo.value.msg == 'Unknown referenced objects' |
|
988 |
assert excinfo.value.details == 'Unknown datasources: carddef:foo:unknown' |
|
983 | 989 | |
984 | 990 | |
985 | 991 |
def test_workflow_with_block(pub): |
... | ... | |
1012 | 1018 |
BlockDef.wipe() |
1013 | 1019 |
for wf in [wf1, wf2, wf3]: |
1014 | 1020 |
export = ET.tostring(export_to_indented_xml(wf)) |
1015 |
with pytest.raises(WorkflowImportError, match='Unknown field type'):
|
|
1021 |
with pytest.raises(WorkflowImportError) as excinfo:
|
|
1016 | 1022 |
Workflow.import_from_xml(io.BytesIO(export)) |
1023 |
assert excinfo.value.msg == 'Unknown referenced objects' |
|
1024 |
assert excinfo.value.details == 'Unknown field types: block:foobar' |
|
1017 | 1025 | |
1018 | 1026 | |
1019 | 1027 |
def test_workflow_with_category(pub): |
wcs/formdef.py | ||
---|---|---|
1190 | 1190 |
setattr(formdef, boolean_attribute, value.text == 'true') |
1191 | 1191 | |
1192 | 1192 |
formdef.fields = [] |
1193 |
unknown_field_types = set() |
|
1193 | 1194 |
for i, field in enumerate(tree.find('fields')): |
1194 | 1195 |
try: |
1195 | 1196 |
field_o = fields.get_field_class_by_type(field.findtext('type'))() |
1196 | 1197 |
except KeyError: |
1197 |
raise FormdefImportError(_('Unknown field type'), details=field.findtext('type')) |
|
1198 |
unknown_field_types.add(field.findtext('type')) |
|
1199 |
continue |
|
1198 | 1200 |
field_o.init_with_xml(field, charset, include_id=True) |
1199 | 1201 |
if fix_on_error or not field_o.id: |
1200 | 1202 |
# this assumes all fields will have id, or none of them |
... | ... | |
1319 | 1321 |
value = xml_node_text(child) |
1320 | 1322 |
formdef.digest_templates[key] = value |
1321 | 1323 | |
1324 |
unknown_datasources = set() |
|
1322 | 1325 |
if check_datasources: |
1323 | 1326 |
# check if datasources are defined |
1324 |
unknown_datasources = set() |
|
1325 | 1327 |
for field in formdef.fields: |
1326 | 1328 |
data_source = getattr(field, 'data_source', None) |
1327 | 1329 |
if data_source: |
... | ... | |
1354 | 1356 |
except IndexError: |
1355 | 1357 |
unknown_datasources.add(data_source_id) |
1356 | 1358 | |
1359 |
if unknown_field_types or unknown_datasources: |
|
1360 |
details = [] |
|
1361 |
if unknown_field_types: |
|
1362 |
details.append('%s: %s' % (_('Unknown field types'), ', '.join(sorted(unknown_field_types)))) |
|
1357 | 1363 |
if unknown_datasources: |
1358 |
raise FormdefImportError( |
|
1359 |
_('Unknown datasources'), details=', '.join(sorted(unknown_datasources)) |
|
1360 |
) |
|
1364 |
details.append('%s: %s' % (_('Unknown datasources'), ', '.join(sorted(unknown_datasources)))) |
|
1365 |
raise FormdefImportError(_('Unknown referenced objects'), details='; '.join(details)) |
|
1361 | 1366 | |
1362 | 1367 |
return formdef |
1363 | 1368 | |
1364 |
- |