yield mock_instance
-@pytest.mark.asyncio
-async def test_get_client():
- WFTemporal.clients = {}
- with generate_mock_client() as client:
- temporal = WFTemporal(temporal_api="localhost")
- result = await temporal.get_client()
- assert result == client
-
-
-@pytest.mark.asyncio
-async def test_get_cached_client():
- WFTemporal.clients = {}
- client_1 = None
- client_2 = None
- with generate_mock_client() as client:
- temporal = WFTemporal(temporal_api="localhost")
- client_1 = await temporal.get_client()
- assert client_1 == client
-
- with generate_mock_client() as client:
- temporal = WFTemporal(temporal_api="localhost")
- client_2 = await temporal.get_client()
- # We should get the same client as before, not a new one
- assert client_2 == client_1
- assert client_2 != client
-
-
@pytest.mark.asyncio
@mock.patch("osm_common.wftemporal.uuid")
async def test_start_workflow_no_id(mock_uuid):
- WFTemporal.clients = {}
+ WFTemporal._client = None
mock_uuid.uuid4.return_value = "01234567-89abc-def-0123-456789abcdef"
with generate_mock_client() as client:
client.start_workflow.return_value = "handle"
- temporal = WFTemporal(temporal_api="localhost")
+ temporal = WFTemporal()
result = await temporal.start_workflow(
task_queue="q", workflow_name="workflow", workflow_data="data"
)
@pytest.mark.asyncio
async def test_start_workflow_with_id():
- WFTemporal.clients = {}
+ WFTemporal._client = None
with generate_mock_client() as client:
client.start_workflow.return_value = "handle"
- temporal = WFTemporal(temporal_api="localhost")
+ temporal = WFTemporal()
result = await temporal.start_workflow(
task_queue="q", id="id", workflow_name="workflow", workflow_data="data"
)
@pytest.mark.asyncio
async def test_execute_workflow_with_id():
- WFTemporal.clients = {}
+ WFTemporal._client = None
with generate_mock_client() as client:
handle = Mock(WorkflowHandle)
handle.result = AsyncMock(return_value="success")
client.start_workflow.return_value = handle
- temporal = WFTemporal(temporal_api="localhost")
+ temporal = WFTemporal()
result = await temporal.execute_workflow(
task_queue="q",
id="another id",
client.start_workflow.assert_awaited_once_with(
workflow="workflow-with-result", arg="data", id="another id", task_queue="q"
)
+
+
+@pytest.mark.asyncio
+async def test_client_cache():
+ WFTemporal._client = None
+
+ with generate_mock_client() as client:
+ handle = Mock(WorkflowHandle)
+ handle.result = AsyncMock(return_value="success")
+ client.start_workflow.return_value = handle
+
+ temporal = WFTemporal()
+ result = await temporal.execute_workflow(
+ task_queue="q",
+ id="another id",
+ workflow_name="workflow-with-result",
+ workflow_data="data",
+ )
+ assert result == "success"
+ client.start_workflow.assert_awaited_once_with(
+ workflow="workflow-with-result", arg="data", id="another id", task_queue="q"
+ )
+
+ temporal = WFTemporal()
+ result = await temporal.execute_workflow(
+ task_queue="q",
+ id="yet another id",
+ workflow_name="workflow-with-result",
+ workflow_data="more data",
+ )
+ assert result == "success"
+ client.start_workflow.assert_awaited_with(
+ workflow="workflow-with-result",
+ arg="more data",
+ id="yet another id",
+ task_queue="q",
+ )