summaryrefslogtreecommitdiff
path: root/shared/tests/test_events.py
diff options
context:
space:
mode:
authorTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-01 15:56:35 +0900
committerTheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com>2026-04-01 15:56:35 +0900
commit33b14aaa2344b0fd95d1629627c3d135b24ae102 (patch)
tree90b214758bc3b076baa7711226a1a1be6268e72e /shared/tests/test_events.py
parent9360f1a800aa29b40399a2f3bfbfcf215a04e279 (diff)
feat: initial trading platform implementation
Binance spot crypto trading platform with microservices architecture: - shared: Pydantic models, Redis Streams broker, asyncpg DB layer - data-collector: Binance WebSocket/REST market data collection - strategy-engine: Plugin-based strategy execution (RSI, Grid) - order-executor: Order execution with risk management - portfolio-manager: Position tracking and PnL calculation - backtester: Historical strategy testing with simulator - cli: Click-based CLI for all operations - Docker Compose orchestration with Redis and PostgreSQL - 24 test files covering all modules
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)