mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 08:26:21 +02:00
80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
import asyncio
|
|
from unittest.mock import AsyncMock, MagicMock
|
|
|
|
from trustgraph.base.flow import Flow
|
|
from trustgraph.base.parameter_spec import Parameter, ParameterSpec
|
|
from trustgraph.base.spec import Spec
|
|
|
|
|
|
def test_parameter_spec_is_a_spec_and_adds_parameter_value():
|
|
spec = ParameterSpec("temperature")
|
|
flow = MagicMock(parameter={})
|
|
processor = MagicMock()
|
|
|
|
spec.add(flow, processor, {"parameters": {"temperature": 0.7}})
|
|
|
|
assert isinstance(spec, Spec)
|
|
assert "temperature" in flow.parameter
|
|
assert isinstance(flow.parameter["temperature"], Parameter)
|
|
assert flow.parameter["temperature"].value == 0.7
|
|
|
|
|
|
def test_parameter_spec_defaults_missing_values_to_none():
|
|
spec = ParameterSpec("model")
|
|
flow = MagicMock(parameter={})
|
|
|
|
spec.add(flow, MagicMock(), {})
|
|
|
|
assert flow.parameter["model"].value is None
|
|
|
|
|
|
def test_parameter_start_and_stop_are_awaitable():
|
|
parameter = Parameter("value")
|
|
|
|
assert asyncio.run(parameter.start()) is None
|
|
assert asyncio.run(parameter.stop()) is None
|
|
|
|
|
|
def test_flow_initialization_calls_registered_specs():
|
|
spec_one = MagicMock()
|
|
spec_two = MagicMock()
|
|
processor = MagicMock(specifications=[spec_one, spec_two])
|
|
|
|
flow = Flow("processor-1", "flow-a", processor, {"answer": 42})
|
|
|
|
assert flow.id == "processor-1"
|
|
assert flow.name == "flow-a"
|
|
assert flow.producer == {}
|
|
assert flow.consumer == {}
|
|
assert flow.parameter == {}
|
|
spec_one.add.assert_called_once_with(flow, processor, {"answer": 42})
|
|
spec_two.add.assert_called_once_with(flow, processor, {"answer": 42})
|
|
|
|
|
|
def test_flow_start_and_stop_visit_all_consumers():
|
|
consumer_one = AsyncMock()
|
|
consumer_two = AsyncMock()
|
|
flow = Flow("processor-1", "flow-a", MagicMock(specifications=[]), {})
|
|
flow.consumer = {"one": consumer_one, "two": consumer_two}
|
|
|
|
asyncio.run(flow.start())
|
|
asyncio.run(flow.stop())
|
|
|
|
consumer_one.start.assert_called_once_with()
|
|
consumer_two.start.assert_called_once_with()
|
|
consumer_one.stop.assert_called_once_with()
|
|
consumer_two.stop.assert_called_once_with()
|
|
|
|
|
|
def test_flow_call_returns_values_in_priority_order():
|
|
flow = Flow("processor-1", "flow-a", MagicMock(specifications=[]), {})
|
|
flow.producer["shared"] = "producer-value"
|
|
flow.consumer["consumer-only"] = "consumer-value"
|
|
flow.consumer["shared"] = "consumer-value"
|
|
flow.parameter["parameter-only"] = Parameter("parameter-value")
|
|
flow.parameter["shared"] = Parameter("parameter-value")
|
|
|
|
assert flow("shared") == "producer-value"
|
|
assert flow("consumer-only") == "consumer-value"
|
|
assert flow("parameter-only") == "parameter-value"
|
|
assert flow("missing") is None
|