refactor applications to delegate responsibilites
Python CI / test (push) Failing after 4m11s

This commit is contained in:
2025-11-08 19:46:49 +01:00
parent 4811367905
commit fe140ba91f
13 changed files with 1468 additions and 435 deletions
+220
View File
@@ -0,0 +1,220 @@
"""
Unit tests for SettingsManager.
Tests settings management in isolation using mocks.
"""
import unittest
from unittest.mock import Mock, MagicMock
from dreader.managers.settings import SettingsManager
class TestSettingsManager(unittest.TestCase):
"""Test SettingsManager in isolation"""
def setUp(self):
"""Set up test environment"""
self.manager = SettingsManager()
def test_initialization(self):
"""Test manager initializes correctly"""
manager = SettingsManager()
self.assertEqual(manager.font_scale, 1.0)
self.assertEqual(manager.font_scale_step, 0.1)
self.assertIsNone(manager.manager)
def test_get_font_size(self):
"""Test getting current font size"""
self.assertEqual(self.manager.get_font_size(), 1.0)
self.manager.font_scale = 1.5
self.assertEqual(self.manager.get_font_size(), 1.5)
def test_set_font_size_without_manager(self):
"""Test setting font size without layout manager returns None"""
result = self.manager.set_font_size(1.5)
self.assertIsNone(result)
def test_set_font_size_with_manager(self):
"""Test setting font size with layout manager"""
# Create mock manager
mock_layout_manager = Mock()
mock_page = Mock()
mock_page.render.return_value = "rendered_page"
mock_layout_manager.set_font_scale.return_value = mock_page
mock_layout_manager.font_scale = 1.0
self.manager.set_manager(mock_layout_manager)
# Set font size
result = self.manager.set_font_size(1.5)
self.assertIsNotNone(result)
self.assertEqual(result, "rendered_page")
self.assertEqual(self.manager.font_scale, 1.5)
mock_layout_manager.set_font_scale.assert_called_once_with(1.5)
def test_font_size_clamping(self):
"""Test font size is clamped between 0.5x and 3.0x"""
mock_layout_manager = Mock()
mock_page = Mock()
mock_page.render.return_value = "rendered_page"
mock_layout_manager.set_font_scale.return_value = mock_page
mock_layout_manager.font_scale = 1.0
self.manager.set_manager(mock_layout_manager)
# Test upper bound
self.manager.set_font_size(5.0)
self.assertEqual(self.manager.font_scale, 3.0)
# Test lower bound
self.manager.set_font_size(0.1)
self.assertEqual(self.manager.font_scale, 0.5)
def test_increase_font_size(self):
"""Test increasing font size by one step"""
mock_layout_manager = Mock()
mock_page = Mock()
mock_page.render.return_value = "rendered_page"
mock_layout_manager.set_font_scale.return_value = mock_page
mock_layout_manager.font_scale = 1.0
self.manager.set_manager(mock_layout_manager)
initial_size = self.manager.font_scale
self.manager.increase_font_size()
self.assertEqual(self.manager.font_scale, initial_size + 0.1)
def test_decrease_font_size(self):
"""Test decreasing font size by one step"""
mock_layout_manager = Mock()
mock_page = Mock()
mock_page.render.return_value = "rendered_page"
mock_layout_manager.set_font_scale.return_value = mock_page
mock_layout_manager.font_scale = 1.5
self.manager.set_manager(mock_layout_manager)
self.manager.font_scale = 1.5
self.manager.decrease_font_size()
self.assertAlmostEqual(self.manager.font_scale, 1.4, places=5)
def test_set_line_spacing(self):
"""Test setting line spacing"""
mock_layout_manager = Mock()
mock_page = Mock()
mock_page.render.return_value = "rendered_page"
mock_layout_manager.get_current_page.return_value = mock_page
mock_layout_manager.page_style = Mock()
mock_layout_manager.page_style.line_spacing = 5
self.manager.set_manager(mock_layout_manager)
result = self.manager.set_line_spacing(10)
self.assertIsNotNone(result)
mock_layout_manager.increase_line_spacing.assert_called_once_with(5)
def test_set_inter_block_spacing(self):
"""Test setting inter-block spacing"""
mock_layout_manager = Mock()
mock_page = Mock()
mock_page.render.return_value = "rendered_page"
mock_layout_manager.get_current_page.return_value = mock_page
mock_layout_manager.page_style = Mock()
mock_layout_manager.page_style.inter_block_spacing = 15
self.manager.set_manager(mock_layout_manager)
result = self.manager.set_inter_block_spacing(25)
self.assertIsNotNone(result)
mock_layout_manager.increase_inter_block_spacing.assert_called_once_with(10)
def test_set_word_spacing(self):
"""Test setting word spacing"""
mock_layout_manager = Mock()
mock_page = Mock()
mock_page.render.return_value = "rendered_page"
mock_layout_manager.get_current_page.return_value = mock_page
mock_layout_manager.page_style = Mock()
mock_layout_manager.page_style.word_spacing = 0
self.manager.set_manager(mock_layout_manager)
result = self.manager.set_word_spacing(3)
self.assertIsNotNone(result)
mock_layout_manager.increase_word_spacing.assert_called_once_with(3)
def test_get_current_settings_without_manager(self):
"""Test getting settings without layout manager"""
settings = self.manager.get_current_settings()
self.assertIsInstance(settings, dict)
self.assertEqual(settings['font_scale'], 1.0)
self.assertEqual(settings['line_spacing'], 5)
self.assertEqual(settings['inter_block_spacing'], 15)
self.assertEqual(settings['word_spacing'], 0)
def test_get_current_settings_with_manager(self):
"""Test getting settings with layout manager"""
mock_layout_manager = Mock()
mock_layout_manager.page_style = Mock()
mock_layout_manager.page_style.line_spacing = 10
mock_layout_manager.page_style.inter_block_spacing = 20
mock_layout_manager.page_style.word_spacing = 3
mock_layout_manager.font_scale = 1.5
self.manager.set_manager(mock_layout_manager)
self.manager.font_scale = 1.5
settings = self.manager.get_current_settings()
self.assertEqual(settings['font_scale'], 1.5)
self.assertEqual(settings['line_spacing'], 10)
self.assertEqual(settings['inter_block_spacing'], 20)
self.assertEqual(settings['word_spacing'], 3)
def test_apply_settings(self):
"""Test applying settings from dictionary"""
mock_layout_manager = Mock()
mock_page = Mock()
mock_page.render.return_value = "rendered_page"
mock_layout_manager.set_font_scale.return_value = mock_page
mock_layout_manager.get_current_page.return_value = mock_page
mock_layout_manager.page_style = Mock()
mock_layout_manager.page_style.line_spacing = 5
mock_layout_manager.page_style.inter_block_spacing = 15
mock_layout_manager.page_style.word_spacing = 0
mock_layout_manager.font_scale = 1.0
self.manager.set_manager(mock_layout_manager)
settings = {
'font_scale': 1.5,
'line_spacing': 10,
'inter_block_spacing': 20,
'word_spacing': 3
}
success = self.manager.apply_settings(settings)
self.assertTrue(success)
self.assertEqual(self.manager.font_scale, 1.5)
def test_apply_settings_without_manager(self):
"""Test applying settings without layout manager returns False"""
settings = {'font_scale': 1.5}
success = self.manager.apply_settings(settings)
self.assertFalse(success)
if __name__ == '__main__':
unittest.main()