import pytest from unittest.mock import MagicMock, patch, ANY from src.gui_2 import App @pytest.fixture def app_instance(): with ( patch('src.models.load_config', return_value={'ai': {'provider': 'gemini', 'model': 'gemini-2.5-flash-lite'}, 'projects': {}}), patch('src.models.save_config'), patch('src.gui_2.project_manager'), patch('src.gui_2.session_logger'), patch('src.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.api_hooks.HookServer'), patch('src.ai_client.set_provider'), patch('src.ai_client.reset_session') ): app = App() app.project = { "discussion": { "active": "main", "discussions": { "main": {"history": []}, "take_1": {"history": []}, "take_2": {"history": []} } } } app.ui_synthesis_prompt = "Summarize these takes" yield app def test_render_synthesis_panel(app_instance): """Verify that _render_synthesis_panel renders checkboxes for takes and input for prompt.""" with patch('src.gui_2.imgui') as mock_imgui: mock_imgui.checkbox.return_value = (False, False) mock_imgui.input_text_multiline.return_value = (False, app_instance.ui_synthesis_prompt) mock_imgui.button.return_value = False # Call the method we are testing app_instance._render_synthesis_panel() # 1. Assert imgui.checkbox is called for each take in project_dict['discussion']['discussions'] discussions = app_instance.project['discussion']['discussions'] for name in discussions: mock_imgui.checkbox.assert_any_call(name, ANY) # 2. Assert imgui.input_text_multiline is called for the prompt mock_imgui.input_text_multiline.assert_called_with("##synthesis_prompt", app_instance.ui_synthesis_prompt, ANY) # 3. Assert imgui.button is called for 'Generate Synthesis' mock_imgui.button.assert_any_call("Generate Synthesis")