Working implementation of DefaultDataPresenter
This commit is contained in:
@@ -2,6 +2,8 @@ from unittest.mock import MagicMock
|
||||
|
||||
import pytest
|
||||
|
||||
from core.Expando import Expando
|
||||
from workflow.DefaultDataPresenter import DefaultDataPresenter
|
||||
from workflow.engine import WorkflowEngine, DataProcessor, DataProducer, DataFilter, DataPresenter
|
||||
|
||||
|
||||
@@ -11,6 +13,24 @@ def engine():
|
||||
return WorkflowEngine()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def presenter_sample_data():
|
||||
return Expando({
|
||||
"id": 123,
|
||||
"title": "My Awesome Task",
|
||||
"creator": {
|
||||
"id": 1,
|
||||
"name": "John Doe",
|
||||
"email": "john.doe@example.com"
|
||||
},
|
||||
"assignee": {
|
||||
"id": 2,
|
||||
"name": "Jane Smith",
|
||||
"email": "jane.smith@example.com"
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
def test_empty_workflow_initialization(engine):
|
||||
"""Test that a new WorkflowEngine has no processors."""
|
||||
assert len(engine.processors) == 0
|
||||
@@ -124,3 +144,21 @@ def test_branching_workflow(engine):
|
||||
|
||||
result = engine.run_to_list()
|
||||
assert result == [1, 10, 2, 20]
|
||||
|
||||
|
||||
def test_presenter_i_can_use_wildcards(presenter_sample_data):
|
||||
presenter1 = DefaultDataPresenter("component_id", "id, creator.*")
|
||||
res = presenter1.present(presenter_sample_data).as_dict()
|
||||
assert res == {"id": 123, "creator.id": 1, "creator.name": "John Doe", "creator.email": "john.doe@example.com"}
|
||||
|
||||
|
||||
def test_presenter_i_can_rename_wildcard_with_specific_override(presenter_sample_data):
|
||||
presenter1 = DefaultDataPresenter("component_id", "creator.*=*, creator.name=author_name")
|
||||
res = presenter1.present(presenter_sample_data).as_dict()
|
||||
assert res == {"id": 1, "email": "john.doe@example.com", "author_name": "John Doe"}
|
||||
|
||||
|
||||
def test_presenter_i_can_manage_collisions(presenter_sample_data):
|
||||
presenter1 = DefaultDataPresenter("component_id", "creator.*=*, assignee.*=*")
|
||||
with pytest.raises(ValueError, match="Collision detected for field"):
|
||||
presenter1.present(presenter_sample_data).as_dict()
|
||||
|
||||
Reference in New Issue
Block a user