def test_update_order_status_skips_if_order_no_longer_tracked( self, mocked_api): order_id = "someId" exchange_id = "someExchangeId" url = KUCOIN_ROOT_API + CONSTANTS.ORDERS_PATH_URL regex_url = re.compile(f"^{url}") resp = self.get_order_response_mock(size=2, filled=2) mocked_api.get( regex_url, body=json.dumps(resp), callback=lambda *_, **__: self.exchange.stop_tracking_order( order_id), ) clock = Clock( ClockMode.BACKTEST, start_time=self.exchange.UPDATE_ORDERS_INTERVAL, end_time=self.exchange.UPDATE_ORDERS_INTERVAL * 2, ) TimeIterator.start(self.exchange, clock) self.exchange.in_flight_orders[ order_id] = self.get_in_flight_order_mock(order_id, exchange_id) self.async_run_with_timeout(self.exchange._update_order_status()) orders_filled_events = self.order_filled_logger.event_log order_completed_events = self.buy_order_completed_logger.event_log self.assertEqual(0, len(order_completed_events)) self.assertEqual(0, len(orders_filled_events))
def test_update_order_status_notifies_on_order_filled(self, mocked_api): url = KUCOIN_ROOT_API + CONSTANTS.ORDERS_PATH_URL regex_url = re.compile(f"^{url}") resp = self.get_order_response_mock(size=2, filled=2) mocked_api.get(regex_url, body=json.dumps(resp)) clock = Clock( ClockMode.BACKTEST, start_time=self.exchange.UPDATE_ORDERS_INTERVAL, end_time=self.exchange.UPDATE_ORDERS_INTERVAL * 2, ) TimeIterator.start(self.exchange, clock) order_id = "someId" exchange_id = "someExchangeId" self.exchange.in_flight_orders[ order_id] = self.get_in_flight_order_mock(order_id, exchange_id) order = self.exchange.in_flight_orders[order_id] self.async_run_with_timeout(self.exchange._update_order_status()) orders_filled_events = self.order_filled_logger.event_log order_completed_events = self.buy_order_completed_logger.event_log self.assertTrue(order.is_done) self.assertEqual(1, len(order_completed_events)) self.assertEqual(1, len(orders_filled_events)) self.assertEqual(order_id, order_completed_events[0].order_id) self.assertEqual(order_id, orders_filled_events[0].order_id)
class TimeIteratorUnitTest(unittest.TestCase): start_timestamp: float = pd.Timestamp("2021-01-01", tz="UTC").timestamp() end_timestamp: float = pd.Timestamp("2022-01-01 01:00:00", tz="UTC").timestamp() tick_size: int = 10 def setUp(self): self.time_iterator = TimeIterator() self.clock = Clock(ClockMode.BACKTEST, self.tick_size, self.start_timestamp, self.end_timestamp) self.clock.add_iterator(self.time_iterator) def test_current_timestamp(self): # On initialization, current_timestamp should be NaN self.assertTrue(math.isnan(self.time_iterator.current_timestamp)) self.time_iterator.start(self.clock) self.clock.backtest_til(self.start_timestamp) self.assertEqual(self.start_timestamp, self.time_iterator.current_timestamp) def test_clock(self): # On initialization, clock should be None self.assertTrue(self.time_iterator.clock is None) self.time_iterator.start(self.clock) self.assertEqual(self.clock, self.time_iterator.clock) def test_start(self): self.time_iterator.start(self.clock) self.assertEqual(self.clock, self.time_iterator.clock) self.assertEqual(self.start_timestamp, self.time_iterator.current_timestamp) def test_stop(self): self.time_iterator.start(self.clock) self.assertEqual(self.clock, self.time_iterator.clock) self.assertEqual(self.start_timestamp, self.time_iterator.current_timestamp) self.time_iterator.stop(self.clock) self.assertTrue(math.isnan(self.time_iterator.current_timestamp)) self.assertTrue(self.time_iterator.clock is None) def test_tick(self): self.time_iterator.start(self.clock) self.assertEqual(self.start_timestamp, self.time_iterator.current_timestamp) # c_tick is called within Clock self.clock.backtest_til(self.start_timestamp + self.tick_size) self.assertEqual(self.start_timestamp + self.tick_size, self.time_iterator.current_timestamp)