http.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import os
  2. from typing import Literal
  3. import pytest
  4. import requests
  5. from _pytest.monkeypatch import MonkeyPatch
  6. from core.plugin.entities.plugin_daemon import PluginDaemonBasicResponse
  7. from core.tools.entities.common_entities import I18nObject
  8. from core.tools.entities.tool_entities import ToolProviderEntity, ToolProviderIdentity
  9. class MockedHttp:
  10. @classmethod
  11. def list_tools(cls) -> list[ToolProviderEntity]:
  12. return [
  13. ToolProviderEntity(
  14. identity=ToolProviderIdentity(
  15. author="Yeuoly",
  16. name="Yeuoly",
  17. description=I18nObject(en_US="Yeuoly"),
  18. icon="ssss.svg",
  19. label=I18nObject(en_US="Yeuoly"),
  20. )
  21. )
  22. ]
  23. @classmethod
  24. def requests_request(
  25. cls, method: Literal["GET", "POST", "PUT", "DELETE", "PATCH", "HEAD"], url: str, **kwargs
  26. ) -> requests.Response:
  27. """
  28. Mocked requests.request
  29. """
  30. request = requests.PreparedRequest()
  31. request.method = method
  32. request.url = url
  33. if url.endswith("/tools"):
  34. content = PluginDaemonBasicResponse[list[ToolProviderEntity]](
  35. code=0, message="success", data=cls.list_tools()
  36. ).model_dump_json()
  37. else:
  38. raise ValueError("")
  39. response = requests.Response()
  40. response.status_code = 200
  41. response.request = request
  42. response._content = content.encode("utf-8")
  43. return response
  44. MOCK_SWITCH = os.getenv("MOCK_SWITCH", "false").lower() == "true"
  45. @pytest.fixture
  46. def setup_http_mock(request, monkeypatch: MonkeyPatch):
  47. if MOCK_SWITCH:
  48. monkeypatch.setattr(requests, "request", MockedHttp.requests_request)
  49. def unpatch():
  50. monkeypatch.undo()
  51. yield
  52. if MOCK_SWITCH:
  53. unpatch()