53 lines
1.3 KiB
Python
53 lines
1.3 KiB
Python
# app/tests/unit/trading/strategies/test_trend_quote.py
|
|
|
|
from __future__ import annotations
|
|
|
|
import inspect
|
|
from datetime import datetime, timezone
|
|
from decimal import Decimal
|
|
|
|
import src.trading.strategies.trend as module
|
|
from src.market_data.acquisition.models.quote import Quote
|
|
from src.trading.strategies.trend import TrendStrategy
|
|
|
|
|
|
def _quote(
|
|
*,
|
|
last: str = "100.5",
|
|
bid: str = "100.0",
|
|
ask: str = "101.0",
|
|
) -> Quote:
|
|
return Quote(
|
|
symbol="BTC/USD_LEVERAGE",
|
|
last_price=Decimal(last),
|
|
bid_price=Decimal(bid),
|
|
ask_price=Decimal(ask),
|
|
exchange_timestamp=None,
|
|
received_at=datetime.now(timezone.utc),
|
|
source="dzengi",
|
|
)
|
|
|
|
|
|
def test_trend_uses_midpoint_from_quote() -> None:
|
|
result = TrendStrategy()._analysis_price(_quote())
|
|
|
|
assert result == 100.5
|
|
|
|
|
|
def test_trend_quote_snapshot_is_json_compatible_projection() -> None:
|
|
result = TrendStrategy()._quote_snapshot(_quote())
|
|
|
|
assert result == {
|
|
"symbol": "BTC/USD_LEVERAGE",
|
|
"last_price": 100.5,
|
|
"bid_price": 100.0,
|
|
"ask_price": 101.0,
|
|
"source": "dzengi",
|
|
}
|
|
|
|
|
|
def test_trend_has_no_legacy_market_snapshot_call() -> None:
|
|
source = inspect.getsource(module.TrendStrategy)
|
|
|
|
assert "get_quote(" in source
|