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("Hello Kodjo. 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"