import pytest from unittest.mock import patch, MagicMock, PropertyMock from src import gui_2 @pytest.fixture def mock_gui(): gui = gui_2.App() gui.project = { 'discussion': { 'active': 'main', 'discussions': { 'main': {'history': []}, 'take_1': {'history': []}, 'take_2': {'history': []} } } } gui.active_discussion = 'main' # Mock some required state gui.perf_profiling_enabled = False gui.is_viewing_prior_session = False gui._get_discussion_names = lambda: ['main', 'take_1', 'take_2'] return gui def test_discussion_tabs_rendered(mock_gui): with patch('src.gui_2.imgui') as mock_imgui, \ patch('src.app_controller.AppController.active_project_root', new_callable=PropertyMock, return_value='.'): # We expect a tab bar to be used instead of a combo box mock_imgui.begin_tab_bar.return_value = True mock_imgui.begin_tab_item.return_value = (True, True) mock_imgui.input_text.return_value = (False, "") mock_imgui.checkbox.return_value = (False, False) mock_imgui.input_int.return_value = (False, 0) # Prevent infinite loop in ListClipper mock_clipper = MagicMock() mock_clipper.step.return_value = False mock_imgui.ListClipper.return_value = mock_clipper mock_gui._render_discussion_panel() mock_imgui.begin_tab_bar.assert_called_once_with('discussion_takes_tabs') # Check that begin_tab_item was called for each take calls = [c[0][0] for c in mock_imgui.begin_tab_item.call_args_list] assert 'main' in calls assert 'take_1' in calls assert 'take_2' in calls