from __future__ import annotations import pytest from arbitrade.risk.pre_trade import PreTradeValidator def test_pre_trade_validator_accepts_when_balance_and_min_size_pass() -> None: validator = PreTradeValidator(min_order_size_by_asset={"USD": 50.0}) assert validator.validate( balances_by_asset={"USD": 100.0}, required_by_asset={"USD": 75.0}, ) def test_pre_trade_validator_rejects_when_balance_insufficient() -> None: validator = PreTradeValidator(min_order_size_by_asset={"USD": 50.0}) assert not validator.validate( balances_by_asset={"USD": 40.0}, required_by_asset={"USD": 75.0}, ) def test_pre_trade_validator_rejects_when_below_min_size() -> None: validator = PreTradeValidator(min_order_size_by_asset={"USD": 50.0}) assert not validator.validate( balances_by_asset={"USD": 100.0}, required_by_asset={"USD": 30.0}, ) def test_pre_trade_validator_rejects_invalid_min_order_size_config() -> None: with pytest.raises(ValueError, match="minimum order size"): PreTradeValidator(min_order_size_by_asset={"USD": 0.0})