from __future__ import annotations from unittest.mock import AsyncMock, MagicMock from fastapi.testclient import TestClient from mcp_common.auth import Principal, TokenStore from mcp_common.environment import EnvironmentInfo from mcp_alpaca.server import create_app def _make_app(env_info, creds): c = MagicMock() c.paper = 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_paper_is_testnet(): """Alpaca: 'paper' nel secret mappa a environment='testnet'.""" env = EnvironmentInfo( exchange="alpaca", environment="testnet", source="env", env_value="true", base_url="https://paper-api.alpaca.markets", ) app = _make_app(env, creds={"max_leverage": 1}) c = TestClient(app) r = c.post("/tools/environment_info", headers={"Authorization": "Bearer ot"}) assert r.status_code == 200 body = r.json() assert body["exchange"] == "alpaca" assert body["environment"] == "testnet" assert body["source"] == "env" assert body["base_url"] == "https://paper-api.alpaca.markets" assert body["max_leverage"] == 1 def test_environment_info_requires_auth(): env = EnvironmentInfo( exchange="alpaca", environment="testnet", source="default", env_value=None, base_url="https://paper-api.alpaca.markets", ) app = _make_app(env, creds={"max_leverage": 1}) c = TestClient(app) r = c.post("/tools/environment_info") assert r.status_code == 401