summaryrefslogtreecommitdiff
path: root/shared/tests/test_events.py
diff options
context:
space:
mode:
Diffstat (limited to 'shared/tests/test_events.py')
-rw-r--r--shared/tests/test_events.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/shared/tests/test_events.py b/shared/tests/test_events.py
new file mode 100644
index 0000000..4bc7981
--- /dev/null
+++ b/shared/tests/test_events.py
@@ -0,0 +1,80 @@
+"""Tests for shared event types."""
+import pytest
+from decimal import Decimal
+from datetime import datetime, timezone
+
+
+def make_candle():
+ from shared.models import Candle
+ return Candle(
+ symbol="BTCUSDT",
+ timeframe="1m",
+ open_time=datetime(2024, 1, 1, tzinfo=timezone.utc),
+ open=Decimal("50000"),
+ high=Decimal("51000"),
+ low=Decimal("49500"),
+ close=Decimal("50500"),
+ volume=Decimal("100"),
+ )
+
+
+def make_signal():
+ from shared.models import Signal, OrderSide
+ return Signal(
+ strategy="test",
+ symbol="BTCUSDT",
+ side=OrderSide.BUY,
+ price=Decimal("50000"),
+ quantity=Decimal("0.01"),
+ reason="test signal",
+ )
+
+
+def test_candle_event_serialize():
+ """Test CandleEvent serializes to dict correctly."""
+ from shared.events import CandleEvent, EventType
+ candle = make_candle()
+ event = CandleEvent(data=candle)
+ d = event.to_dict()
+ assert d["type"] == EventType.CANDLE
+ assert d["data"]["symbol"] == "BTCUSDT"
+ assert d["data"]["timeframe"] == "1m"
+
+
+def test_candle_event_deserialize():
+ """Test CandleEvent round-trips through to_dict/from_raw."""
+ from shared.events import CandleEvent, EventType
+ candle = make_candle()
+ event = CandleEvent(data=candle)
+ d = event.to_dict()
+ restored = CandleEvent.from_raw(d)
+ assert restored.type == EventType.CANDLE
+ assert restored.data.symbol == "BTCUSDT"
+ assert restored.data.close == Decimal("50500")
+
+
+def test_signal_event_serialize():
+ """Test SignalEvent serializes to dict correctly."""
+ from shared.events import SignalEvent, EventType
+ signal = make_signal()
+ event = SignalEvent(data=signal)
+ d = event.to_dict()
+ assert d["type"] == EventType.SIGNAL
+ assert d["data"]["symbol"] == "BTCUSDT"
+ assert d["data"]["strategy"] == "test"
+
+
+def test_event_from_dict_dispatch():
+ """Test Event.from_dict dispatches to correct class."""
+ from shared.events import Event, CandleEvent, SignalEvent, EventType
+ candle = make_candle()
+ event = CandleEvent(data=candle)
+ d = event.to_dict()
+ restored = Event.from_dict(d)
+ assert isinstance(restored, CandleEvent)
+
+ signal = make_signal()
+ s_event = SignalEvent(data=signal)
+ sd = s_event.to_dict()
+ restored_s = Event.from_dict(sd)
+ assert isinstance(restored_s, SignalEvent)