def test_json_serialization(self): token_amount = TokenAmount(token="COINALPHA", amount=Decimal("20.6")) fee = DeductedFromReturnsTradeFee(percent=Decimal("0.5"), percent_token="COINALPHA", flat_fees=[token_amount]) trade_update = TradeUpdate( trade_id="12345", client_order_id="OID1", exchange_order_id="EOID1", trading_pair="HBOT-COINALPHA", fill_timestamp=1640001112, fill_price=Decimal("1000.11"), fill_base_amount=Decimal("2"), fill_quote_amount=Decimal("2000.22"), fee=fee, ) expected_json = trade_update._asdict() expected_json.update({ "fill_price": "1000.11", "fill_base_amount": "2", "fill_quote_amount": "2000.22", "fee": fee.to_json(), }) self.assertEqual(expected_json, trade_update.to_json())
def test_from_json(self): fee = AddedToCostTradeFee( percent=Decimal("0.5"), percent_token=self.quote_asset ) trade_update = TradeUpdate( trade_id="12345", client_order_id=self.client_order_id, exchange_order_id="EOID1", trading_pair=self.trading_pair, fill_timestamp=1640001112, fill_price=Decimal("1000.11"), fill_base_amount=Decimal("2"), fill_quote_amount=Decimal("2000.22"), fee=fee, ) order_json = { "client_order_id": self.client_order_id, "exchange_order_id": self.exchange_order_id, "trading_pair": self.trading_pair, "order_type": OrderType.LIMIT.name, "trade_type": TradeType.BUY.name, "price": "1.0", "amount": "1000.0", "executed_amount_base": "0", "executed_amount_quote": "0", "fee_asset": None, "fee_paid": "0", "last_state": "0", "leverage": "1", "position": "NIL", "creation_timestamp": 1640001112.0, "order_fills": {"1": trade_update.to_json()} } expected_order: InFlightOrder = InFlightOrder( client_order_id=self.client_order_id, exchange_order_id=self.exchange_order_id, trading_pair=self.trading_pair, order_type=OrderType.LIMIT, trade_type=TradeType.BUY, amount=Decimal("1000.0"), creation_timestamp=1640001112.0, price=Decimal("1.0"), ) order_from_json = InFlightOrder.from_json(order_json) self.assertEqual(expected_order, order_from_json) self.assertFalse(order_from_json.completely_filled_event.is_set()) self.assertIn("1", order_from_json.order_fills) self.assertEqual(trade_update, order_from_json.order_fills["1"])
def test_to_json(self): fee = AddedToCostTradeFee(percent=Decimal("0.5"), percent_token=self.quote_asset) trade_update = TradeUpdate( trade_id="12345", client_order_id=self.client_order_id, exchange_order_id="EOID1", trading_pair=self.trading_pair, fill_timestamp=1640001112, fill_price=Decimal("1000.11"), fill_base_amount=Decimal("2"), fill_quote_amount=Decimal("2000.22"), fee=fee, ) order: InFlightOrder = InFlightOrder( client_order_id=self.client_order_id, trading_pair=self.trading_pair, order_type=OrderType.LIMIT, trade_type=TradeType.BUY, amount=Decimal("1000.0"), creation_timestamp=1640001112.0, price=Decimal("1.0"), ) order.order_fills["1"] = trade_update order_json = order.to_json() self.assertIsInstance(order_json, dict) self.assertEqual(order_json["client_order_id"], order.client_order_id) self.assertEqual(order_json["exchange_order_id"], order.exchange_order_id) self.assertEqual(order_json["trading_pair"], order.trading_pair) self.assertEqual(order_json["order_type"], order.order_type.name) self.assertEqual(order_json["trade_type"], order.trade_type.name) self.assertEqual(order_json["price"], str(order.price)) self.assertEqual(order_json["amount"], str(order.amount)) self.assertEqual(order_json["executed_amount_base"], str(order.executed_amount_base)) self.assertEqual(order_json["executed_amount_quote"], str(order.executed_amount_quote)) self.assertEqual(order_json["last_state"], str(order.current_state.value)) self.assertEqual(order_json["leverage"], str(order.leverage)) self.assertEqual(order_json["position"], order.position.value) self.assertEqual(order_json["creation_timestamp"], order.creation_timestamp) self.assertEqual(order_json["order_fills"], {"1": trade_update.to_json()})