Add BingX sandbox status sidecar
This commit is contained in:
87
prod/tests/test_capital_restore_selection.py
Normal file
87
prod/tests/test_capital_restore_selection.py
Normal file
@@ -0,0 +1,87 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Tests for capital restore source selection on startup."""
|
||||
|
||||
import json
|
||||
import os
|
||||
from datetime import datetime, timezone
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
from prod.nautilus_event_trader import DolphinLiveTrader
|
||||
|
||||
|
||||
class _MapStub:
|
||||
def __init__(self, payloads):
|
||||
self._payloads = payloads
|
||||
|
||||
def blocking(self):
|
||||
return self
|
||||
|
||||
def get(self, key):
|
||||
return self._payloads.get(key)
|
||||
|
||||
|
||||
def _build_trader() -> DolphinLiveTrader:
|
||||
trader = DolphinLiveTrader()
|
||||
trader._build_engine()
|
||||
trader.eng.begin_day(datetime.now(timezone.utc).strftime("%Y-%m-%d"), posture="APEX")
|
||||
return trader
|
||||
|
||||
|
||||
def test_restore_prefers_fresher_engine_snapshot_over_stale_latest_nautilus():
|
||||
trader = _build_trader()
|
||||
trader.eng.capital = 25_000.0
|
||||
|
||||
trader.state_map = _MapStub(
|
||||
{
|
||||
"latest_nautilus": json.dumps(
|
||||
{
|
||||
"capital": 31_049.44,
|
||||
"updated_at": "2026-05-13T10:52:40+00:00",
|
||||
}
|
||||
),
|
||||
"engine_snapshot": json.dumps(
|
||||
{
|
||||
"capital": 33_150.07,
|
||||
"timestamp": "2026-05-13T16:20:38+00:00",
|
||||
}
|
||||
),
|
||||
}
|
||||
)
|
||||
trader.pnl_map = _MapStub({})
|
||||
|
||||
with patch.dict(os.environ, {"DOLPHIN_CAPITAL_SEED_STALE_LAG_SEC": "180"}, clear=False):
|
||||
trader._restore_capital()
|
||||
|
||||
assert trader.eng.capital == pytest.approx(33_150.07, abs=0.01)
|
||||
assert trader._restore_source == "HZ engine_snapshot"
|
||||
|
||||
|
||||
def test_restore_can_force_latest_nautilus_override():
|
||||
trader = _build_trader()
|
||||
trader.eng.capital = 25_000.0
|
||||
|
||||
trader.state_map = _MapStub(
|
||||
{
|
||||
"latest_nautilus": json.dumps(
|
||||
{
|
||||
"capital": 31_049.44,
|
||||
"updated_at": "2026-05-13T10:52:40+00:00",
|
||||
}
|
||||
),
|
||||
"engine_snapshot": json.dumps(
|
||||
{
|
||||
"capital": 33_150.07,
|
||||
"timestamp": "2026-05-13T16:20:38+00:00",
|
||||
}
|
||||
),
|
||||
}
|
||||
)
|
||||
trader.pnl_map = _MapStub({})
|
||||
|
||||
with patch.dict(os.environ, {"DOLPHIN_FORCE_LATEST_NAUTILUS_RESTORE": "1"}, clear=False):
|
||||
trader._restore_capital()
|
||||
|
||||
assert trader.eng.capital == pytest.approx(31_049.44, abs=0.01)
|
||||
assert trader._restore_source == "HZ latest_nautilus"
|
||||
Reference in New Issue
Block a user