class MsgPackEventSerializerTests(unittest.TestCase): def setUp(self): # Fixture Setup self.account_id = TestStubs.account_id() self.serializer = MsgPackEventSerializer() def test_serialize_and_deserialize_account_state_events(self): # Arrange event = AccountState( account_id=AccountId("SIM", "000"), balances=[Money(1525000, USD)], balances_free=[Money(1425000, USD)], balances_locked=[Money(0, USD)], info={"default_currency": "USD"}, event_id=uuid4(), event_timestamp=UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_initialized_events(self): # Arrange options = {'Price': '1.0005'} event = OrderInitialized( ClientOrderId("O-123456"), StrategyId("S", "001"), AUDUSD_SIM.symbol, OrderSide.SELL, OrderType.STOP_MARKET, Quantity(100000), TimeInForce.DAY, uuid4(), UNIX_EPOCH, options=options, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) self.assertEqual(options, event.options) def test_serialize_and_deserialize_order_submitted_events(self): # Arrange event = OrderSubmitted( self.account_id, ClientOrderId("O-123456"), UNIX_EPOCH, uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_invalid_events(self): # Arrange event = OrderInvalid( ClientOrderId("O-123456"), "OrderId already exists", uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_denied_events(self): # Arrange event = OrderDenied( ClientOrderId("O-123456"), "Exceeds risk for FX", uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_accepted_events(self): # Arrange event = OrderAccepted( self.account_id, ClientOrderId("O-123456"), OrderId("B-123456"), UNIX_EPOCH, uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_rejected_events(self): # Arrange event = OrderRejected( self.account_id, ClientOrderId("O-123456"), UNIX_EPOCH, "ORDER_ID_INVALID", uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_working_events(self): # Arrange event = OrderWorking( self.account_id, ClientOrderId("O-123456"), OrderId("B-123456"), AUDUSD_SIM.symbol, OrderSide.SELL, OrderType.STOP_MARKET, Quantity(100000), Price("1.50000"), TimeInForce.DAY, None, UNIX_EPOCH, uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_working_events_with_expire_time( self): # Arrange event = OrderWorking( self.account_id, ClientOrderId("O-123456"), OrderId("B-123456"), AUDUSD_SIM.symbol, OrderSide.SELL, OrderType.STOP_MARKET, Quantity(100000), Price("1.50000"), TimeInForce.DAY, UNIX_EPOCH, UNIX_EPOCH, uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_cancelled_events(self): # Arrange event = OrderCancelled( self.account_id, ClientOrderId("O-123456"), OrderId("1"), UNIX_EPOCH, uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_cancel_reject_events(self): # Arrange event = OrderCancelReject( self.account_id, ClientOrderId("O-123456"), UNIX_EPOCH, "RESPONSE", "ORDER_DOES_NOT_EXIST", uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_modified_events(self): # Arrange event = OrderModified( self.account_id, ClientOrderId("O-123456"), OrderId("1"), Quantity(100000), Price("0.80010"), UNIX_EPOCH, uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_expired_events(self): # Arrange event = OrderExpired( self.account_id, ClientOrderId("O-123456"), OrderId("1"), UNIX_EPOCH, uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_partially_filled_events(self): # Arrange event = OrderFilled( self.account_id, ClientOrderId("O-123456"), OrderId("1"), ExecutionId("E123456"), PositionId("T123456"), StrategyId("S", "001"), AUDUSD_SIM.symbol, OrderSide.SELL, Quantity(50000), Quantity(50000), Quantity(50000), Price("1.00000"), AUDUSD_SIM.quote_currency, AUDUSD_SIM.is_inverse, Money(0, USD), LiquiditySide.MAKER, UNIX_EPOCH, uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event) def test_serialize_and_deserialize_order_filled_events(self): # Arrange event = OrderFilled( self.account_id, ClientOrderId("O-123456"), OrderId("1"), ExecutionId("E123456"), PositionId("T123456"), StrategyId("S", "001"), AUDUSD_SIM.symbol, OrderSide.SELL, Quantity(100000), Quantity(100000), Quantity(), Price("1.00000"), AUDUSD_SIM.quote_currency, AUDUSD_SIM.is_inverse, Money(0, USD), LiquiditySide.TAKER, UNIX_EPOCH, uuid4(), UNIX_EPOCH, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert self.assertEqual(deserialized, event)
class TestMsgPackEventSerializer: def setup(self): # Fixture Setup self.account_id = TestStubs.account_id() self.serializer = MsgPackEventSerializer() def test_serialize_and_deserialize_account_state_events(self): # Arrange event = AccountState( account_id=AccountId("SIM", "000"), balances=[Money(1525000, USD)], balances_free=[Money(1425000, USD)], balances_locked=[Money(0, USD)], info={"default_currency": "USD"}, event_id=uuid4(), timestamp_ns=0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_market_order_initialized_events(self): # Arrange event = OrderInitialized( ClientOrderId("O-123456"), StrategyId("S", "001"), AUDUSD_SIM.id, OrderSide.SELL, OrderType.MARKET, Quantity(100000), TimeInForce.FOK, uuid4(), 0, options={}, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_limit_order_initialized_events(self): # Arrange options = { "ExpireTime": None, "Price": "1.0010", "PostOnly": True, "ReduceOnly": True, "Hidden": False, } event = OrderInitialized( ClientOrderId("O-123456"), StrategyId("S", "001"), AUDUSD_SIM.id, OrderSide.SELL, OrderType.LIMIT, Quantity(100000), TimeInForce.DAY, uuid4(), 0, options=options, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event assert deserialized.options == options def test_serialize_and_deserialize_stop_market_order_initialized_events( self): # Arrange options = { "ExpireTime": None, "Price": "1.0005", "ReduceOnly": False, } event = OrderInitialized( ClientOrderId("O-123456"), StrategyId("S", "001"), AUDUSD_SIM.id, OrderSide.SELL, OrderType.STOP_MARKET, Quantity(100000), TimeInForce.DAY, uuid4(), 0, options=options, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event assert deserialized.options == options def test_serialize_and_deserialize_stop_limit_order_initialized_events( self): # Arrange options = { "ExpireTime": None, "Price": "1.0005", "Trigger": "1.0010", "PostOnly": True, "ReduceOnly": False, "Hidden": False, } event = OrderInitialized( ClientOrderId("O-123456"), StrategyId("S", "001"), AUDUSD_SIM.id, OrderSide.SELL, OrderType.STOP_LIMIT, Quantity(100000), TimeInForce.DAY, uuid4(), 0, options=options, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event assert deserialized.options == options def test_serialize_and_deserialize_order_submitted_events(self): # Arrange event = OrderSubmitted( self.account_id, ClientOrderId("O-123456"), 0, uuid4(), 0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_order_invalid_events(self): # Arrange event = OrderInvalid( ClientOrderId("O-123456"), "VenueOrderId already exists", uuid4(), 0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_order_denied_events(self): # Arrange event = OrderDenied( ClientOrderId("O-123456"), "Exceeds risk for FX", uuid4(), 0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_order_accepted_events(self): # Arrange event = OrderAccepted( self.account_id, ClientOrderId("O-123456"), VenueOrderId("B-123456"), 0, uuid4(), 0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_order_rejected_events(self): # Arrange event = OrderRejected( self.account_id, ClientOrderId("O-123456"), 0, "ORDER_ID_INVALID", uuid4(), 0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_order_cancelled_events(self): # Arrange event = OrderCancelled( self.account_id, ClientOrderId("O-123456"), VenueOrderId("1"), 0, uuid4(), 0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_order_update_reject_events(self): # Arrange event = OrderUpdateRejected( self.account_id, ClientOrderId("O-123456"), VenueOrderId("1"), 0, "RESPONSE", "ORDER_DOES_NOT_EXIST", uuid4(), 0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_order_cancel_reject_events(self): # Arrange event = OrderCancelRejected( self.account_id, ClientOrderId("O-123456"), VenueOrderId("1"), 0, "RESPONSE", "ORDER_DOES_NOT_EXIST", uuid4(), 0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_order_amended_events(self): # Arrange event = OrderUpdated( self.account_id, ClientOrderId("O-123456"), VenueOrderId("1"), Quantity(100000), Price("0.80010"), 0, uuid4(), 0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_order_expired_events(self): # Arrange event = OrderExpired( self.account_id, ClientOrderId("O-123456"), VenueOrderId("1"), 0, uuid4(), 0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_order_partially_filled_events(self): # Arrange event = OrderFilled( self.account_id, ClientOrderId("O-123456"), VenueOrderId("1"), ExecutionId("E123456"), PositionId("T123456"), StrategyId("S", "001"), AUDUSD_SIM.id, OrderSide.SELL, Quantity(50000), Price("1.00000"), Quantity(50000), Quantity(50000), AUDUSD_SIM.quote_currency, AUDUSD_SIM.is_inverse, Money(0, USD), LiquiditySide.MAKER, 0, uuid4(), 0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event def test_serialize_and_deserialize_order_filled_events(self): # Arrange event = OrderFilled( self.account_id, ClientOrderId("O-123456"), VenueOrderId("1"), ExecutionId("E123456"), PositionId("T123456"), StrategyId("S", "001"), AUDUSD_SIM.id, OrderSide.SELL, Quantity(100000), Price("1.00000"), Quantity(100000), Quantity(), AUDUSD_SIM.quote_currency, AUDUSD_SIM.is_inverse, Money(0, USD), LiquiditySide.TAKER, 0, uuid4(), 0, ) # Act serialized = self.serializer.serialize(event) deserialized = self.serializer.deserialize(serialized) # Assert assert deserialized == event