From af2e7414652bdba13fab24ede06d933e5dee33b9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 20 Apr 2026 20:03:58 +0200 Subject: [PATCH] test: add test for bitget stoploss canceling --- tests/exchange/test_bitget.py | 37 ++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/tests/exchange/test_bitget.py b/tests/exchange/test_bitget.py index b4dafb0ae..575979aca 100644 --- a/tests/exchange/test_bitget.py +++ b/tests/exchange/test_bitget.py @@ -5,7 +5,7 @@ from unittest.mock import MagicMock, PropertyMock import pytest from freqtrade.enums import CandleType, MarginMode, RunMode, TradingMode -from freqtrade.exceptions import OperationalException, RetryableOrderError +from freqtrade.exceptions import InvalidOrderException, OperationalException, RetryableOrderError from freqtrade.exchange.common import API_RETRY_COUNT from freqtrade.util import dt_now, dt_ts, dt_utc from tests.conftest import EXMS, get_patched_exchange @@ -77,6 +77,41 @@ def test_fetch_stoploss_order_bitget_exceptions(default_conf_usdt, mocker): ) +@pytest.mark.usefixtures("init_persistence") +def test_cancel_stoploss_order_bitget(default_conf_usdt, mocker): + default_conf_usdt["dry_run"] = False + api_mock = MagicMock() + + exchange = get_patched_exchange(mocker, default_conf_usdt, api_mock, exchange="bitget") + + # Spot scenario + exchange.cancel_order = MagicMock(return_value={"id": "1234"}) + assert exchange.cancel_stoploss_order("1234", "ETH/USDT", {}) == {"id": "1234"} + assert exchange.cancel_order.call_count == 1 + exchange.cancel_order.assert_called_once_with("1234", "ETH/USDT", {"stop": True}) + + # Futures scenario + default_conf_usdt["trading_mode"] = TradingMode.FUTURES + default_conf_usdt["margin_mode"] = MarginMode.ISOLATED + exchange = get_patched_exchange(mocker, default_conf_usdt, api_mock, exchange="bitget") + exchange.cancel_order = MagicMock(return_value={"id": "1234"}) + assert exchange.cancel_stoploss_order("1234", "ETH/USDT:USDT", {}) == {"id": "1234"} + assert exchange.cancel_order.call_count == 1 + exchange.cancel_order.assert_called_once_with( + "1234", "ETH/USDT:USDT", {"stop": True, "planType": "pos_loss"} + ) + + exchange.cancel_order = MagicMock( + side_effect=[InvalidOrderException("API error"), {"id": "1234"}] + ) + assert exchange.cancel_stoploss_order("1234", "ETH/USDT:USDT", {}) == {"id": "1234"} + assert exchange.cancel_order.call_count == 2 + exchange.cancel_order.assert_any_call( + "1234", "ETH/USDT:USDT", {"stop": True, "planType": "pos_loss"} + ) + exchange.cancel_order.assert_any_call("1234", "ETH/USDT:USDT", {"stop": True}) + + def test_bitget_ohlcv_candle_limit(mocker, default_conf_usdt): # This test is also a live test - so we're sure our limits are correct. api_mock = MagicMock()