Skip to content

Commit ff322fc

Browse files
committed
feat: add MockHttpClient to client module
1 parent 2aac3fa commit ff322fc

1 file changed

Lines changed: 59 additions & 0 deletions

File tree

src/deepset_mcp/client.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,65 @@
1010
T = TypeVar("T")
1111

1212

13+
# Custom mock HTTP client for testing
14+
class MockHttpClient(Protocol):
15+
def __init__(self, responses: dict[str, Any]) -> None:
16+
self.responses = responses
17+
self.requests: list[dict[str, Any]] = []
18+
19+
async def get(
20+
self, url: str, *, headers: dict[str, str] | None = None, params: dict[str, Any] | None = None
21+
) -> httpx.Response:
22+
self.requests.append({"method": "GET", "url": url, "headers": headers, "params": params})
23+
key = f"GET {url}"
24+
if key in self.responses:
25+
return self.responses[key]
26+
# Default mock response
27+
mock_response = mock.Mock(spec=httpx.Response)
28+
mock_response.status_code = 200
29+
mock_response.text = "{}"
30+
mock_response.json.return_value = {}
31+
return mock_response
32+
33+
async def post(
34+
self,
35+
url: str,
36+
*,
37+
headers: dict[str, str] | None = None,
38+
json: dict[str, Any] | None = None,
39+
data: dict[str, Any] | None = None,
40+
) -> httpx.Response:
41+
self.requests.append({"method": "POST", "url": url, "headers": headers, "json": json, "data": data})
42+
key = f"POST {url}"
43+
if key in self.responses:
44+
return self.responses[key]
45+
# Default mock response
46+
mock_response = mock.Mock(spec=httpx.Response)
47+
mock_response.status_code = 200
48+
mock_response.text = "{}"
49+
mock_response.json.return_value = {}
50+
return mock_response
51+
52+
async def put(
53+
self,
54+
url: str,
55+
*,
56+
headers: dict[str, str] | None = None,
57+
json: dict[str, Any] | None = None,
58+
data: dict[str, Any] | None = None,
59+
) -> httpx.Response:
60+
self.requests.append({"method": "PUT", "url": url, "headers": headers, "json": json, "data": data})
61+
key = f"PUT {url}"
62+
if key in self.responses:
63+
return self.responses[key]
64+
# Default mock response
65+
mock_response = mock.Mock(spec=httpx.Response)
66+
mock_response.status_code = 200
67+
mock_response.text = "{}"
68+
mock_response.json.return_value = {}
69+
return mock_response
70+
71+
1372
class HttpClient(Protocol):
1473
"""Protocol for HTTP clients to enable dependency injection and testing."""
1574

0 commit comments

Comments
 (0)