http.py 930 B

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