167 lines
6.9 KiB
Python
167 lines
6.9 KiB
Python
from unittest.mock import Mock, patch
|
|
|
|
import flet as ft
|
|
|
|
from ren_browser.ui.settings import open_settings_tab
|
|
from ren_browser.ui.ui import build_ui
|
|
|
|
|
|
class TestBuildUI:
|
|
"""Test cases for the build_ui function."""
|
|
|
|
def test_build_ui_basic_setup(self, mock_page):
|
|
"""Test that build_ui sets up basic page properties."""
|
|
# Mock the page properties we can test without complex dependencies
|
|
mock_page.theme_mode = None
|
|
mock_page.window = Mock()
|
|
mock_page.window.maximized = False
|
|
mock_page.appbar = Mock()
|
|
|
|
# Test basic setup that should always work
|
|
mock_page.theme_mode = ft.ThemeMode.DARK
|
|
mock_page.window.maximized = True
|
|
|
|
assert mock_page.theme_mode == ft.ThemeMode.DARK
|
|
assert mock_page.window.maximized is True
|
|
|
|
@patch("ren_browser.announces.announces.AnnounceService")
|
|
@patch("ren_browser.pages.page_request.PageFetcher")
|
|
@patch("ren_browser.tabs.tabs.TabsManager")
|
|
@patch("ren_browser.controls.shortcuts.Shortcuts")
|
|
def test_build_ui_appbar_setup(self, mock_shortcuts, mock_tabs, mock_fetcher, mock_announce_service, mock_page):
|
|
"""Test that build_ui sets up the app bar correctly."""
|
|
mock_tab_manager = Mock()
|
|
mock_tabs.return_value = mock_tab_manager
|
|
mock_tab_manager.manager.tabs = [{"url_field": Mock(), "go_btn": Mock()}]
|
|
mock_tab_manager.manager.index = 0
|
|
mock_tab_manager.tab_bar = Mock()
|
|
mock_tab_manager.content_container = Mock()
|
|
|
|
build_ui(mock_page)
|
|
|
|
assert mock_page.appbar is not None
|
|
assert mock_page.appbar.leading is not None
|
|
assert mock_page.appbar.actions is not None
|
|
assert mock_page.appbar.title is not None
|
|
|
|
@patch("ren_browser.announces.announces.AnnounceService")
|
|
@patch("ren_browser.pages.page_request.PageFetcher")
|
|
@patch("ren_browser.tabs.tabs.TabsManager")
|
|
@patch("ren_browser.controls.shortcuts.Shortcuts")
|
|
def test_build_ui_drawer_setup(self, mock_shortcuts, mock_tabs, mock_fetcher, mock_announce_service, mock_page):
|
|
"""Test that build_ui sets up the drawer correctly."""
|
|
mock_tab_manager = Mock()
|
|
mock_tabs.return_value = mock_tab_manager
|
|
mock_tab_manager.manager.tabs = [{"url_field": Mock(), "go_btn": Mock()}]
|
|
mock_tab_manager.manager.index = 0
|
|
mock_tab_manager.tab_bar = Mock()
|
|
mock_tab_manager.content_container = Mock()
|
|
|
|
build_ui(mock_page)
|
|
|
|
assert mock_page.drawer is not None
|
|
assert isinstance(mock_page.drawer, ft.NavigationDrawer)
|
|
|
|
def test_ui_basic_functionality(self, mock_page):
|
|
"""Test basic UI functionality without complex mocking."""
|
|
# Test that we can create basic UI components
|
|
mock_page.theme_mode = ft.ThemeMode.DARK
|
|
mock_page.window = Mock()
|
|
mock_page.window.maximized = True
|
|
mock_page.appbar = Mock()
|
|
mock_page.drawer = Mock()
|
|
|
|
# Verify basic properties can be set
|
|
assert mock_page.theme_mode == ft.ThemeMode.DARK
|
|
assert mock_page.window.maximized is True
|
|
|
|
|
|
class TestOpenSettingsTab:
|
|
"""Test cases for the open_settings_tab function."""
|
|
|
|
def test_open_settings_tab_basic(self, mock_page):
|
|
"""Test opening settings tab with basic functionality."""
|
|
mock_tab_manager = Mock()
|
|
mock_tab_manager.manager.tabs = []
|
|
mock_tab_manager._add_tab_internal = Mock()
|
|
mock_tab_manager.select_tab = Mock()
|
|
|
|
with patch("pathlib.Path.read_text", return_value="config content"):
|
|
open_settings_tab(mock_page, mock_tab_manager)
|
|
|
|
mock_tab_manager._add_tab_internal.assert_called_once()
|
|
mock_tab_manager.select_tab.assert_called_once()
|
|
mock_page.update.assert_called()
|
|
|
|
def test_open_settings_tab_config_error(self, mock_page):
|
|
"""Test opening settings tab when config file cannot be read."""
|
|
mock_tab_manager = Mock()
|
|
mock_tab_manager.manager.tabs = []
|
|
mock_tab_manager._add_tab_internal = Mock()
|
|
mock_tab_manager.select_tab = Mock()
|
|
|
|
with patch("pathlib.Path.read_text", side_effect=Exception("File not found")):
|
|
open_settings_tab(mock_page, mock_tab_manager)
|
|
|
|
mock_tab_manager._add_tab_internal.assert_called_once()
|
|
mock_tab_manager.select_tab.assert_called_once()
|
|
# Verify settings tab was opened
|
|
args = mock_tab_manager._add_tab_internal.call_args
|
|
assert args[0][0] == "Settings"
|
|
|
|
def test_settings_save_config_success(self, mock_page):
|
|
"""Test saving config successfully in settings."""
|
|
mock_tab_manager = Mock()
|
|
mock_tab_manager.manager.tabs = []
|
|
mock_tab_manager._add_tab_internal = Mock()
|
|
mock_tab_manager.select_tab = Mock()
|
|
|
|
with patch("pathlib.Path.read_text", return_value="config"), \
|
|
patch("pathlib.Path.write_text"):
|
|
|
|
open_settings_tab(mock_page, mock_tab_manager)
|
|
|
|
# Get the settings content that was added
|
|
settings_content = mock_tab_manager._add_tab_internal.call_args[0][1]
|
|
|
|
# Find the save button and simulate click
|
|
save_btn = None
|
|
for control in settings_content.controls:
|
|
if hasattr(control, "controls"):
|
|
for sub_control in control.controls:
|
|
if hasattr(sub_control, "text") and sub_control.text == "Save and Restart":
|
|
save_btn = sub_control
|
|
break
|
|
|
|
assert save_btn is not None
|
|
|
|
def test_settings_save_config_error(self, mock_page, mock_storage_manager):
|
|
"""Test saving config with error in settings."""
|
|
mock_tab_manager = Mock()
|
|
mock_tab_manager.manager.tabs = []
|
|
mock_tab_manager._add_tab_internal = Mock()
|
|
mock_tab_manager.select_tab = Mock()
|
|
|
|
with patch('ren_browser.ui.settings.get_storage_manager', return_value=mock_storage_manager):
|
|
open_settings_tab(mock_page, mock_tab_manager)
|
|
|
|
settings_content = mock_tab_manager._add_tab_internal.call_args[0][1]
|
|
assert settings_content is not None
|
|
|
|
def test_settings_log_sections(self, mock_page, mock_storage_manager):
|
|
"""Test that settings includes error logs and RNS logs sections."""
|
|
mock_tab_manager = Mock()
|
|
mock_tab_manager.manager.tabs = []
|
|
mock_tab_manager._add_tab_internal = Mock()
|
|
mock_tab_manager.select_tab = Mock()
|
|
|
|
with patch('ren_browser.ui.settings.get_storage_manager', return_value=mock_storage_manager), \
|
|
patch("ren_browser.logs.ERROR_LOGS", ["Error 1", "Error 2"]), \
|
|
patch("ren_browser.logs.RET_LOGS", ["RNS log 1", "RNS log 2"]):
|
|
|
|
open_settings_tab(mock_page, mock_tab_manager)
|
|
|
|
mock_tab_manager._add_tab_internal.assert_called_once()
|
|
args = mock_tab_manager._add_tab_internal.call_args
|
|
assert args[0][0] == "Settings"
|