Adding integration tests for workflow engine

This commit is contained in:
2025-08-06 18:22:16 +02:00
parent f0d98d23ff
commit e73709c859
3 changed files with 81 additions and 3 deletions

View File

@@ -5,7 +5,7 @@ from typing import Any, Generator
from components.admin.admin_db_manager import AdminDbManager from components.admin.admin_db_manager import AdminDbManager
from core.Expando import Expando from core.Expando import Expando
from core.jira import Jira from core.jira import Jira, JiraRequestTypes
from core.preprocessor import PlainTextPreprocessor from core.preprocessor import PlainTextPreprocessor
from core.utils import UnreferencedNamesVisitor from core.utils import UnreferencedNamesVisitor
from utils.Datahelper import DataHelper from utils.Datahelper import DataHelper
@@ -96,11 +96,11 @@ class JiraDataProducer(DataProducer):
logger = logging.getLogger("DataProcessor.Producer.Jira") 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) super().__init__(component_id)
self._session = session self._session = session
self.settings_manager = settings_manager 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.request = request
self.fields = fields self.fields = fields
self.db = AdminDbManager(session, settings_manager).jira self.db = AdminDbManager(session, settings_manager).jira

View File

@@ -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"