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