Skip to content

Commit 0919d4c

Browse files
committed
test: improve integration test case
1 parent f4c0043 commit 0919d4c

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

tests/freqtradebot/test_integration.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,7 @@ def test_dca_exiting(default_conf_usdt, ticker_usdt, fee, mocker, caplog, levera
698698
@pytest.mark.parametrize("leverage", [1, 2])
699699
@pytest.mark.parametrize("is_short", [False, True])
700700
def test_dca_handle_similar_open_order(
701-
default_conf_usdt, ticker_usdt, is_short, leverage, fee, mocker
701+
default_conf_usdt, ticker_usdt, is_short, leverage, fee, mocker, caplog
702702
) -> None:
703703
default_conf_usdt["position_adjustment_enable"] = True
704704
default_conf_usdt["trading_mode"] = "futures"
@@ -720,6 +720,7 @@ def test_dca_handle_similar_open_order(
720720
patch_get_signal(freqtrade, enter_short=is_short, enter_long=not is_short)
721721
freqtrade.strategy.custom_entry_price = lambda **kwargs: ticker_usdt["ask"] * 0.96
722722
freqtrade.strategy.leverage = MagicMock(return_value=leverage)
723+
freqtrade.strategy.custom_exit = MagicMock(return_value=False)
723724
freqtrade.strategy.minimal_roi = {0: 0.2}
724725

725726
# Create trade and initial entry order
@@ -729,7 +730,13 @@ def test_dca_handle_similar_open_order(
729730
trade: Trade = Trade.get_trades().first()
730731
assert len(trade.orders) == 1
731732
assert trade.orders[-1].side == trade.entry_side
733+
assert trade.orders[-1].status == "open"
734+
732735
assert trade.has_open_orders
736+
# Process - shouldn't do anything
737+
freqtrade.process()
738+
# Doesn't try to exit, as we're not in a position yet
739+
assert freqtrade.strategy.custom_exit.call_count == 0
733740

734741
# Adjust with new price, cancel initial entry order and place new one
735742
freqtrade.strategy.adjust_entry_price = MagicMock(return_value=1.99)
@@ -750,9 +757,17 @@ def test_dca_handle_similar_open_order(
750757
assert len(trade.orders) == 3
751758

752759
# Fill entry order
760+
assert freqtrade.strategy.custom_exit.call_count == 0
761+
753762
mocker.patch(f"{EXMS}._dry_is_price_crossed", return_value=True)
754763
freqtrade.process()
755764

765+
trade = Trade.get_trades().first()
766+
assert trade.amount > 0
767+
768+
assert freqtrade.strategy.custom_exit.call_count == 1
769+
freqtrade.strategy.custom_exit.reset_mock()
770+
756771
# Should Create a new exit order
757772
freqtrade.exchange.amount_to_contract_precision = MagicMock(return_value=2)
758773
freqtrade.strategy.adjust_trade_position = MagicMock(return_value=-2)
@@ -765,27 +780,40 @@ def test_dca_handle_similar_open_order(
765780
assert trade.orders[-1].status == "open"
766781
assert trade.orders[-1].side == trade.exit_side
767782
assert len(trade.orders) == 5
783+
assert freqtrade.strategy.custom_exit.call_count == 1
784+
freqtrade.strategy.custom_exit.reset_mock()
768785

769786
# Adjust with new exit amount, should cancel and replace existing exit order
770787
freqtrade.exchange.amount_to_contract_precision = MagicMock(return_value=3)
771788
freqtrade.strategy.adjust_trade_position = MagicMock(return_value=-3)
772789
freqtrade.process()
773790
trade = Trade.get_trades().first()
791+
# Even with open order, trying to exit...
792+
assert freqtrade.strategy.custom_exit.call_count == 1
793+
freqtrade.strategy.custom_exit.reset_mock()
774794

775795
assert trade.orders[-2].status == "canceled"
776796
assert len(trade.orders) == 6
777797

778798
# Adjust with new exit price, should cancel and replace existing exit order
779799
freqtrade.strategy.custom_exit_price = MagicMock(return_value=1.95)
780800
freqtrade.process()
801+
# Even with open order, trying to exit...
802+
assert freqtrade.strategy.custom_exit.call_count == 1
803+
freqtrade.strategy.custom_exit.reset_mock()
804+
781805
trade = Trade.get_trades().first()
782806

783807
assert trade.orders[-2].status == "canceled"
784808
assert len(trade.orders) == 7
809+
similar_msg = r"A similar open order was found for.*"
810+
811+
assert not log_has_re(similar_msg, caplog)
785812

786813
# Adjust with same params, should keep existing order as price and amount are similar
787814
freqtrade.strategy.custom_exit_price = MagicMock(return_value=1.95)
788815
freqtrade.process()
789816
trade = Trade.get_trades().first()
817+
assert log_has_re(similar_msg, caplog)
790818

791819
assert len(trade.orders) == 7

0 commit comments

Comments
 (0)