feat(mma): Finalize Orchestrator Integration and fix all regressions

This commit is contained in:
2026-02-27 18:31:14 -05:00
parent 8438f69197
commit 3b2d82ed0d
27 changed files with 706 additions and 297 deletions

View File

@@ -1,24 +1,10 @@
import pytest
from unittest.mock import MagicMock, patch
import os
from pathlib import Path
# Mock imgui and other heavy dependencies before importing App
import sys
sys.modules['imgui_bundle'] = MagicMock()
sys.modules['imgui_bundle.imgui'] = MagicMock()
sys.modules['imgui_bundle.hello_imgui'] = MagicMock()
sys.modules['imgui_bundle.immapp'] = MagicMock()
# Mock tkinter
sys.modules['tkinter'] = MagicMock()
sys.modules['tkinter.filedialog'] = MagicMock()
# Mock ai_client and session_logger
sys.modules['ai_client'] = MagicMock()
sys.modules['session_logger'] = MagicMock()
# We can safely import gui_2 if we don't instantiate App without mocking its threads
import gui_2
from gui_2 import App
@pytest.fixture
@@ -46,64 +32,72 @@ history = []
""", encoding="utf-8")
return project_path
def test_log_management_init(mock_config, mock_project, monkeypatch):
@pytest.fixture
def app_instance(mock_config, mock_project, monkeypatch):
monkeypatch.setattr("gui_2.CONFIG_PATH", mock_config)
with patch("project_manager.load_project") as mock_load:
with patch("project_manager.load_project") as mock_load, \
patch("session_logger.open_session"):
mock_load.return_value = {
"project": {"name": "test"},
"discussion": {"roles": ["User", "AI"], "active": "main", "discussions": {"main": {"history": []}}},
"files": {"paths": []},
"screenshots": {"paths": []}
}
with patch("session_logger.open_session"):
# Mock the __init__ to do nothing, then set the fields we need manually
with patch.object(App, '__init__', lambda self: None):
app = App()
app.show_windows = {"Log Management": False}
app.ui_state = MagicMock()
app.ui_files_base_dir = "."
app.files = []
# Check if Log Management is in show_windows
assert "Log Management" in app.show_windows
assert app.show_windows["Log Management"] is False # Default as set in __init__
# Check if _render_log_management exists
assert hasattr(app, "_render_log_management")
assert callable(app._render_log_management)
# Since we bypassed __init__, we need to bind the method manually
# but python allows calling it directly.
return app
def test_render_log_management_logic(mock_config, mock_project, monkeypatch):
monkeypatch.setattr("gui_2.CONFIG_PATH", mock_config)
def test_log_management_init(app_instance):
app = app_instance
assert "Log Management" in app.show_windows
assert app.show_windows["Log Management"] is False
assert hasattr(app, "_render_log_management")
assert callable(app._render_log_management)
def test_render_log_management_logic(app_instance):
app = app_instance
app.show_windows["Log Management"] = True
with patch("project_manager.load_project") as mock_load:
mock_load.return_value = {
"project": {"name": "test"},
"discussion": {"roles": ["User", "AI"], "active": "main", "discussions": {"main": {"history": []}}},
"files": {"paths": []},
"screenshots": {"paths": []}
# Mock LogRegistry
with patch("gui_2.LogRegistry") as MockRegistry, \
patch("gui_2.imgui.begin") as mock_begin, \
patch("gui_2.imgui.begin_table") as mock_begin_table, \
patch("gui_2.imgui.text") as mock_text, \
patch("gui_2.imgui.end_table") as mock_end_table, \
patch("gui_2.imgui.end") as mock_end, \
patch("gui_2.imgui.push_style_color"), \
patch("gui_2.imgui.pop_style_color"), \
patch("gui_2.imgui.table_setup_column"), \
patch("gui_2.imgui.table_headers_row"), \
patch("gui_2.imgui.table_next_row"), \
patch("gui_2.imgui.table_next_column"), \
patch("gui_2.imgui.button"):
mock_reg = MockRegistry.return_value
mock_reg.data = {
"session_1": {
"start_time": "2023-01-01",
"whitelisted": False,
"metadata": {"reason": "test", "size_kb": 10, "message_count": 5}
}
}
with patch("session_logger.open_session"):
app = App()
app.show_windows["Log Management"] = True
from imgui_bundle import imgui
# Mock LogRegistry
with patch("gui_2.LogRegistry") as MockRegistry:
mock_reg = MockRegistry.return_value
mock_reg.data = {
"session_1": {
"start_time": "2023-01-01",
"whitelisted": False,
"metadata": {"reason": "test", "size_kb": 10, "message_count": 5}
}
}
# Mock imgui.begin to return (True, True)
imgui.begin.return_value = (True, True)
imgui.begin_table.return_value = True
# Call render
app._render_log_management()
# Verify imgui calls
imgui.begin.assert_called_with("Log Management", True)
imgui.begin_table.assert_called()
# Check for "session_1" text
imgui.text.assert_any_call("session_1")
mock_begin.return_value = (True, True)
mock_begin_table.return_value = True
app._render_log_management()
mock_begin.assert_called_with("Log Management", app.show_windows["Log Management"])
mock_begin_table.assert_called()
mock_text.assert_any_call("session_1")