from unittest.mock import MagicMock from unittest.mock import patch import pytest from ows_accounting.models import workflow_service @pytest.fixture def mock_execute_workflow_response(): mock_exe_resp_obj = MagicMock() mock_exe_resp_obj.message = 'Workflow is executed.' mock_response_obj = MagicMock() mock_response_obj.Response.return_value = mock_exe_resp_obj return mock_response_obj @pytest.fixture def mock_gen_workflow_id_response(): mock_exe_resp_obj = MagicMock() mock_exe_resp_obj.message = 'Workflow is executed.' return mock_exe_resp_obj @patch('ows_accounting.models.workflow_service.swf') def test_execute_workflow(mock_swf): """Test execute workflow. """ model = workflow_service.WorkflowService( workflow_service.AMAZON_SIMPLE_WORKFLOW) resp = model.execute_workflow( 'test_workflow_id', 'test_correlation_id', status='PENDING') assert resp.message == 'Workflow is executed.' assert resp.status == 200 @patch('ows_accounting.models.workflow_service.swf') def test_execute_workflow_has_problem(mock_swf): """Test execute workflow fails. """ mock_swf.execute_workflow.side_effect = Exception('dude') model = workflow_service.WorkflowService( workflow_service.AMAZON_SIMPLE_WORKFLOW) resp = model.execute_workflow( 'test_workflow_id', 'test_correlation_id', status='PENDING') assert resp.errors.get('message') == 'dude' assert resp.status == 500 @patch('ows_accounting.models.workflow_service.swf') def test_generate_workflow_id(mock_swf): """Test generate_workflow_id. """ mock_swf.generate_workflow_id.return_value = 'test_workflow_id' model = workflow_service.WorkflowService( workflow_service.AMAZON_SIMPLE_WORKFLOW) resp = model.generate_workflow_id('prefix', status='PENDING') assert resp.message == 'test_workflow_id' assert resp.status == 200 @patch('ows_accounting.models.workflow_service.swf') def test_generate_workflow_id_has_problem(mock_swf): """Test generate_workflow_id. """ mock_swf.generate_workflow_id.side_effect = Exception('dude') model = workflow_service.WorkflowService( workflow_service.AMAZON_SIMPLE_WORKFLOW) resp = model.generate_workflow_id('prefix', status='PENDING') assert resp.message == 'dude' assert resp.status == 500 def test_not_supported_error(): """Test not supported error """ with pytest.raises(Exception) as err: workflow_service.WorkflowService('bla') assert str(err) == 'Service: bla is not supported.'