Mock the server module to prevent import errors and provide global state.
()
| 48 | |
| 49 | @pytest.fixture(autouse=True) |
| 50 | def mock_server_module(): |
| 51 | """Mock the server module to prevent import errors and provide global state.""" |
| 52 | module_name = "server" |
| 53 | |
| 54 | # Create a mock module |
| 55 | mock_module = types.ModuleType(module_name) |
| 56 | |
| 57 | # Set up required attributes (using setattr for dynamic module attributes) |
| 58 | setattr(mock_module, "logger", MagicMock()) |
| 59 | setattr(mock_module, "request_queue", asyncio.Queue()) |
| 60 | setattr(mock_module, "processing_lock", asyncio.Lock()) |
| 61 | setattr(mock_module, "model_switching_lock", asyncio.Lock()) |
| 62 | setattr(mock_module, "params_cache_lock", asyncio.Lock()) |
| 63 | |
| 64 | # page_instance needs is_closed() as sync method |
| 65 | page_mock = AsyncMock() |
| 66 | page_mock.is_closed = MagicMock(return_value=False) |
| 67 | setattr(mock_module, "page_instance", page_mock) |
| 68 | |
| 69 | # browser_instance needs is_connected() as sync method |
| 70 | browser_mock = AsyncMock() |
| 71 | browser_mock.is_connected = MagicMock(return_value=True) |
| 72 | setattr(mock_module, "browser_instance", browser_mock) |
| 73 | setattr(mock_module, "parsed_model_list", []) |
| 74 | setattr(mock_module, "log_ws_manager", MagicMock()) |
| 75 | setattr(mock_module, "STREAM_QUEUE", MagicMock()) |
| 76 | setattr(mock_module, "STREAM_PROCESS", AsyncMock()) |
| 77 | setattr(mock_module, "PLAYWRIGHT_PROXY_SETTINGS", {}) |
| 78 | setattr(mock_module, "is_initializing", False) |
| 79 | setattr(mock_module, "is_page_ready", True) |
| 80 | setattr(mock_module, "is_browser_connected", True) |
| 81 | setattr(mock_module, "model_list_fetch_event", asyncio.Event()) |
| 82 | setattr(mock_module, "worker_task", MagicMock()) |
| 83 | setattr(mock_module, "queue_worker", AsyncMock()) |
| 84 | setattr(mock_module, "playwright_manager", AsyncMock()) |
| 85 | setattr(mock_module, "global_model_list_raw_json", None) |
| 86 | setattr(mock_module, "current_ai_studio_model_id", None) |
| 87 | setattr(mock_module, "is_playwright_ready", True) |
| 88 | setattr(mock_module, "excluded_model_ids", []) |
| 89 | setattr(mock_module, "console_logs", []) |
| 90 | setattr(mock_module, "network_log", {"requests": [], "responses": []}) |
| 91 | |
| 92 | # Save original if it exists |
| 93 | original_module = sys.modules.get(module_name) |
| 94 | |
| 95 | # Inject mock |
| 96 | sys.modules[module_name] = mock_module |
| 97 | |
| 98 | yield mock_module |
| 99 | |
| 100 | # Restore original or clean up |
| 101 | if original_module: |
| 102 | sys.modules[module_name] = original_module |
| 103 | else: |
| 104 | sys.modules.pop(module_name, None) |
| 105 | |
| 106 | |
| 107 | @pytest.fixture |