import pytest
from unittest.mock import patch
from gui_2 import App

@pytest.fixture
def app_instance():
    with (
         patch('gui_2.load_config', return_value={'gui': {'show_windows': {}}}),
         patch('gui_2.save_config'),
         patch('gui_2.project_manager'),
         patch('gui_2.session_logger'),
         patch('gui_2.immapp.run'),
         patch.object(App, '_load_active_project'),
         patch.object(App, '_fetch_models'),
         patch.object(App, '_load_fonts'),
         patch.object(App, '_post_init')
    ):
        yield App()

def test_gui2_hubs_exist_in_show_windows(app_instance):
    """
    Verifies that the new consolidated Hub windows are defined in the App's show_windows.
    This ensures they will be available in the 'Windows' menu.
    """
    expected_hubs = [
        "Context Hub",
        "AI Settings",
        "Discussion Hub",
        "Operations Hub",
        "Files & Media",
        "Theme",
    ]
    
    for hub in expected_hubs:
        assert hub in app_instance.show_windows, f"Expected hub window '{hub}' not found in show_windows"

def test_gui2_old_windows_removed_from_show_windows(app_instance):
    """
    Verifies that the old fragmented windows are removed from show_windows.
    """
    old_windows = [
        "Projects", "Files", "Screenshots",
        "Provider", "System Prompts",
        "Message", "Response", "Tool Calls", "Comms History"
    ]
    
    for old_win in old_windows:
        assert old_win not in app_instance.show_windows, f"Old window '{old_win}' should have been removed from show_windows"
