You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

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