""" API Compatibility Tests for MainWindow Refactoring Dokumentiert alle öffentlichen Methoden der MainWindow Klasse um sicherzustellen, dass keine Breaking Changes auftreten. """ import unittest from unittest.mock import Mock, patch, MagicMock import sys import os # Add parent directory to path sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # Mock all GUI dependencies before import sys.modules['customtkinter'] = MagicMock() sys.modules['tkinter'] = MagicMock() sys.modules['PIL'] = MagicMock() sys.modules['PIL.Image'] = MagicMock() class TestMainWindowAPI(unittest.TestCase): """Test to ensure all public methods exist after refactoring""" # Liste aller öffentlichen Methoden der MainWindow Klasse # Generiert aus der Analyse vom 2025-07-05 REQUIRED_PUBLIC_METHODS = [ '__init__', 'setup_ui', 'create_header', 'create_content_area', 'create_status_bar', 'refresh_projects', 'create_project_tile', 'create_add_tile', 'create_project_tile_flow', 'create_add_tile_flow', 'add_new_project', 'open_project', 'open_vps_connection', 'open_admin_panel', 'open_vps_docker', 'open_readme', 'delete_project', 'rename_project', 'generate_readme_background', 'update_status', 'download_log', 'refresh_ui', 'load_and_apply_theme', 'on_window_resize', 'stop_project', 'setup_interaction_tracking', 'monitor_process', 'check_process_status', 'open_gitea_window', 'on_gitea_repo_select', 'clear_project_selection', 'on_project_select', 'show_git_status', 'commit_changes', 'push_to_gitea', 'pull_from_gitea', 'fetch_from_gitea', 'manage_branches', 'link_to_gitea', 'clone_repository', 'create_project_from_repo', 'on_closing', 'gitea_operation', 'init_and_push_to_gitea', 'init_git_repo', 'test_gitea_connection', 'verify_repository_on_gitea', 'fix_repository_issues', 'manage_large_files', 'setup_git_lfs', 'run' ] # Private/Protected Methoden die NICHT Teil der öffentlichen API sind PRIVATE_METHODS = [ '_differential_update', '_update_project_tiles_colors', '_on_click_start', '_on_click_end', '_on_dropdown_select', '_on_focus_in', '_on_focus_out', '_check_pending_updates', '_handle_process_ended', '_create_project_after_clone', '_show_scrollable_info' ] @patch('gui.main_window.logger') @patch('gui.main_window.ProjectProcessTracker') @patch('gui.main_window.ProcessManager') @patch('gui.main_window.VPSConnection') @patch('gui.main_window.ReadmeGenerator') @patch('gui.main_window.TerminalLauncher') @patch('gui.main_window.ProjectManager') @patch('gui.main_window.RepositoryManager') def test_all_public_methods_exist(self, *mocks): """Testet dass alle öffentlichen Methoden existieren""" # Import after all mocks are set up from gui.main_window import MainWindow # Check that all required methods exist missing_methods = [] for method_name in self.REQUIRED_PUBLIC_METHODS: if not hasattr(MainWindow, method_name): missing_methods.append(method_name) self.assertEqual( missing_methods, [], f"Following public methods are missing: {missing_methods}" ) def test_no_unexpected_public_methods(self): """Warnt vor neuen öffentlichen Methoden die dokumentiert werden sollten""" # This test will be implemented after import works pass class TestMainWindowBehavior(unittest.TestCase): """Behavioral tests for critical MainWindow operations""" def setUp(self): """Set up test fixtures""" self.window = None def test_project_lifecycle(self): """Test basic project creation, opening and deletion""" # TODO: Implement after mocking is complete pass def test_gitea_operations(self): """Test Gitea integration operations""" # TODO: Test init_and_push_to_gitea, push_to_gitea, etc. pass def test_duplicate_methods_behavior(self): """Ensure duplicate methods have consistent behavior""" # TODO: Compare behavior of duplicate methods pass if __name__ == '__main__': unittest.main()