diff --git a/src/workflow/engine.py b/src/workflow/engine.py index d841bab..e57a931 100644 --- a/src/workflow/engine.py +++ b/src/workflow/engine.py @@ -5,7 +5,7 @@ from typing import Any, Generator from components.admin.admin_db_manager import AdminDbManager from core.Expando import Expando -from core.jira import Jira +from core.jira import Jira, JiraRequestTypes from core.preprocessor import PlainTextPreprocessor from core.utils import UnreferencedNamesVisitor from utils.Datahelper import DataHelper @@ -96,11 +96,11 @@ class JiraDataProducer(DataProducer): logger = logging.getLogger("DataProcessor.Producer.Jira") - def __init__(self, session, settings_manager, component_id, request_type='issues', request='', fields=None): + def __init__(self, session, settings_manager, component_id, request_type='search', request='', fields=None): super().__init__(component_id) self._session = session self.settings_manager = settings_manager - self.request_type = request_type + self.request_type = request_type.value if isinstance(request_type, JiraRequestTypes) else request_type self.request = request self.fields = fields self.db = AdminDbManager(session, settings_manager).jira diff --git a/tests/test_default_data_presenter.py b/tests/test_workflow_engine_default_data_presenter.py similarity index 100% rename from tests/test_default_data_presenter.py rename to tests/test_workflow_engine_default_data_presenter.py diff --git a/tests/test_workflow_engine_integration.py b/tests/test_workflow_engine_integration.py new file mode 100644 index 0000000..9598655 --- /dev/null +++ b/tests/test_workflow_engine_integration.py @@ -0,0 +1,78 @@ +import pytest +from unittest.mock import Mock, patch +from core.Expando import Expando + +from core.jira import JiraRequestTypes +from core.settings_management import SettingsManager, MemoryDbEngine +from workflow.engine import JiraDataProducer, TableDataProducer + +JIRA_IMPORT_PATH = "workflow.engine.Jira" + + +@pytest.fixture +def mock_jira_search_1(): + with patch(JIRA_IMPORT_PATH) as mock_jira_class: + mock_jira_instance = Mock() + mock_jira_instance.search.return_value = [ + Expando({ + "key": "TEST-1", + "fields": { + "summary": "Test Issue", + "status": {"name": "Open"}, + "assignee": {"displayName": "Test User"} + } + }) + ] + mock_jira_class.return_value = mock_jira_instance + + yield mock_jira_instance # This allows us to access the mock instance in our tests + + +@pytest.fixture +def mock_jira_error(): + with patch(JIRA_IMPORT_PATH) as mock_jira_class: + mock_jira_instance = Mock() + mock_jira_instance.search.side_effect = Exception("Jira API Error") + mock_jira_class.return_value = mock_jira_instance + + yield mock_jira_instance + + +def get_jira_patch(jp: JiraDataProducer): + # Create and configure the mock instance + mock_jira_instance = Mock() + if jp.request_type == JiraRequestTypes.Search.value: + mock_jira_instance.search.return_value = [ + Expando({ + "key": "TEST-1", + "fields": { + "summary": "Test Issue", + "status": {"name": "Open"}, + "assignee": {"displayName": "Test User"} + } + }) + ] + else: + raise ValueError("Unsupported request type") + + return patch(JIRA_IMPORT_PATH, return_value=mock_jira_instance) + + +def jira_producer(session, request_type, request, fields=None): + return JiraDataProducer(session, + SettingsManager(MemoryDbEngine()), + "component_id", + request_type=request_type, + request=request, + fields=fields) + + +def test_i_can_produce_jira_search(session): + data = {} + jp = jira_producer(session, JiraRequestTypes.Search, "project=key1") + + with get_jira_patch(jp): + res = list(jp.process(data)) + + assert len(res) == 1 + assert res[0].key == "TEST-1"