webdrop-bridge/test_results.txt
claudi 8b0df0e04f Add unit tests for configuration management and settings dialog
- Implement tests for ConfigValidator to ensure proper validation of configuration settings, including valid configurations, required fields, type checks, and error handling.
- Create tests for ConfigProfile to verify profile management functionalities such as saving, loading, listing, and deleting profiles.
- Add tests for ConfigExporter to validate JSON export and import processes, including error handling for non-existent files and invalid JSON.
- Introduce tests for SettingsDialog to confirm proper initialization, tab existence, and configuration data retrieval and application.
2026-01-29 12:52:53 +01:00

151 lines
30 KiB
Text

============================= test session starts =============================
platform win32 -- Python 3.13.11, pytest-9.0.2, pluggy-1.6.0 -- c:\Development\VS Code Projects\webdrop_bridge\.venv\Scripts\python.exe
cachedir: .pytest_cache
PySide6 6.10.1 -- Qt runtime 6.10.1 -- Qt compiled 6.10.1
rootdir: C:\Development\VS Code Projects\webdrop_bridge
configfile: pytest.ini (WARNING: ignoring pytest config in pyproject.toml!)
plugins: asyncio-1.3.0, cov-7.0.0, qt-4.5.0
asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collecting ... collected 206 items
tests/integration/test_update_flow.py::TestUpdateFlowIntegration::test_full_update_check_flow PASSED [ 0%]
tests/integration/test_update_flow.py::TestUpdateFlowIntegration::test_update_check_with_cache PASSED [ 0%]
tests/integration/test_update_flow.py::TestUpdateFlowIntegration::test_update_check_no_newer_version PASSED [ 1%]
tests/integration/test_update_flow.py::TestUpdateFlowIntegration::test_update_check_network_error PASSED [ 1%]
tests/integration/test_update_flow.py::TestUpdateFlowIntegration::test_version_parsing_in_api_response PASSED [ 2%]
tests/integration/test_update_flow.py::TestUpdateFlowIntegration::test_asset_parsing_in_release PASSED [ 2%]
tests/integration/test_update_flow.py::TestUpdateFlowIntegration::test_changelog_preserved PASSED [ 3%]
tests/unit/test_config.py::TestConfigFromEnv::test_from_env_with_all_values PASSED [ 3%]
tests/unit/test_config.py::TestConfigFromEnv::test_from_env_with_defaults PASSED [ 4%]
tests/unit/test_config.py::TestConfigFromEnv::test_from_env_invalid_log_level PASSED [ 4%]
tests/unit/test_config.py::TestConfigFromEnv::test_from_env_invalid_window_dimension PASSED [ 5%]
tests/unit/test_config.py::TestConfigFromEnv::test_from_env_invalid_root_path PASSED [ 5%]
tests/unit/test_config.py::TestConfigFromEnv::test_from_env_empty_webapp_url PASSED [ 6%]
tests/unit/test_config.py::TestConfigValidation::test_root_path_resolution PASSED [ 6%]
tests/unit/test_config.py::TestConfigValidation::test_multiple_root_paths PASSED [ 7%]
tests/unit/test_config.py::TestConfigValidation::test_allowed_urls_empty PASSED [ 7%]
tests/unit/test_config.py::TestConfigValidation::test_allowed_urls_single PASSED [ 8%]
tests/unit/test_config.py::TestConfigValidation::test_allowed_urls_multiple PASSED [ 8%]
tests/unit/test_config.py::TestConfigValidation::test_allowed_urls_with_whitespace PASSED [ 9%]
tests/unit/test_config_manager.py::TestConfigValidator::test_validate_valid_config PASSED [ 9%]
tests/unit/test_config_manager.py::TestConfigValidator::test_validate_missing_required_field PASSED [ 10%]
tests/unit/test_config_manager.py::TestConfigValidator::test_validate_invalid_type PASSED [ 10%]
tests/unit/test_config_manager.py::TestConfigValidator::test_validate_invalid_log_level PASSED [ 11%]
tests/unit/test_config_manager.py::TestConfigValidator::test_validate_invalid_version_format PASSED [ 11%]
tests/unit/test_config_manager.py::TestConfigValidator::test_validate_out_of_range_value PASSED [ 12%]
tests/unit/test_config_manager.py::TestConfigValidator::test_validate_or_raise_valid PASSED [ 12%]
tests/unit/test_config_manager.py::TestConfigValidator::test_validate_or_raise_invalid PASSED [ 13%]
tests/unit/test_config_manager.py::TestConfigProfile::test_save_profile PASSED [ 13%]
tests/unit/test_config_manager.py::TestConfigProfile::test_load_profile PASSED [ 14%]
tests/unit/test_config_manager.py::TestConfigProfile::test_load_nonexistent_profile PASSED [ 14%]
tests/unit/test_config_manager.py::TestConfigProfile::test_list_profiles PASSED [ 15%]
tests/unit/test_config_manager.py::TestConfigProfile::test_delete_profile PASSED [ 15%]
tests/unit/test_config_manager.py::TestConfigProfile::test_delete_nonexistent_profile PASSED [ 16%]
tests/unit/test_config_manager.py::TestConfigProfile::test_invalid_profile_name PASSED [ 16%]
tests/unit/test_config_manager.py::TestConfigExporter::test_export_to_json PASSED [ 16%]
tests/unit/test_config_manager.py::TestConfigExporter::test_import_from_json PASSED [ 17%]
tests/unit/test_config_manager.py::TestConfigExporter::test_import_nonexistent_file PASSED [ 17%]
tests/unit/test_config_manager.py::TestConfigExporter::test_import_invalid_json PASSED [ 18%]
tests/unit/test_config_manager.py::TestConfigExporter::test_import_invalid_config PASSED [ 18%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorInitialization::test_drag_interceptor_creation PASSED [ 19%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorInitialization::test_drag_interceptor_has_signals PASSED [ 19%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorInitialization::test_set_validator PASSED [ 20%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorValidation::test_initiate_drag_no_files PASSED [ 20%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorValidation::test_initiate_drag_no_validator PASSED [ 21%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorValidation::test_initiate_drag_single_valid_file PASSED [ 21%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorValidation::test_initiate_drag_invalid_path PASSED [ 22%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorValidation::test_initiate_drag_nonexistent_file PASSED [ 22%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorMultipleFiles::test_initiate_drag_multiple_files PASSED [ 23%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorMultipleFiles::test_initiate_drag_mixed_valid_invalid PASSED [ 23%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorMimeData::test_mime_data_creation PASSED [ 24%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorSignals::test_drag_started_signal_emitted PASSED [ 24%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorSignals::test_drag_failed_signal_on_no_files PASSED [ 25%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorSignals::test_drag_failed_signal_on_validation_error PASSED [ 25%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorDragExecution::test_drag_cancelled_returns_false PASSED [ 26%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorDragExecution::test_pixmap_created_from_widget PASSED [ 26%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorIntegration::test_drag_with_nested_file PASSED [ 27%]
tests/unit/test_drag_interceptor.py::TestDragInterceptorIntegration::test_drag_with_relative_path PASSED [ 27%]
tests/unit/test_logging.py::TestSetupLogging::test_setup_logging_console_only PASSED [ 28%]
tests/unit/test_logging.py::TestSetupLogging::test_setup_logging_with_file PASSED [ 28%]
tests/unit/test_logging.py::TestSetupLogging::test_setup_logging_invalid_level PASSED [ 29%]
tests/unit/test_logging.py::TestSetupLogging::test_setup_logging_invalid_file_path PASSED [ 29%]
tests/unit/test_logging.py::TestSetupLogging::test_setup_logging_custom_format PASSED [ 30%]
tests/unit/test_logging.py::TestSetupLogging::test_setup_logging_creates_parent_dirs PASSED [ 30%]
tests/unit/test_logging.py::TestSetupLogging::test_setup_logging_removes_duplicates PASSED [ 31%]
tests/unit/test_logging.py::TestGetLogger::test_get_logger PASSED [ 31%]
tests/unit/test_logging.py::TestGetLogger::test_get_logger_default_name PASSED [ 32%]
tests/unit/test_logging.py::TestLogRotation::test_rotating_file_handler_configured PASSED [ 32%]
tests/unit/test_logging.py::TestJSONFormatter::test_json_formatter_creates_valid_json PASSED [ 33%]
tests/unit/test_logging.py::TestJSONFormatter::test_json_formatter_includes_timestamp PASSED [ 33%]
tests/unit/test_logging.py::TestJSONFormatter::test_json_formatter_with_exception PASSED [ 33%]
tests/unit/test_logging.py::TestJSONFormatter::test_setup_logging_with_json_format PASSED [ 34%]
tests/unit/test_logging.py::TestLogArchival::test_setup_logging_with_log_file_created PASSED [ 34%]
tests/unit/test_logging.py::TestLogArchival::test_archive_old_logs_with_nonexistent_directory PASSED [ 35%]
tests/unit/test_logging.py::TestPerformanceTracker::test_performance_tracker_context_manager PASSED [ 35%]
tests/unit/test_logging.py::TestPerformanceTracker::test_performance_tracker_logs_timing PASSED [ 36%]
tests/unit/test_logging.py::TestPerformanceTracker::test_performance_tracker_logs_errors PASSED [ 36%]
tests/unit/test_logging.py::TestPerformanceTracker::test_performance_tracker_get_elapsed_before_exit PASSED [ 37%]
tests/unit/test_main_window.py::TestMainWindowInitialization::test_main_window_creation PASSED [ 37%]
tests/unit/test_main_window.py::TestMainWindowInitialization::test_main_window_title PASSED [ 38%]
tests/unit/test_main_window.py::TestMainWindowInitialization::test_main_window_geometry PASSED [ 38%]
tests/unit/test_main_window.py::TestMainWindowInitialization::test_main_window_has_web_view PASSED [ 39%]
tests/unit/test_main_window.py::TestMainWindowInitialization::test_main_window_has_drag_interceptor PASSED [ 39%]
tests/unit/test_main_window.py::TestMainWindowNavigation::test_navigation_toolbar_created PASSED [ 40%]
tests/unit/test_main_window.py::TestMainWindowNavigation::test_navigation_toolbar_not_movable PASSED [ 40%]
tests/unit/test_main_window.py::TestMainWindowNavigation::test_navigate_home PASSED [ 41%]
tests/unit/test_main_window.py::TestMainWindowNavigation::test_navigate_home_with_http_url PASSED [ 41%]
tests/unit/test_main_window.py::TestMainWindowNavigation::test_navigate_home_with_file_url PASSED [ 42%]
tests/unit/test_main_window.py::TestMainWindowWebAppLoading::test_load_local_webapp_file PASSED [ 42%]
tests/unit/test_main_window.py::TestMainWindowWebAppLoading::test_load_remote_webapp_url PASSED [ 43%]
tests/unit/test_main_window.py::TestMainWindowWebAppLoading::test_load_nonexistent_file_shows_welcome_page PASSED [ 43%]
tests/unit/test_main_window.py::TestMainWindowDragIntegration::test_drag_interceptor_validator_set PASSED [ 44%]
tests/unit/test_main_window.py::TestMainWindowDragIntegration::test_drag_interceptor_signals_connected PASSED [ 44%]
tests/unit/test_main_window.py::TestMainWindowDragIntegration::test_initiate_drag_delegates_to_interceptor PASSED [ 45%]
tests/unit/test_main_window.py::TestMainWindowDragIntegration::test_on_drag_started_called PASSED [ 45%]
tests/unit/test_main_window.py::TestMainWindowDragIntegration::test_on_drag_failed_called PASSED [ 46%]
tests/unit/test_main_window.py::TestMainWindowURLWhitelist::test_restricted_web_view_receives_allowed_urls PASSED [ 46%]
tests/unit/test_main_window.py::TestMainWindowURLWhitelist::test_empty_allowed_urls_list PASSED [ 47%]
tests/unit/test_main_window.py::TestMainWindowSignals::test_drag_started_signal_connection PASSED [ 47%]
tests/unit/test_main_window.py::TestMainWindowSignals::test_drag_failed_signal_connection PASSED [ 48%]
tests/unit/test_main_window.py::TestMainWindowMenuBar::test_menu_bar_created PASSED [ 48%]
tests/unit/test_main_window.py::TestMainWindowMenuBar::test_window_has_check_for_updates_signal PASSED [ 49%]
tests/unit/test_main_window.py::TestMainWindowMenuBar::test_on_check_for_updates_method_exists PASSED [ 49%]
tests/unit/test_main_window.py::TestMainWindowMenuBar::test_show_about_dialog_method_exists PASSED [ 50%]
tests/unit/test_main_window.py::TestMainWindowStatusBar::test_status_bar_created PASSED [ 50%]
tests/unit/test_main_window.py::TestMainWindowStatusBar::test_update_status_label_created PASSED [ 50%]
tests/unit/test_main_window.py::TestMainWindowStatusBar::test_set_update_status_text_only PASSED [ 51%]
tests/unit/test_main_window.py::TestMainWindowStatusBar::test_set_update_status_with_emoji PASSED [ 51%]
tests/unit/test_main_window.py::TestMainWindowStatusBar::test_set_update_status_checking PASSED [ 52%]
tests/unit/test_main_window.py::TestMainWindowStatusBar::test_set_update_status_available PASSED [ 52%]
tests/unit/test_main_window.py::TestMainWindowStatusBar::test_set_update_status_downloading PASSED [ 53%]
tests/unit/test_main_window.py::TestMainWindowStatusBar::test_set_update_status_error PASSED [ 53%]
tests/unit/test_main_window.py::TestMainWindowStylesheet::test_stylesheet_loading_gracefully_handles_missing_file PASSED [ 54%]
tests/unit/test_main_window.py::TestMainWindowStylesheet::test_stylesheet_loading_with_nonexistent_file PASSED [ 54%]
tests/unit/test_main_window.py::TestMainWindowCloseEvent::test_close_event_accepted PASSED [ 55%]
tests/unit/test_main_window.py::TestMainWindowIntegration::test_full_initialization_flow PASSED [ 55%]
tests/unit/test_main_window.py::TestMainWindowIntegration::test_window_with_multiple_allowed_roots PASSED [ 56%]
tests/unit/test_main_window.py::TestMainWindowIntegration::test_window_with_url_whitelist PASSED [ 56%]
tests/unit/test_project_structure.py::test_project_structure PASSED [ 57%]
tests/unit/test_project_structure.py::test_essential_files PASSED [ 57%]
tests/unit/test_project_structure.py::test_python_package_structure PASSED [ 58%]
tests/unit/test_restricted_web_view.py::TestRestrictedWebEngineView::test_no_restrictions_empty_list PASSED [ 58%]
tests/unit/test_restricted_web_view.py::TestRestrictedWebEngineView::test_no_restrictions_none PASSED [ 59%]
tests/unit/test_restricted_web_view.py::TestRestrictedWebEngineView::test_exact_domain_match PASSED [ 59%]
tests/unit/test_restricted_web_view.py::TestRestrictedWebEngineView::test_exact_domain_mismatch PASSED [ 60%]
tests/unit/test_restricted_web_view.py::TestRestrictedWebEngineView::test_wildcard_pattern_match PASSED [ 60%]
tests/unit/test_restricted_web_view.py::TestRestrictedWebEngineView::test_wildcard_pattern_mismatch PASSED [ 61%]
tests/unit/test_restricted_web_view.py::TestRestrictedWebEngineView::test_localhost_allowed PASSED [ 61%]
tests/unit/test_restricted_web_view.py::TestRestrictedWebEngineView::test_file_url_always_allowed PASSED [ 62%]
tests/unit/test_restricted_web_view.py::TestRestrictedWebEngineView::test_multiple_allowed_urls PASSED [ 62%]
tests/unit/test_restricted_web_view.py::TestRestrictedWebEngineView::test_rejected_url_opens_system_browser PASSED [ 63%]
tests/unit/test_restricted_web_view.py::TestURLAllowedLogic::test_is_url_allowed_empty_list PASSED [ 63%]
tests/unit/test_restricted_web_view.py::TestURLAllowedLogic::test_is_url_allowed_file_scheme PASSED [ 64%]
tests/unit/test_restricted_web_view.py::TestURLAllowedLogic::test_is_url_allowed_exact_match PASSED [ 64%]
tests/unit/test_restricted_web_view.py::TestURLAllowedLogic::test_is_url_allowed_with_port PASSED [ 65%]
tests/unit/test_restricted_web_view.py::TestURLAllowedLogic::test_is_url_allowed_wildcard PASSED [ 65%]
tests/unit/test_startup_check.py::TestUpdateCheckWorker::test_worker_initialization PASSED [ 66%]
tests/unit/test_startup_check.py::TestUpdateCheckWorker::test_worker_has_signals PASSED [ 66%]
tests/unit/test_startup_check.py::TestUpdateCheckWorker::test_worker_run_method_exists PASSED [ 66%]
tests/unit/test_startup_check.py::TestMainWindowStartupCheck::test_window_has_startup_check_method PASSED [ 67%]
tests/unit/test_startup_check.py::TestMainWindowStartupCheck::test_window_has_update_available_signal PASSED [ 67%]
tests/unit/test_startup_check.py::TestMainWindowStartupCheck::test_startup_check_initializes_without_error