from __future__ import annotations from unittest.mock import AsyncMock from fastapi.testclient import TestClient from mcp_common.auth import Principal, TokenStore from mcp_common.environment import EnvironmentInfo from mcp_deribit.server import create_app def _make_app(env_info, creds): c = AsyncMock() c.set_leverage = AsyncMock(return_value={"state": "ok"}) store = TokenStore(tokens={ "ct": Principal("core", {"core"}), "ot": Principal("observer", {"observer"}), }) return create_app(client=c, token_store=store, creds=creds, env_info=env_info) def test_environment_info_full_shape(): env = EnvironmentInfo( exchange="deribit", environment="testnet", source="env", env_value="true", base_url="https://test.deribit.com/api/v2", ) app = _make_app(env, creds={"max_leverage": 3}) c = TestClient(app) r = c.post( "/tools/environment_info", headers={"Authorization": "Bearer ot"}, ) assert r.status_code == 200 body = r.json() assert body["exchange"] == "deribit" assert body["environment"] == "testnet" assert body["source"] == "env" assert body["env_value"] == "true" assert body["base_url"] == "https://test.deribit.com/api/v2" assert body["max_leverage"] == 3 def test_environment_info_default_source(): env = EnvironmentInfo( exchange="deribit", environment="testnet", source="default", env_value=None, base_url="https://test.deribit.com/api/v2", ) app = _make_app(env, creds={"max_leverage": 1}) c = TestClient(app) r = c.post( "/tools/environment_info", headers={"Authorization": "Bearer ct"}, ) assert r.status_code == 200 body = r.json() assert body["source"] == "default" assert body["env_value"] is None assert body["max_leverage"] == 1 def test_environment_info_requires_auth(): env = EnvironmentInfo( exchange="deribit", environment="testnet", source="default", env_value=None, base_url="https://test.deribit.com/api/v2", ) app = _make_app(env, creds={"max_leverage": 3}) c = TestClient(app) r = c.post("/tools/environment_info") assert r.status_code == 401