Adding integration tests for workflow engine
This commit is contained in:
215
tests/test_workflow_engine_default_data_presenter.py
Normal file
215
tests/test_workflow_engine_default_data_presenter.py
Normal file
@@ -0,0 +1,215 @@
|
||||
import pytest
|
||||
|
||||
from core.Expando import Expando
|
||||
from workflow.DefaultDataPresenter import DefaultDataPresenter
|
||||
|
||||
|
||||
def test_i_can_present_static_mappings():
|
||||
mappings_def = "field1 = renamed_1 , field2 "
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
data = Expando({"field1": "value1", "field2": "value2", "field3": "value3"})
|
||||
|
||||
actual = presenter.present(data)
|
||||
|
||||
assert actual == Expando({"renamed_1": "value1", "field2": "value2"}) # field3 is removed
|
||||
|
||||
|
||||
def test_i_can_present_implicit_renaming():
|
||||
mappings_def = "root.field1="
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
as_dict = {"root": {"field1": "value1"}}
|
||||
data = Expando(as_dict)
|
||||
|
||||
actual = presenter.present(data)
|
||||
|
||||
assert isinstance(actual, Expando)
|
||||
assert actual.as_dict() == {"field1": "value1"}
|
||||
|
||||
|
||||
def test_the_latter_mappings_take_precedence():
|
||||
mappings_def = "field1 = renamed_1 , field1 "
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
data = Expando({"field1": "value1", "field2": "value2", "field3": "value3"})
|
||||
|
||||
actual = presenter.present(data)
|
||||
|
||||
assert actual == Expando({"field1": "value1"}) # field3 is removed
|
||||
|
||||
|
||||
def test_i_can_present_static_mappings_with_sub_fields():
|
||||
mappings_def = "root.field1 = renamed_1 , root.field2, root.sub_field.field3, root.sub_field.field4=renamed4 "
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
as_dict = {"root": {"field1": "value1",
|
||||
"field2": "value2",
|
||||
"sub_field": {"field3": "value3",
|
||||
"field4": "value4"
|
||||
}}}
|
||||
data = Expando(as_dict)
|
||||
|
||||
actual = presenter.present(data)
|
||||
|
||||
assert isinstance(actual, Expando)
|
||||
assert actual.as_dict() == {"renamed_1": "value1",
|
||||
"root.field2": "value2",
|
||||
"root.sub_field.field3": "value3",
|
||||
"renamed4": "value4"}
|
||||
|
||||
|
||||
def test_i_can_present_dynamic_mappings():
|
||||
mappings_def = "*"
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
data = Expando({"field1": "value1", "field2": "value2", "field3": "value3"})
|
||||
|
||||
actual = presenter.present(data)
|
||||
|
||||
assert actual == Expando({"field1": "value1", "field2": "value2", "field3": "value3"})
|
||||
|
||||
|
||||
def test_i_can_present_dynamic_mappings_for_complex_data():
|
||||
mappings_def = "*"
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
as_dict = {"root": {"field1": "value1",
|
||||
"field2": "value2",
|
||||
"sub_field": {"field3": "value3",
|
||||
"field4": "value4"
|
||||
}
|
||||
},
|
||||
"field5": "value5"}
|
||||
data = Expando(as_dict)
|
||||
|
||||
actual = presenter.present(data)
|
||||
|
||||
assert isinstance(actual, Expando)
|
||||
assert actual.as_dict() == as_dict
|
||||
|
||||
|
||||
def test_i_can_present_dynamic_mappings_with_sub_fields():
|
||||
mappings_def = "root.sub_field.*"
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
as_dict = {"root": {"field1": "value1",
|
||||
"field2": "value2",
|
||||
"sub_field": {"field3": "value3",
|
||||
"field4": "value4"
|
||||
}}}
|
||||
data = Expando(as_dict)
|
||||
|
||||
actual = presenter.present(data)
|
||||
|
||||
assert isinstance(actual, Expando)
|
||||
assert actual.as_dict() == {"root.sub_field.field3": "value3",
|
||||
"root.sub_field.field4": "value4"}
|
||||
|
||||
|
||||
def test_i_can_present_dynamic_mappings_with_sub_fields_and_renames():
|
||||
mappings_def = "root.sub_field.*=*"
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
as_dict = {"root": {"field1": "value1",
|
||||
"field2": "value2",
|
||||
"sub_field": {"field3": "value3",
|
||||
"field4": "value4"
|
||||
}}}
|
||||
data = Expando(as_dict)
|
||||
|
||||
actual = presenter.present(data)
|
||||
|
||||
assert isinstance(actual, Expando)
|
||||
assert actual.as_dict() == {"field3": "value3",
|
||||
"field4": "value4"}
|
||||
|
||||
|
||||
def test_i_can_present_dynamic_mappings_with_sub_fields_and_implicit_renames():
|
||||
mappings_def = "root.sub_field.*="
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
as_dict = {"root": {"field1": "value1",
|
||||
"field2": "value2",
|
||||
"sub_field": {"field3": "value3",
|
||||
"field4": "value4"
|
||||
}}}
|
||||
data = Expando(as_dict)
|
||||
|
||||
actual = presenter.present(data)
|
||||
|
||||
assert isinstance(actual, Expando)
|
||||
assert actual.as_dict() == {"field3": "value3",
|
||||
"field4": "value4"}
|
||||
|
||||
|
||||
def test_i_can_present_dynamic_mappings_and_rename_them():
|
||||
mappings_def = "*=*" # does not really have effects as '*' only goes down one level
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
as_dict = {"root1": {"field1": "value1",
|
||||
"field2": "value2"},
|
||||
"root2": {"field3": "value3",
|
||||
"field4": "value4"}}
|
||||
data = Expando(as_dict)
|
||||
|
||||
actual = presenter.present(data)
|
||||
|
||||
assert isinstance(actual, Expando)
|
||||
assert actual.as_dict() == as_dict
|
||||
|
||||
|
||||
def test_i_can_present_static_and_dynamic_mappings():
|
||||
mappings_def = "root.field1 = renamed_1, root.sub_field.*"
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
as_dict = {"root": {"field1": "value1",
|
||||
"field2": "value2",
|
||||
"sub_field": {"field3": "value3",
|
||||
"field4": "value4"
|
||||
}}}
|
||||
data = Expando(as_dict)
|
||||
|
||||
actual = presenter.present(data)
|
||||
|
||||
assert isinstance(actual, Expando)
|
||||
assert actual.as_dict() == {"renamed_1": "value1",
|
||||
"root.sub_field.field3": "value3",
|
||||
"root.sub_field.field4": "value4"}
|
||||
|
||||
|
||||
def test_another_example_of_static_and_dynamic_mappings():
|
||||
mappings_def = "* , field1 = renamed_1"
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
data = Expando({"field1": "value1", "field2": "value2", "field3": "value3"})
|
||||
|
||||
actual = presenter.present(data)
|
||||
|
||||
assert actual == Expando({"renamed_1": "value1", "field2": "value2", "field3": "value3"}) # field3 is removed
|
||||
|
||||
|
||||
def test_i_can_detect_conflict_when_dynamically_renaming_a_field():
|
||||
mappings_def = "root_1.*=*, root_2.*=*"
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
as_dict = {"root_1": {"field1": "value1",
|
||||
"field2": "value2"},
|
||||
"root_2": {"field1": "value1",
|
||||
"field2": "value2"}}
|
||||
data = Expando(as_dict)
|
||||
|
||||
with pytest.raises(ValueError) as e:
|
||||
presenter.present(data)
|
||||
|
||||
assert str(e.value) == "Collision detected for field 'field1'. It is mapped from both 'root_1.*=*' and 'root_2.*=*'."
|
||||
|
||||
|
||||
def test_i_can_detect_declaration_error():
|
||||
mappings_def = "field1 ,, field2"
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
data = Expando({"field1": "value1", "field2": "value2", "field3": "value3"})
|
||||
|
||||
with pytest.raises(ValueError) as e:
|
||||
presenter.present(data)
|
||||
|
||||
|
||||
def test_i_can_detect_dynamic_error_declaration():
|
||||
mappings_def = "root.field1.*" # field1 is not an object
|
||||
presenter = DefaultDataPresenter("comp_id", mappings_def)
|
||||
as_dict = {"root": {"field1": "value1",
|
||||
"field2": "value2",
|
||||
"sub_field": {"field3": "value3",
|
||||
"field4": "value4"
|
||||
}}}
|
||||
data = Expando(as_dict)
|
||||
|
||||
with pytest.raises(ValueError) as e:
|
||||
presenter.present(data)
|
||||
Reference in New Issue
Block a user