38 lines
1.1 KiB
Python
38 lines
1.1 KiB
Python
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})
|