Spaces:
Sleeping
Sleeping
| #!/usr/bin/env python3 | |
| """ | |
| Unit tests for Enhanced Display Configuration System. | |
| Tests the configuration system for UI classification improvements | |
| including feature toggles, styling options, and configuration management. | |
| Requirements: 7.1, 7.2, 7.3 | |
| """ | |
| import unittest | |
| import tempfile | |
| import os | |
| import json | |
| from unittest.mock import patch, MagicMock | |
| import sys | |
| current_dir = os.path.dirname(os.path.abspath(__file__)) | |
| src_dir = os.path.join(os.path.dirname(os.path.dirname(current_dir)), 'src') | |
| if src_dir not in sys.path: | |
| sys.path.insert(0, src_dir) | |
| from config.enhanced_display_config import ( | |
| EnhancedDisplayConfig, | |
| EnhancedDisplayConfigManager, | |
| SectionStylingConfig, | |
| ClassificationColorConfig, | |
| VisualSeparatorConfig, | |
| create_high_contrast_config, | |
| create_minimal_config, | |
| create_mobile_optimized_config | |
| ) | |
| class TestEnhancedDisplayConfig(unittest.TestCase): | |
| """Test cases for EnhancedDisplayConfig class.""" | |
| def setUp(self): | |
| """Set up test fixtures.""" | |
| self.config = EnhancedDisplayConfig() | |
| def test_default_configuration(self): | |
| """Test default configuration values.""" | |
| # Test feature toggles | |
| self.assertTrue(self.config.enabled) | |
| self.assertTrue(self.config.use_color_coding) | |
| self.assertTrue(self.config.use_icons) | |
| self.assertTrue(self.config.use_visual_separators) | |
| self.assertTrue(self.config.use_enhanced_styling) | |
| # Test default icons | |
| self.assertEqual(self.config.ai_analysis.icon, "π€") | |
| self.assertEqual(self.config.patient_message.icon, "π¬") | |
| self.assertEqual(self.config.provider_summary.icon, "π") | |
| # Test default colors | |
| self.assertEqual(self.config.classification_colors.red, "#ff4444") | |
| self.assertEqual(self.config.classification_colors.yellow, "#ffaa00") | |
| self.assertEqual(self.config.classification_colors.green, "#44aa44") | |
| def test_get_classification_color(self): | |
| """Test classification color retrieval.""" | |
| self.assertEqual(self.config.get_classification_color("RED"), "#ff4444") | |
| self.assertEqual(self.config.get_classification_color("red"), "#ff4444") | |
| self.assertEqual(self.config.get_classification_color("YELLOW"), "#ffaa00") | |
| self.assertEqual(self.config.get_classification_color("GREEN"), "#44aa44") | |
| self.assertEqual(self.config.get_classification_color("UNKNOWN"), "#666666") | |
| def test_get_section_config(self): | |
| """Test section configuration retrieval.""" | |
| ai_config = self.config.get_section_config("ai_analysis") | |
| self.assertIsInstance(ai_config, SectionStylingConfig) | |
| self.assertEqual(ai_config.icon, "π€") | |
| patient_config = self.config.get_section_config("patient_message") | |
| self.assertEqual(patient_config.icon, "π¬") | |
| provider_config = self.config.get_section_config("provider_summary") | |
| self.assertEqual(provider_config.icon, "π") | |
| # Test unknown section returns default | |
| unknown_config = self.config.get_section_config("unknown") | |
| self.assertEqual(unknown_config, self.config.ai_analysis) | |
| def test_high_contrast_mode(self): | |
| """Test high contrast mode application.""" | |
| config = EnhancedDisplayConfig(high_contrast_mode=True) | |
| # Check that high contrast colors are applied | |
| self.assertEqual(config.classification_colors.red, "#cc0000") | |
| self.assertEqual(config.classification_colors.yellow, "#cc8800") | |
| self.assertEqual(config.classification_colors.green, "#006600") | |
| # Check section colors are updated | |
| self.assertEqual(config.ai_analysis.border_color, "#000000") | |
| self.assertEqual(config.ai_analysis.background_color, "#ffffff") | |
| def test_css_variables_generation(self): | |
| """Test CSS variables generation.""" | |
| css_vars = self.config.generate_css_variables() | |
| # Check that CSS variables are generated | |
| self.assertIn(":root {", css_vars) | |
| self.assertIn("--enhanced-font-family:", css_vars) | |
| self.assertIn("--classification-red:", css_vars) | |
| self.assertIn("--ai-analysis-icon:", css_vars) | |
| self.assertIn("}", css_vars) | |
| def test_base_css_generation(self): | |
| """Test base CSS generation.""" | |
| base_css = self.config.generate_base_css() | |
| # Check that CSS classes are generated | |
| self.assertIn(".enhanced-section", base_css) | |
| self.assertIn(".enhanced-section-header", base_css) | |
| self.assertIn(".ai-analysis-section", base_css) | |
| self.assertIn(".patient-message-section", base_css) | |
| self.assertIn(".provider-summary-section", base_css) | |
| # Check responsive design | |
| self.assertIn("@media", base_css) | |
| def test_to_dict_conversion(self): | |
| """Test conversion to dictionary.""" | |
| config_dict = self.config.to_dict() | |
| self.assertIsInstance(config_dict, dict) | |
| self.assertEqual(config_dict['enabled'], True) | |
| self.assertEqual(config_dict['use_color_coding'], True) | |
| self.assertIn('ai_analysis', config_dict) | |
| self.assertIn('classification_colors', config_dict) | |
| def test_to_json_conversion(self): | |
| """Test conversion to JSON.""" | |
| config_json = self.config.to_json() | |
| # Should be valid JSON | |
| parsed = json.loads(config_json) | |
| self.assertIsInstance(parsed, dict) | |
| self.assertEqual(parsed['enabled'], True) | |
| class TestEnhancedDisplayConfigManager(unittest.TestCase): | |
| """Test cases for EnhancedDisplayConfigManager class.""" | |
| def setUp(self): | |
| """Set up test fixtures.""" | |
| # Create temporary config file | |
| self.temp_dir = tempfile.mkdtemp() | |
| self.config_file = os.path.join(self.temp_dir, "test_config.json") | |
| self.config_manager = EnhancedDisplayConfigManager(self.config_file) | |
| def tearDown(self): | |
| """Clean up test fixtures.""" | |
| # Clean up temporary files | |
| if os.path.exists(self.config_file): | |
| os.remove(self.config_file) | |
| os.rmdir(self.temp_dir) | |
| def test_load_default_config(self): | |
| """Test loading default configuration when no file exists.""" | |
| config = self.config_manager.load_config() | |
| self.assertIsInstance(config, EnhancedDisplayConfig) | |
| self.assertTrue(config.enabled) | |
| self.assertTrue(os.path.exists(self.config_file)) | |
| def test_save_and_load_config(self): | |
| """Test saving and loading configuration.""" | |
| # Load and modify config | |
| config = self.config_manager.load_config() | |
| config.enabled = False | |
| config.use_icons = False | |
| # Save config | |
| success = self.config_manager.save_config() | |
| self.assertTrue(success) | |
| # Create new manager and load | |
| new_manager = EnhancedDisplayConfigManager(self.config_file) | |
| loaded_config = new_manager.load_config() | |
| self.assertFalse(loaded_config.enabled) | |
| self.assertFalse(loaded_config.use_icons) | |
| def test_update_config(self): | |
| """Test configuration updates.""" | |
| success = self.config_manager.update_config( | |
| enabled=False, | |
| use_color_coding=False, | |
| use_icons=False | |
| ) | |
| self.assertTrue(success) | |
| config = self.config_manager.load_config() | |
| self.assertFalse(config.enabled) | |
| self.assertFalse(config.use_color_coding) | |
| self.assertFalse(config.use_icons) | |
| def test_enable_disable_features(self): | |
| """Test feature enable/disable functionality.""" | |
| # Disable color coding | |
| success = self.config_manager.disable_feature('color_coding') | |
| self.assertTrue(success) | |
| config = self.config_manager.load_config() | |
| self.assertFalse(config.use_color_coding) | |
| # Enable color coding | |
| success = self.config_manager.enable_feature('color_coding') | |
| self.assertTrue(success) | |
| config = self.config_manager.load_config() | |
| self.assertTrue(config.use_color_coding) | |
| def test_reset_to_defaults(self): | |
| """Test resetting configuration to defaults.""" | |
| # Modify config | |
| self.config_manager.update_config(enabled=False, use_icons=False) | |
| # Reset to defaults | |
| success = self.config_manager.reset_to_defaults() | |
| self.assertTrue(success) | |
| config = self.config_manager.load_config() | |
| self.assertTrue(config.enabled) | |
| self.assertTrue(config.use_icons) | |
| def test_validate_config(self): | |
| """Test configuration validation.""" | |
| # Valid configuration should have no issues | |
| issues = self.config_manager.validate_config() | |
| self.assertEqual(len(issues), 0) | |
| # Test with invalid color (this would need to be implemented) | |
| # For now, just test that validation runs without error | |
| self.assertIsInstance(issues, list) | |
| def test_config_file_error_handling(self): | |
| """Test error handling for config file operations.""" | |
| # Test with invalid config file path | |
| invalid_manager = EnhancedDisplayConfigManager("/invalid/path/config.json") | |
| # Should still return default config | |
| config = invalid_manager.load_config() | |
| self.assertIsInstance(config, EnhancedDisplayConfig) | |
| self.assertTrue(config.enabled) | |
| class TestPresetConfigurations(unittest.TestCase): | |
| """Test cases for preset configuration functions.""" | |
| def test_high_contrast_config(self): | |
| """Test high contrast configuration preset.""" | |
| config = create_high_contrast_config() | |
| self.assertTrue(config.high_contrast_mode) | |
| self.assertEqual(config.classification_colors.red, "#cc0000") | |
| self.assertEqual(config.ai_analysis.border_color, "#000000") | |
| def test_minimal_config(self): | |
| """Test minimal configuration preset.""" | |
| config = create_minimal_config() | |
| self.assertFalse(config.use_icons) | |
| self.assertFalse(config.use_visual_separators) | |
| self.assertFalse(config.enable_animations) | |
| def test_mobile_optimized_config(self): | |
| """Test mobile optimized configuration preset.""" | |
| config = create_mobile_optimized_config() | |
| self.assertEqual(config.responsive_breakpoint, "480px") | |
| self.assertEqual(config.ai_analysis.padding, "12px") | |
| self.assertFalse(config.enable_animations) | |
| class TestSectionStylingConfig(unittest.TestCase): | |
| """Test cases for SectionStylingConfig class.""" | |
| def test_default_values(self): | |
| """Test default section styling values.""" | |
| config = SectionStylingConfig( | |
| icon="π§", | |
| border_color="#000000", | |
| background_color="#ffffff", | |
| header_color="#000000" | |
| ) | |
| self.assertEqual(config.icon, "π§") | |
| self.assertEqual(config.border_width, "2px") | |
| self.assertEqual(config.border_radius, "8px") | |
| self.assertEqual(config.padding, "15px") | |
| self.assertEqual(config.margin, "10px 0") | |
| class TestClassificationColorConfig(unittest.TestCase): | |
| """Test cases for ClassificationColorConfig class.""" | |
| def test_default_colors(self): | |
| """Test default classification colors.""" | |
| config = ClassificationColorConfig() | |
| self.assertEqual(config.red, "#ff4444") | |
| self.assertEqual(config.yellow, "#ffaa00") | |
| self.assertEqual(config.green, "#44aa44") | |
| self.assertEqual(config.unknown, "#666666") | |
| class TestVisualSeparatorConfig(unittest.TestCase): | |
| """Test cases for VisualSeparatorConfig class.""" | |
| def test_default_separators(self): | |
| """Test default visual separator values.""" | |
| config = VisualSeparatorConfig() | |
| self.assertEqual(config.section_separator, "---") | |
| self.assertEqual(config.content_divider, "1px solid #ddd") | |
| self.assertEqual(config.major_break_symbol, "β β β") | |
| self.assertEqual(config.separator_color, "#e0e0e0") | |
| self.assertEqual(config.separator_width, "80%") | |
| if __name__ == '__main__': | |
| unittest.main() |