from __future__ import annotations from unittest.mock import AsyncMock, MagicMock from fastapi.testclient import TestClient from mcp_bybit.server import create_app from mcp_common.auth import Principal, TokenStore from mcp_common.environment import EnvironmentInfo def _make_app(env_info, creds): c = MagicMock() c.testnet = True 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="bybit", environment="testnet", source="env", env_value="true", base_url="https://api-testnet.bybit.com", ) 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"] == "bybit" assert body["environment"] == "testnet" assert body["source"] == "env" assert body["env_value"] == "true" assert body["base_url"] == "https://api-testnet.bybit.com" assert body["max_leverage"] == 3 def test_environment_info_requires_auth(): env = EnvironmentInfo( exchange="bybit", environment="testnet", source="default", env_value=None, base_url="https://api-testnet.bybit.com", ) app = _make_app(env, creds={"max_leverage": 3}) c = TestClient(app) r = c.post("/tools/environment_info") assert r.status_code == 401