from __future__ import annotations import json import pytest from mcp_common.environment import EnvironmentInfo, resolve_environment def test_env_var_overrides_secret(monkeypatch): monkeypatch.setenv("DERIBIT_TESTNET", "false") creds = {"testnet": True, "base_url_live": "L", "base_url_testnet": "T"} info = resolve_environment( creds, env_var="DERIBIT_TESTNET", flag_key="testnet", exchange="deribit", ) assert info.environment == "mainnet" assert info.source == "env" assert info.env_value == "false" assert info.base_url == "L" def test_secret_used_when_env_missing(monkeypatch): monkeypatch.delenv("DERIBIT_TESTNET", raising=False) creds = {"testnet": True, "base_url_live": "L", "base_url_testnet": "T"} info = resolve_environment( creds, env_var="DERIBIT_TESTNET", flag_key="testnet", exchange="deribit", ) assert info.environment == "testnet" assert info.source == "credentials" assert info.env_value is None assert info.base_url == "T" def test_default_when_both_missing(monkeypatch): monkeypatch.delenv("FOO_TESTNET", raising=False) creds = {"base_url_live": "L", "base_url_testnet": "T"} info = resolve_environment( creds, env_var="FOO_TESTNET", flag_key="testnet", exchange="foo", ) assert info.environment == "testnet" assert info.source == "default" assert info.env_value is None @pytest.mark.parametrize("raw,expected", [ ("1", "testnet"), ("true", "testnet"), ("yes", "testnet"), ("on", "testnet"), ("TRUE", "testnet"), ("0", "mainnet"), ("false", "mainnet"), ("no", "mainnet"), ("off", "mainnet"), ("garbage", "mainnet"), ]) def test_env_value_truthy_parsing(monkeypatch, raw, expected): monkeypatch.setenv("X_TESTNET", raw) info = resolve_environment( {"base_url_live": "L", "base_url_testnet": "T"}, env_var="X_TESTNET", flag_key="testnet", exchange="x", ) assert info.environment == expected def test_alpaca_paper_flag_key(monkeypatch): """Alpaca usa 'paper' invece di 'testnet' nel secret.""" monkeypatch.delenv("ALPACA_PAPER", raising=False) creds = {"paper": False, "base_url_live": "L", "base_url_testnet": "T"} info = resolve_environment( creds, env_var="ALPACA_PAPER", flag_key="paper", exchange="alpaca", ) assert info.environment == "mainnet" assert info.source == "credentials"