Build 060.1: add canonical Trade model

This commit is contained in:
2026-07-18 10:02:25 +03:00
parent f2bacb80c9
commit c52c099d54
3 changed files with 995 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
# app/tests/unit/market_data/acquisition/models/test_trade.py
from __future__ import annotations
from dataclasses import FrozenInstanceError
from datetime import datetime, timezone
from decimal import Decimal
import pytest
from src.market_data.acquisition.models.trade import Trade, TradeAggressorSide
def _trade(
*,
aggressor_side: TradeAggressorSide = TradeAggressorSide.BUY,
) -> Trade:
return Trade(
symbol="BTC/USD_LEVERAGE",
trade_id=2134857062,
price=Decimal("64497.25"),
quantity=Decimal("0.005"),
executed_at=datetime(2026, 7, 16, 11, 27, 46, 823000, tzinfo=timezone.utc),
aggressor_side=aggressor_side,
source="dzengi",
)
def test_trade_stores_canonical_values() -> None:
trade = _trade()
assert trade.symbol == "BTC/USD_LEVERAGE"
assert trade.trade_id == 2134857062
assert trade.price == Decimal("64497.25")
assert trade.quantity == Decimal("0.005")
assert trade.executed_at.tzinfo is timezone.utc
assert trade.aggressor_side is TradeAggressorSide.BUY
assert trade.source == "dzengi"
def test_trade_supports_sell_aggressor_side() -> None:
trade = _trade(aggressor_side=TradeAggressorSide.SELL)
assert trade.aggressor_side is TradeAggressorSide.SELL
def test_trade_aggressor_side_has_stable_values() -> None:
assert TradeAggressorSide.BUY.value == "buy"
assert TradeAggressorSide.SELL.value == "sell"
def test_trade_is_frozen() -> None:
trade = _trade()
with pytest.raises(FrozenInstanceError):
setattr(trade, "price", Decimal("1"))
def test_trade_uses_slots() -> None:
trade = _trade()
assert not hasattr(trade, "__dict__")