feat(mcp_common): add environment.resolve_environment with TDD
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
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"
|
||||
Reference in New Issue
Block a user