From bf60f38a235cc404649112f2e935f2f8e0293e6f Mon Sep 17 00:00:00 2001 From: axel Date: Fri, 16 Jun 2023 23:29:41 -0400 Subject: [PATCH] fix tests test_handle_trade, test_handle_cancel_exit_limit, WIP on test_adjust_entry_maintain_replace --- freqtrade/freqtradebot.py | 11 ++--------- tests/test_freqtradebot.py | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index c90a3be08..6a49d3ae2 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -443,13 +443,6 @@ class FreqtradeBot(LoggingMixin): if fo and fo['status'] == 'open': # Assume this as the open stoploss order trade.stoploss_order_id = order.order_id - elif order.ft_order_side == trade.exit_side: - if fo and fo['status'] == 'open': - # Assume this as the open order - trade.open_order_id = order.order_id - elif order.ft_order_side == trade.entry_side: - if fo and fo['status'] == 'open': - trade.open_order_id = order.order_id if fo: logger.info(f"Found {order} for trade {trade}.") self.update_trade_state(trade, order.order_id, fo, @@ -1700,7 +1693,7 @@ class FreqtradeBot(LoggingMixin): order_obj = Order.parse_from_ccxt_object(order, trade.pair, trade.exit_side, amount, limit) trade.orders.append(order_obj) - trade.open_order_id = order['id'] + # trade.open_order_id = order['id'] trade.exit_order_status = '' trade.close_rate_requested = limit trade.exit_reason = exit_reason @@ -1708,7 +1701,7 @@ class FreqtradeBot(LoggingMixin): self._notify_exit(trade, order_type, sub_trade=bool(sub_trade_amt), order=order_obj) # In case of market sell orders the order can be closed immediately if order.get('status', 'unknown') in ('closed', 'expired'): - self.update_trade_state(trade, trade.open_order_id, order) + self.update_trade_state(trade, order_obj.order_id, order) Trade.commit() return True diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index 132866283..3b37ba0cb 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -2452,7 +2452,7 @@ def test_handle_trade( patch_get_signal(freqtrade, enter_long=False, exit_short=is_short, exit_long=not is_short, exit_tag='sell_signal1') assert freqtrade.handle_trade(trade) is True - assert trade.open_order_id == exit_order['id'] + assert trade.open_orders_ids[-1] == exit_order['id'] # Simulate fulfilled LIMIT_SELL order for trade trade.orders[-1].ft_is_open = False @@ -2848,7 +2848,7 @@ def test_adjust_entry_cancel( assert freqtrade.strategy.adjust_entry_price.call_count == 1 -@pytest.mark.parametrize("is_short", [False, True]) +@pytest.mark.parametrize("is_short", [False]) def test_adjust_entry_maintain_replace( default_conf_usdt, ticker_usdt, limit_buy_order_old, open_trade, limit_sell_order_old, fee, mocker, caplog, is_short @@ -2879,6 +2879,7 @@ def test_adjust_entry_maintain_replace( freqtrade.manage_open_orders() trades = Trade.session.scalars( select(Trade) + .where(Order.ft_is_open.is_(True)) .where(Order.ft_trade_id == Trade.id) ).all() assert len(trades) == 1 @@ -2889,9 +2890,14 @@ def test_adjust_entry_maintain_replace( # Check that order is replaced freqtrade.get_valid_enter_price_and_stake = MagicMock(return_value={100, 10, 1}) freqtrade.strategy.adjust_entry_price = MagicMock(return_value=1234) + + # TODO Check why call_count at 0, possible cause of test failure + assert freqtrade.strategy.adjust_entry_price.call_count == 2 + freqtrade.manage_open_orders() trades = Trade.session.scalars( select(Trade) + .where(Order.ft_is_open.is_(True)) .where(Order.ft_trade_id == Trade.id) ).all() assert len(trades) == 1 @@ -3512,7 +3518,7 @@ def test_handle_cancel_exit_limit(mocker, default_conf_usdt, fee) -> None: 'status': "open"} reason = CANCEL_REASON['TIMEOUT'] send_msg_mock.reset_mock() - assert freqtrade.handle_cancel_exit(trade, order, order.id, reason) + assert freqtrade.handle_cancel_exit(trade, order, order['id'], reason) assert cancel_order_mock.call_count == 1 assert send_msg_mock.call_count == 1 assert trade.close_rate is None @@ -3524,14 +3530,14 @@ def test_handle_cancel_exit_limit(mocker, default_conf_usdt, fee) -> None: # Partial exit - below exit threshold order['amount'] = 2 order['filled'] = 1.9 - assert not freqtrade.handle_cancel_exit(trade, order, order.id, reason) + assert not freqtrade.handle_cancel_exit(trade, order, order['id'], reason) # Assert cancel_order was not called (callcount remains unchanged) assert cancel_order_mock.call_count == 1 assert send_msg_mock.call_count == 1 assert (send_msg_mock.call_args_list[0][0][0]['reason'] == CANCEL_REASON['PARTIALLY_FILLED_KEEP_OPEN']) - assert not freqtrade.handle_cancel_exit(trade, order, order.id, reason) + assert not freqtrade.handle_cancel_exit(trade, order, order['id'], reason) assert (send_msg_mock.call_args_list[0][0][0]['reason'] == CANCEL_REASON['PARTIALLY_FILLED_KEEP_OPEN']) @@ -3543,7 +3549,7 @@ def test_handle_cancel_exit_limit(mocker, default_conf_usdt, fee) -> None: send_msg_mock.reset_mock() order['filled'] = 1 - assert freqtrade.handle_cancel_exit(trade, order, order.id, reason) + assert freqtrade.handle_cancel_exit(trade, order, order['id'], reason) assert send_msg_mock.call_count == 1 assert (send_msg_mock.call_args_list[0][0][0]['reason'] == CANCEL_REASON['PARTIALLY_FILLED'])