@@ -36,19 +36,25 @@ def workflow_info(self):
3636 )
3737
3838 @pytest .fixture
39- def mock_workflow_func (self ):
40- """Create a mock workflow function."""
41- def workflow_func (input_data ):
42- return f"processed: { input_data } "
43- return workflow_func
39+ def mock_workflow_definition (self ):
40+ """Create a mock workflow definition."""
41+ from cadence .workflow import WorkflowDefinition , WorkflowDefinitionOptions , workflow
42+
43+ class TestWorkflow :
44+ @workflow .run
45+ def weird_name (self , input_data ):
46+ return f"processed: { input_data } "
47+
48+ workflow_opts = WorkflowDefinitionOptions (name = "test_workflow" )
49+ return WorkflowDefinition .wrap (TestWorkflow , workflow_opts )
4450
4551 @pytest .fixture
46- def workflow_engine (self , mock_client , workflow_info , mock_workflow_func ):
52+ def workflow_engine (self , mock_client , workflow_info , mock_workflow_definition ):
4753 """Create a WorkflowEngine instance."""
4854 return WorkflowEngine (
4955 info = workflow_info ,
5056 client = mock_client ,
51- workflow_func = mock_workflow_func
57+ workflow_definition = mock_workflow_definition
5258 )
5359
5460 def create_mock_decision_task (self , workflow_id = "test-workflow" , run_id = "test-run" , workflow_type = "test_workflow" ):
@@ -211,10 +217,13 @@ async def test_extract_workflow_input_deserialization_error(self, workflow_engin
211217 def test_execute_workflow_function_sync (self , workflow_engine ):
212218 """Test synchronous workflow function execution."""
213219 input_data = "test-input"
214-
220+
221+ # Get the workflow function from the instance
222+ workflow_func = workflow_engine ._workflow_definition .get_run_method (workflow_engine ._workflow_instance )
223+
215224 # Execute the workflow function
216- result = workflow_engine ._execute_workflow_function_once (workflow_engine . _workflow_func , input_data )
217-
225+ result = workflow_engine ._execute_workflow_function_once (workflow_func , input_data )
226+
218227 # Verify the result
219228 assert result == "processed: test-input"
220229
@@ -239,20 +248,21 @@ def test_execute_workflow_function_none(self, workflow_engine):
239248 with pytest .raises (TypeError , match = "'NoneType' object is not callable" ):
240249 workflow_engine ._execute_workflow_function_once (None , input_data )
241250
242- def test_workflow_engine_initialization (self , workflow_engine , workflow_info , mock_client , mock_workflow_func ):
251+ def test_workflow_engine_initialization (self , workflow_engine , workflow_info , mock_client , mock_workflow_definition ):
243252 """Test WorkflowEngine initialization."""
244253 assert workflow_engine ._context is not None
245- assert workflow_engine ._workflow_func == mock_workflow_func
254+ assert workflow_engine ._workflow_definition == mock_workflow_definition
255+ assert workflow_engine ._workflow_instance is not None
246256 assert workflow_engine ._decision_manager is not None
247257 assert workflow_engine ._is_workflow_complete is False
248258
249259 @pytest .mark .asyncio
250- async def test_workflow_engine_without_workflow_func (self , mock_client , workflow_info ):
251- """Test WorkflowEngine without workflow function ."""
260+ async def test_workflow_engine_without_workflow_definition (self , mock_client , workflow_info ):
261+ """Test WorkflowEngine without workflow definition ."""
252262 engine = WorkflowEngine (
253263 info = workflow_info ,
254264 client = mock_client ,
255- workflow_func = None
265+ workflow_definition = None
256266 )
257267
258268 decision_task = self .create_mock_decision_task ()
@@ -269,12 +279,21 @@ async def test_workflow_engine_without_workflow_func(self, mock_client, workflow
269279 async def test_workflow_engine_workflow_completion (self , workflow_engine , mock_client ):
270280 """Test workflow completion detection."""
271281 decision_task = self .create_mock_decision_task ()
272-
273- # Mock workflow function to return a result (indicating completion)
274- def completing_workflow_func (input_data ):
275- return "workflow-completed"
276-
277- workflow_engine ._workflow_func = completing_workflow_func
282+
283+ # Create a workflow definition that returns a result (indicating completion)
284+ from cadence .workflow import WorkflowDefinition , WorkflowDefinitionOptions , workflow
285+
286+ class CompletingWorkflow :
287+ @workflow .run
288+ def run (self , input_data ):
289+ return "workflow-completed"
290+
291+ workflow_opts = WorkflowDefinitionOptions (name = "completing_workflow" )
292+ completing_definition = WorkflowDefinition .wrap (CompletingWorkflow , workflow_opts )
293+
294+ # Replace the workflow definition and instance
295+ workflow_engine ._workflow_definition = completing_definition
296+ workflow_engine ._workflow_instance = completing_definition .cls ()
278297
279298 with patch .object (workflow_engine ._decision_manager , 'collect_pending_decisions' , return_value = []):
280299 # Process the decision
0 commit comments