http.py 918 B

123456789101112131415161718192021222324252627282930313233
  1. import json
  2. from typing import Literal
  3. import httpx
  4. import pytest
  5. from _pytest.monkeypatch import MonkeyPatch
  6. class MockedHttp:
  7. def httpx_request(
  8. method: Literal["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD"], url: str, **kwargs
  9. ) -> httpx.Response:
  10. """
  11. Mocked httpx.request
  12. """
  13. request = httpx.Request(
  14. method, url, params=kwargs.get("params"), headers=kwargs.get("headers"), cookies=kwargs.get("cookies")
  15. )
  16. data = kwargs.get("data", None)
  17. resp = json.dumps(data).encode("utf-8") if data else b"OK"
  18. response = httpx.Response(
  19. status_code=200,
  20. request=request,
  21. content=resp,
  22. )
  23. return response
  24. @pytest.fixture
  25. def setup_http_mock(request, monkeypatch: MonkeyPatch):
  26. monkeypatch.setattr(httpx, "request", MockedHttp.httpx_request)
  27. yield
  28. monkeypatch.undo()