63 lines
2.4 KiB
Python
63 lines
2.4 KiB
Python
|
|
import pytest
|
|
from unittest.mock import MagicMock, patch
|
|
import dearpygui.dearpygui as dpg
|
|
import gui
|
|
from gui import App
|
|
import ai_client
|
|
|
|
@pytest.fixture
|
|
def app_instance():
|
|
"""
|
|
Fixture to create an instance of the App class for testing.
|
|
It creates a real DPG context but mocks functions that would
|
|
render a window or block execution.
|
|
"""
|
|
dpg.create_context()
|
|
|
|
with patch('dearpygui.dearpygui.create_viewport'), \
|
|
patch('dearpygui.dearpygui.setup_dearpygui'), \
|
|
patch('dearpygui.dearpygui.show_viewport'), \
|
|
patch('dearpygui.dearpygui.start_dearpygui'), \
|
|
patch('gui.load_config', return_value={}), \
|
|
patch('gui.PerformanceMonitor'), \
|
|
patch('gui.shell_runner'), \
|
|
patch('gui.project_manager'), \
|
|
patch.object(App, '_load_active_project'), \
|
|
patch.object(App, '_rebuild_files_list'), \
|
|
patch.object(App, '_rebuild_shots_list'), \
|
|
patch.object(App, '_rebuild_disc_list'), \
|
|
patch.object(App, '_rebuild_disc_roles_list'), \
|
|
patch.object(App, '_rebuild_discussion_selector'), \
|
|
patch.object(App, '_refresh_project_widgets'):
|
|
|
|
app = App()
|
|
yield app
|
|
|
|
dpg.destroy_context()
|
|
|
|
def test_gui_updates_on_event(app_instance):
|
|
# Patch dependencies for the test
|
|
with patch('dearpygui.dearpygui.set_value') as mock_set_value, \
|
|
patch('dearpygui.dearpygui.does_item_exist', return_value=True), \
|
|
patch('dearpygui.dearpygui.configure_item'), \
|
|
patch('ai_client.get_history_bleed_stats') as mock_stats:
|
|
|
|
mock_stats.return_value = {"percentage": 50.0, "current": 500, "limit": 1000}
|
|
|
|
# We'll use patch.object to see if _refresh_api_metrics is called
|
|
with patch.object(app_instance, '_refresh_api_metrics', wraps=app_instance._refresh_api_metrics) as mock_refresh:
|
|
# Simulate event
|
|
ai_client.events.emit("response_received", payload={})
|
|
|
|
# Process tasks manually
|
|
app_instance._process_pending_gui_tasks()
|
|
|
|
# Verify that _refresh_api_metrics was called
|
|
mock_refresh.assert_called_once()
|
|
|
|
# Verify that dpg.set_value was called for the metrics widgets
|
|
calls = [call.args[0] for call in mock_set_value.call_args_list]
|
|
assert "token_budget_bar" in calls
|
|
assert "token_budget_label" in calls
|