from argus_mcp.models import MarketQuote from argus_mcp.regime import build_regime_snapshot def test_regime_prefers_risk_on_when_qqq_leads(): snapshot = build_regime_snapshot( [ MarketQuote(symbol="QQQ", source="test", change_pct=2.0), MarketQuote(symbol="SPY", source="test", change_pct=0.5), MarketQuote(symbol="BTCUSD", source="test", change_pct=2.5), MarketQuote(symbol="ETHUSD", source="test", change_pct=4.0), MarketQuote(symbol="HYG", source="test", change_pct=0.8), MarketQuote(symbol="UUP", source="test", change_pct=-0.3), MarketQuote(symbol="VXX", source="test", change_pct=-1.5), ] ) assert snapshot.regime == "risk_on" assert snapshot.confidence > 0 assert snapshot.components["risk_appetite"] > 0 def test_regime_prefers_stress_when_vol_spikes_and_credit_weakens(): snapshot = build_regime_snapshot( [ MarketQuote(symbol="QQQ", source="test", change_pct=-1.5), MarketQuote(symbol="SPY", source="test", change_pct=-0.9), MarketQuote(symbol="BTCUSD", source="test", change_pct=-3.5), MarketQuote(symbol="HYG", source="test", change_pct=-1.0), MarketQuote(symbol="UUP", source="test", change_pct=0.7), MarketQuote(symbol="VXX", source="test", change_pct=4.5), MarketQuote(symbol="UVXY", source="test", change_pct=8.0), MarketQuote(symbol="TLT", source="test", change_pct=1.0), ] ) assert snapshot.regime in {"stress", "risk_off"} assert snapshot.components["stress"] > 0 def test_regime_handles_no_data(): snapshot = build_regime_snapshot([]) assert snapshot.regime == "no_data" assert snapshot.confidence == 0.0 def test_regime_responds_to_metals_strength(): snapshot = build_regime_snapshot( [ MarketQuote(symbol="XAU", source="metals_mcp", change_pct=1.8), MarketQuote(symbol="XAG", source="metals_mcp", change_pct=1.2), MarketQuote(symbol="XPT", source="metals_mcp", change_pct=0.9), MarketQuote(symbol="XPD", source="metals_mcp", change_pct=0.7), ] ) assert snapshot.components["real_asset_pressure"] > 0 assert snapshot.regime in {"real_asset_inflation", "neutral", "risk_off", "compression"}