from unittest.mock import Mock, patch HOST = "example-host" PORT = 9223 WS_URL = f"ws://{HOST}:{PORT}/devtools/browser/abc123" HTTP_URL = f"http://{HOST}:{PORT}" VERSION_URL = f"{HTTP_URL}/json/version" class TestResolveCdpOverride: def test_keeps_full_devtools_websocket_url(self): from tools.browser_tool import _resolve_cdp_override assert _resolve_cdp_override(WS_URL) == WS_URL def test_resolves_http_discovery_endpoint_to_websocket(self): from tools.browser_tool import _resolve_cdp_override response = Mock() response.raise_for_status.return_value = None response.json.return_value = {"webSocketDebuggerUrl": WS_URL} with patch("tools.browser_tool.requests.get", return_value=response) as mock_get: resolved = _resolve_cdp_override(HTTP_URL) assert resolved == WS_URL mock_get.assert_called_once_with(VERSION_URL, timeout=10) def test_resolves_bare_ws_hostport_to_discovery_websocket(self): from tools.browser_tool import _resolve_cdp_override response = Mock() response.raise_for_status.return_value = None response.json.return_value = {"webSocketDebuggerUrl": WS_URL} with patch("tools.browser_tool.requests.get", return_value=response) as mock_get: resolved = _resolve_cdp_override(f"ws://{HOST}:{PORT}") assert resolved == WS_URL mock_get.assert_called_once_with(VERSION_URL, timeout=10) def test_falls_back_to_raw_url_when_discovery_fails(self): from tools.browser_tool import _resolve_cdp_override with patch("tools.browser_tool.requests.get", side_effect=RuntimeError("boom")): assert _resolve_cdp_override(HTTP_URL) == HTTP_URL