import pytest from pydantic import ValidationError from arbitrade.config.settings import Settings def test_dashboard_auth_requires_both_fields() -> None: with pytest.raises(ValidationError): Settings(_env_file=None, DASHBOARD_AUTH_USERNAME="admin") def test_kraken_api_auth_requires_key_and_secret() -> None: with pytest.raises(ValidationError): Settings( _env_file=None, KRAKEN_API_KEY="key-only", KRAKEN_API_SECRET="", ) def test_kraken_permissions_require_query_and_trade() -> None: with pytest.raises(ValidationError): Settings( _env_file=None, KRAKEN_API_KEY="k", KRAKEN_API_SECRET="s", KRAKEN_API_KEY_PERMISSIONS="query", ) def test_kraken_permissions_forbid_withdrawal_scope() -> None: with pytest.raises(ValidationError): Settings( _env_file=None, KRAKEN_API_KEY="k", KRAKEN_API_SECRET="s", KRAKEN_API_KEY_PERMISSIONS="query,trade,withdraw", ) def test_alert_min_severity_is_validated() -> None: with pytest.raises(ValidationError): Settings(_env_file=None, ALERT_MIN_SEVERITY="nope") def test_valid_security_configuration_passes() -> None: settings = Settings( _env_file=None, KRAKEN_API_KEY="k", KRAKEN_API_SECRET="s", KRAKEN_API_KEY_PERMISSIONS="query,trade", ALERT_MIN_SEVERITY="warning", ) assert settings.kraken_api_key_permissions == "query,trade" def test_stat_arb_entry_zscore_must_exceed_exit_zscore() -> None: with pytest.raises(ValidationError): Settings( _env_file=None, STRATEGY_STAT_ARB_ENTRY_ZSCORE="0.5", STRATEGY_STAT_ARB_EXIT_ZSCORE="0.5", ) def test_stat_arb_lookback_window_must_be_at_least_two() -> None: with pytest.raises(ValidationError): Settings( _env_file=None, STRATEGY_STAT_ARB_LOOKBACK_WINDOW="1", )