diff --git a/src/cerbero_mcp/exchanges/__init__.py b/src/cerbero_mcp/exchanges/__init__.py index e69de29..38178c2 100644 --- a/src/cerbero_mcp/exchanges/__init__.py +++ b/src/cerbero_mcp/exchanges/__init__.py @@ -0,0 +1,22 @@ +"""Builder centralizzato di client per ClientRegistry.""" +from __future__ import annotations + +from typing import Literal + +from cerbero_mcp.settings import Settings + +Environment = Literal["testnet", "mainnet"] + + +async def build_client( + settings: Settings, exchange: str, env: Environment +): + if exchange == "deribit": + from cerbero_mcp.exchanges.deribit.client import DeribitClient + + return DeribitClient( + client_id=settings.deribit.client_id, + client_secret=settings.deribit.client_secret.get_secret_value(), + testnet=(env == "testnet"), + ) + raise ValueError(f"unsupported exchange: {exchange}") diff --git a/tests/unit/test_exchanges_builder.py b/tests/unit/test_exchanges_builder.py new file mode 100644 index 0000000..0bc1959 --- /dev/null +++ b/tests/unit/test_exchanges_builder.py @@ -0,0 +1,37 @@ +from __future__ import annotations + +import pytest + + +@pytest.mark.asyncio +async def test_build_client_deribit_returns_correct_url(monkeypatch): + from tests.unit.test_settings import _minimal_env + + for k, v in _minimal_env().items(): + monkeypatch.setenv(k, v) + + from cerbero_mcp.settings import Settings + from cerbero_mcp.exchanges import build_client + + s = Settings() + c_test = await build_client(s, "deribit", "testnet") + c_live = await build_client(s, "deribit", "mainnet") + + # DeribitClient espone base_url come property derivata da self.testnet + assert "test" in c_test.base_url.lower() + assert "test" not in c_live.base_url.lower() + + +@pytest.mark.asyncio +async def test_build_client_unknown_exchange_raises(monkeypatch): + from tests.unit.test_settings import _minimal_env + + for k, v in _minimal_env().items(): + monkeypatch.setenv(k, v) + + from cerbero_mcp.settings import Settings + from cerbero_mcp.exchanges import build_client + + s = Settings() + with pytest.raises(ValueError): + await build_client(s, "ftx", "testnet")