- Add AppController.stop_services() to clean up AI client and event loop - Add ConfirmDialog, MMAApprovalDialog, MMASpawnApprovalDialog imports to gui_2.py - Fix test mocks for MMA dashboard and approval indicators - Add retry logic to conftest.py for Windows file lock cleanup
76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
import pytest
|
|
from unittest.mock import patch, MagicMock
|
|
from typing import Any
|
|
from gui_2 import App
|
|
|
|
|
|
@pytest.fixture
|
|
def app_instance() -> Any:
|
|
with (
|
|
patch("src.models.load_config", return_value={"ai": {}, "projects": {}}),
|
|
patch("gui_2.save_config"),
|
|
patch("gui_2.project_manager"),
|
|
patch("app_controller.project_manager") as mock_pm,
|
|
patch("gui_2.session_logger"),
|
|
patch("gui_2.immapp.run"),
|
|
patch("src.app_controller.AppController._load_active_project"),
|
|
patch("src.app_controller.AppController._fetch_models"),
|
|
patch.object(App, "_load_fonts"),
|
|
patch.object(App, "_post_init"),
|
|
patch("src.app_controller.AppController._prune_old_logs"),
|
|
patch("src.app_controller.AppController.start_services"),
|
|
patch("src.app_controller.AppController._init_ai_and_hooks"),
|
|
):
|
|
app = App()
|
|
app.project = {}
|
|
app.ui_files_base_dir = "."
|
|
yield app, mock_pm
|
|
|
|
|
|
def test_mma_dashboard_refresh(app_instance: Any) -> None:
|
|
app, mock_pm = app_instance
|
|
mock_tracks = [
|
|
{
|
|
"id": "track_1",
|
|
"title": "Track 1",
|
|
"status": "new",
|
|
"complete": 0,
|
|
"total": 0,
|
|
"progress": 0.0,
|
|
},
|
|
{
|
|
"id": "track_2",
|
|
"title": "Track 2",
|
|
"status": "new",
|
|
"complete": 0,
|
|
"total": 0,
|
|
"progress": 0.0,
|
|
},
|
|
]
|
|
mock_pm.get_all_tracks.return_value = mock_tracks
|
|
app._refresh_from_project()
|
|
assert hasattr(app, "tracks"), "App instance should have a 'tracks' attribute"
|
|
assert app.tracks == mock_tracks
|
|
assert len(app.tracks) == 2
|
|
assert app.tracks[0]["id"] == "track_1"
|
|
assert app.tracks[1]["id"] == "track_2"
|
|
mock_pm.get_all_tracks.assert_called_with(app.ui_files_base_dir)
|
|
|
|
|
|
def test_mma_dashboard_initialization_refresh(app_instance: Any) -> None:
|
|
app, mock_pm = app_instance
|
|
mock_tracks = [
|
|
{
|
|
"id": "init_track",
|
|
"title": "Initial Track",
|
|
"status": "new",
|
|
"complete": 0,
|
|
"total": 0,
|
|
"progress": 0.0,
|
|
}
|
|
]
|
|
mock_pm.get_all_tracks.return_value = mock_tracks
|
|
app._refresh_from_project()
|
|
assert app.tracks == mock_tracks
|
|
assert app.tracks[0]["id"] == "init_track"
|