"""Tests for market data adapters.""" import unittest from deltatrace.adapters import FIXFeedAdapter, SandboxExchangeAdapter from deltatrace.event_graph import EventType class TestFIXFeedAdapter(unittest.TestCase): def setUp(self): self.adapter = FIXFeedAdapter() def test_name(self): self.assertEqual(self.adapter.name, "fix_feed") def test_ingest_market_data_snapshot(self): msg = {"35": "W", "55": "AAPL", "bid": "185.50", "ask": "185.55", "44": "185.52", "38": "1000"} events = self.adapter.ingest(msg) self.assertEqual(len(events), 1) self.assertEqual(events[0].event_type, EventType.MD_TICK) self.assertEqual(events[0].payload["symbol"], "AAPL") self.assertAlmostEqual(events[0].payload["bid"], 185.50) def test_ingest_execution_report(self): msg = {"35": "8", "55": "AAPL", "54": "1", "44": "185.50", "38": "500", "150": "F"} events = self.adapter.ingest(msg) self.assertEqual(len(events), 1) self.assertEqual(events[0].event_type, EventType.FILL) def test_ingest_new_order(self): msg = {"35": "D", "55": "AAPL", "54": "1", "44": "185.50", "38": "500"} events = self.adapter.ingest(msg) self.assertEqual(len(events), 1) self.assertEqual(events[0].event_type, EventType.ORDER) def test_ingest_unknown_type(self): msg = {"35": "Z", "55": "AAPL"} events = self.adapter.ingest(msg) self.assertEqual(len(events), 0) def test_source_adapter_set(self): msg = {"35": "W", "55": "AAPL", "44": "100", "38": "10"} events = self.adapter.ingest(msg) self.assertEqual(events[0].source_adapter, "fix_feed") class TestSandboxExchangeAdapter(unittest.TestCase): def setUp(self): self.adapter = SandboxExchangeAdapter(fill_rate=1.0, latency_ms=0.1) def test_name(self): self.assertEqual(self.adapter.name, "sandbox_exchange") def test_ingest_tick(self): data = {"type": "tick", "symbol": "AAPL", "bid": 185.0, "ask": 185.05, "last": 185.02} events = self.adapter.ingest(data) self.assertEqual(len(events), 1) self.assertEqual(events[0].event_type, EventType.MD_TICK) def test_ingest_order_with_fill(self): data = {"type": "order", "symbol": "AAPL", "price": 185.0, "qty": 100, "side": "buy"} events = self.adapter.ingest(data) self.assertEqual(len(events), 2) self.assertEqual(events[0].event_type, EventType.ORDER) self.assertEqual(events[1].event_type, EventType.FILL) def test_generate_ticks(self): ticks = self.adapter.generate_ticks("AAPL", 10, 185.0) self.assertEqual(len(ticks), 10) for t in ticks: self.assertEqual(t.event_type, EventType.MD_TICK) self.assertEqual(t.payload["symbol"], "AAPL") if __name__ == "__main__": unittest.main()