Private
Public Access
test(orchestrator_pm): mock send_result not send (Phase 2.14, pre-empts Phase 1.2 regression)
Phase 1.2 migrated src/orchestrator_pm.py:86 to send_result(). The 3 tests in TestOrchestratorPM mocked src.ai_client.send, which would break once Phase 1.2 was applied. (Confirmed: tests failed after Phase 1.2 commit.) Changes: - Replace @patch(src.ai_client.send) with @patch(src.ai_client.send_result) - Rename mock_send to mock_send_result throughout - Wrap mock return_value with Result(data=json.dumps(...)) - Add "from src.result_types import Result" import All 3 tests pass.
This commit is contained in:
@@ -4,12 +4,13 @@ from unittest.mock import patch
|
||||
import json
|
||||
from src import orchestrator_pm
|
||||
from src import mma_prompts
|
||||
from src.result_types import Result
|
||||
|
||||
class TestOrchestratorPM(unittest.TestCase):
|
||||
|
||||
@patch('src.summarize.build_summary_markdown')
|
||||
@patch('src.ai_client.send')
|
||||
def test_generate_tracks_success(self, mock_send: Any, mock_summarize: Any) -> None:
|
||||
@patch('src.ai_client.send_result')
|
||||
def test_generate_tracks_success(self, mock_send_result: Any, mock_summarize: Any) -> None:
|
||||
# Setup mocks
|
||||
mock_summarize.return_value = "REPO_MAP_CONTENT"
|
||||
mock_response_data = [
|
||||
@@ -23,7 +24,7 @@ class TestOrchestratorPM(unittest.TestCase):
|
||||
"acceptance_criteria": ["criteria 1"]
|
||||
}
|
||||
]
|
||||
mock_send.return_value = json.dumps(mock_response_data)
|
||||
mock_send_result.return_value = Result(data=json.dumps(mock_response_data))
|
||||
user_request = "Implement unit tests"
|
||||
project_config = {"files": {"paths": ["src"]}}
|
||||
file_items = [{"path": "src/main.py", "content": "print('hello')"}]
|
||||
@@ -31,12 +32,12 @@ class TestOrchestratorPM(unittest.TestCase):
|
||||
result = orchestrator_pm.generate_tracks(user_request, project_config, file_items)
|
||||
# Verify summarize call
|
||||
mock_summarize.assert_called_once_with(file_items)
|
||||
# Verify ai_client.send call
|
||||
# Verify ai_client.send_result call
|
||||
mma_prompts.PROMPTS['tier1_epic_init']
|
||||
mock_send.assert_called_once()
|
||||
args, kwargs = mock_send.call_args
|
||||
mock_send_result.assert_called_once()
|
||||
args, kwargs = mock_send_result.call_args
|
||||
self.assertEqual(kwargs['md_content'], "")
|
||||
# Cannot check system_prompt via mock_send kwargs anymore as it's set globally
|
||||
# Cannot check system_prompt via mock_send_result kwargs anymore as it's set globally
|
||||
# But we can verify user_message was passed
|
||||
self.assertIn(user_request, kwargs['user_message'])
|
||||
self.assertIn("REPO_MAP_CONTENT", kwargs['user_message'])
|
||||
@@ -44,25 +45,25 @@ class TestOrchestratorPM(unittest.TestCase):
|
||||
self.assertEqual(result[0]['id'], mock_response_data[0]['id'])
|
||||
|
||||
@patch('src.summarize.build_summary_markdown')
|
||||
@patch('src.ai_client.send')
|
||||
def test_generate_tracks_markdown_wrapped(self, mock_send: Any, mock_summarize: Any) -> None:
|
||||
@patch('src.ai_client.send_result')
|
||||
def test_generate_tracks_markdown_wrapped(self, mock_send_result: Any, mock_summarize: Any) -> None:
|
||||
mock_summarize.return_value = "REPO_MAP"
|
||||
mock_response_data = [{"id": "track_1"}]
|
||||
expected_result = [{"id": "track_1", "title": "Untitled Track"}]
|
||||
# Wrapped in ```json ... ```
|
||||
mock_send.return_value = f"Here is the plan:\n```json\n{json.dumps(mock_response_data)}\n```\nHope this helps."
|
||||
mock_send_result.return_value = Result(data=f"Here is the plan:\n```json\n{json.dumps(mock_response_data)}\n```\nHope this helps.")
|
||||
result = orchestrator_pm.generate_tracks("req", {}, [])
|
||||
self.assertEqual(result, expected_result)
|
||||
self.assertEqual(result, expected_result)
|
||||
# Wrapped in ``` ... ```
|
||||
mock_send.return_value = f"```\n{json.dumps(mock_response_data)}\n```"
|
||||
mock_send_result.return_value = Result(data=f"```\n{json.dumps(mock_response_data)}\n```")
|
||||
result = orchestrator_pm.generate_tracks("req", {}, [])
|
||||
self.assertEqual(result, expected_result)
|
||||
|
||||
@patch('src.summarize.build_summary_markdown')
|
||||
@patch('src.ai_client.send')
|
||||
def test_generate_tracks_malformed_json(self, mock_send: Any, mock_summarize: Any) -> None:
|
||||
@patch('src.ai_client.send_result')
|
||||
def test_generate_tracks_malformed_json(self, mock_send_result: Any, mock_summarize: Any) -> None:
|
||||
mock_summarize.return_value = "REPO_MAP"
|
||||
mock_send.return_value = "NOT A JSON"
|
||||
mock_send_result.return_value = Result(data="NOT A JSON")
|
||||
# Should return empty list and print error (we can mock print if we want to be thorough)
|
||||
with patch('builtins.print') as mock_print:
|
||||
result = orchestrator_pm.generate_tracks("req", {}, [])
|
||||
|
||||
Reference in New Issue
Block a user