50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
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.input_text_multiline.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
|