import pytest import sys import os from unittest.mock import patch from typing import Generator, Any from gui_2 import App import ai_client # Ensure project root is in path sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) @pytest.fixture def app_instance() -> Generator[App, None, None]: """ Fixture to create an instance of the App class for testing. """ with patch('gui_2.load_config', return_value={}), \ patch('gui_2.PerformanceMonitor'), \ patch('gui_2.session_logger'), \ patch.object(App, '_prune_old_logs'), \ patch.object(App, '_load_active_project'): app = App() yield app def test_gui_updates_on_event(app_instance: App) -> None: mock_stats = {"percentage": 50.0, "current": 500, "limit": 1000} app_instance.last_md = "mock_md" with patch('ai_client.get_token_stats', return_value=mock_stats) as mock_get_stats: # Simulate event ai_client.events.emit("response_received", payload={"text": "test"}) # Process tasks manually app_instance._process_pending_gui_tasks() # Verify that _token_stats was updated (via _refresh_api_metrics) assert app_instance._token_stats["percentage"] == 50.0 assert app_instance._token_stats["current"] == 500