From 1ef5adbb0eadc66344a78f1c3a6d0d7ca0c1e9c8 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 6 Oct 2023 20:13:11 +0200 Subject: [PATCH] Test for #9270 --- tests/test_freqtradebot.py | 45 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tests/test_freqtradebot.py b/tests/test_freqtradebot.py index 9791a92ff..79bd2904c 100644 --- a/tests/test_freqtradebot.py +++ b/tests/test_freqtradebot.py @@ -2899,6 +2899,51 @@ def test_adjust_entry_replace_fail( assert freqtrade.strategy.adjust_entry_price.call_count == 1 +@pytest.mark.parametrize("is_short", [False, True]) +def test_adjust_entry_replace_fail_create_order( + default_conf_usdt, ticker_usdt, limit_buy_order_old, open_trade, + limit_sell_order_old, fee, mocker, caplog, is_short +) -> None: + freqtrade = get_patched_freqtradebot(mocker, default_conf_usdt) + old_order = limit_sell_order_old if is_short else limit_buy_order_old + old_order['id'] = open_trade.open_orders[0].order_id + limit_entry_cancel = deepcopy(old_order) + limit_entry_cancel['status'] = 'canceled' + cancel_order_mock = MagicMock(return_value=limit_entry_cancel) + fetch_order_mock = MagicMock(return_value=old_order) + mocker.patch.multiple( + EXMS, + fetch_ticker=ticker_usdt, + fetch_order=fetch_order_mock, + cancel_order_with_result=cancel_order_mock, + get_fee=fee + ) + mocker.patch('freqtrade.freqtradebot.sleep') + mocker.patch('freqtrade.freqtradebot.FreqtradeBot.execute_entry', + side_effect=DependencyException()) + + open_trade.is_short = is_short + Trade.session.add(open_trade) + Trade.commit() + + # Timeout to not interfere + freqtrade.strategy.ft_check_timed_out = MagicMock(return_value=False) + + # Attempt replace order - which fails + freqtrade.strategy.adjust_entry_price = MagicMock(return_value=12234) + freqtrade.manage_open_orders() + trades = Trade.session.scalars( + select(Trade) + .where(Trade.is_open.is_(True)) + ).all() + + assert len(trades) == 0 + assert len(Order.session.scalars(select(Order)).all()) == 0 + assert fetch_order_mock.call_count == 1 + assert log_has_re( + r"Could not replace order for.*", caplog) + + @pytest.mark.parametrize("is_short", [False, True]) def test_adjust_entry_maintain_replace( default_conf_usdt, ticker_usdt, limit_buy_order_old, open_trade,