From d23295e9fceaa2eea05e78e116bd908eb4625c6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Corentin=20S=C3=A9chet?= Date: Fri, 25 Feb 2022 16:52:39 +0100 Subject: [PATCH] wcs: Improved error reporting when importing a file of the wrong type (#62109) --- tests/test_blockdef_import.py | 12 ++++++++++++ tests/test_formdef_import.py | 7 +++++++ tests/test_workflow_import.py | 7 +++++++ wcs/blocks.py | 7 ++++++- wcs/formdef.py | 7 ++++++- wcs/workflows.py | 9 +++++++-- 6 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 tests/test_blockdef_import.py diff --git a/tests/test_blockdef_import.py b/tests/test_blockdef_import.py new file mode 100644 index 00000000..a406f764 --- /dev/null +++ b/tests/test_blockdef_import.py @@ -0,0 +1,12 @@ +import io + +import pytest + +from wcs.blocks import BlockDef, BlockdefImportError + + +def test_import_root_node_error(): + export = b'Name' + with pytest.raises(BlockdefImportError) as excinfo: + BlockDef.import_from_xml(io.BytesIO(export)) + assert '' in excinfo.value.msg diff --git a/tests/test_formdef_import.py b/tests/test_formdef_import.py index 833c3933..c20af863 100644 --- a/tests/test_formdef_import.py +++ b/tests/test_formdef_import.py @@ -867,3 +867,10 @@ def test_import_formdef_multiple_errors(pub): 'Unknown field types: foobaz; ' 'Unknown fields blocks: foobar, foobaz' ) + + +def test_import_formdef_root_node_error(): + export = b'Name' + with pytest.raises(FormdefImportError) as excinfo: + FormDef.import_from_xml(io.BytesIO(export)) + assert '' in excinfo.value.msg diff --git a/tests/test_workflow_import.py b/tests/test_workflow_import.py index 6f4ef2f4..36c9d7a6 100644 --- a/tests/test_workflow_import.py +++ b/tests/test_workflow_import.py @@ -1135,3 +1135,10 @@ def test_import_workflow_multiple_errors(pub): 'Unknown mail templates: unknown-mt-1, unknown-mt-2; ' 'Unknown roles: unknown-role1, unknown-role2' ) + + +def test_import_root_node_error(): + export = b'Name' + with pytest.raises(WorkflowImportError) as excinfo: + Workflow.import_from_xml(io.BytesIO(export)) + assert '' in excinfo.value.msg diff --git a/wcs/blocks.py b/wcs/blocks.py index 99c10930..1578bfa7 100644 --- a/wcs/blocks.py +++ b/wcs/blocks.py @@ -176,7 +176,12 @@ class BlockDef(StorableObject): tree = tree.getroot() if tree.tag != cls.xml_root_node: - raise BlockdefImportError(_('Unexpected root node')) + raise BlockdefImportError( + _( + 'Provided xml file doesn\'t seems to be a block definition: it starts with a <%s> tag.)' + % tree.tag + ) + ) if include_id and tree.attrib.get('id'): blockdef.id = tree.attrib.get('id') diff --git a/wcs/formdef.py b/wcs/formdef.py index a8eb2893..62fb9376 100644 --- a/wcs/formdef.py +++ b/wcs/formdef.py @@ -1351,7 +1351,12 @@ class FormDef(StorableObject): tree = tree.getroot() if tree.tag != cls.xml_root_node: - raise FormdefImportError(_('Unexpected root node')) + raise FormdefImportError( + _( + 'Provided xml file doesn\'t seems to be a form definition: it starts with a <%s> tag.)' + % tree.tag + ) + ) if include_id and tree.attrib.get('id'): formdef.id = tree.attrib.get('id') diff --git a/wcs/workflows.py b/wcs/workflows.py index 3e9b64e3..29ddb857 100644 --- a/wcs/workflows.py +++ b/wcs/workflows.py @@ -851,8 +851,13 @@ class Workflow(StorableObject): if not ET.iselement(tree): tree = tree.getroot() - if tree.tag != 'workflow': - raise WorkflowImportError(_('Not a workflow')) + if tree.tag != cls.xml_root_node: + raise WorkflowImportError( + _( + 'Provided xml file doesn\'t seems to be a workflow definition: it starts with a <%s> tag.)' + % tree.tag + ) + ) if include_id and tree.attrib.get('id'): workflow.id = tree.attrib.get('id') -- 2.34.1