From f33fd98c8363b35b2d3132f0ad927766387ea2c9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 8 Dec 2025 14:43:12 +0100 Subject: [PATCH] test: Add test for candle type verification --- tests/exchange/test_exchange.py | 49 ++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 030f04452..422b8033f 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -2388,6 +2388,7 @@ async def test__async_get_historic_ohlcv(default_conf, mocker, caplog, exchange_ 5, # volume (in quote currency) ] ] + mocker.patch(f"{EXMS}.verify_candle_type_support", MagicMock()) exchange = get_patched_exchange(mocker, default_conf, exchange=exchange_name) # Monkey-patch async function exchange._api_async.fetch_ohlcv = get_mock_coro(ohlcv) @@ -2438,6 +2439,7 @@ def test_refresh_latest_ohlcv(mocker, default_conf_usdt, caplog, candle_type) -> ] caplog.set_level(logging.DEBUG) + mocker.patch(f"{EXMS}.verify_candle_type_support", MagicMock()) exchange = get_patched_exchange(mocker, default_conf_usdt) exchange._api_async.fetch_ohlcv = get_mock_coro(ohlcv) @@ -2688,6 +2690,7 @@ def test_refresh_latest_ohlcv_cache(mocker, default_conf, candle_type, time_mach ohlcv = generate_test_data_raw("1h", 100, start.strftime("%Y-%m-%d")) time_machine.move_to(start + timedelta(hours=99, minutes=30)) + mocker.patch(f"{EXMS}.verify_candle_type_support", MagicMock()) exchange = get_patched_exchange(mocker, default_conf) exchange._set_startup_candle_count(default_conf) @@ -5472,8 +5475,13 @@ def test__fetch_and_calculate_funding_fees( api_mock = MagicMock() api_mock.fetch_funding_rate_history = get_mock_coro(return_value=funding_rate_history) api_mock.fetch_ohlcv = get_mock_coro(return_value=mark_ohlcv) - type(api_mock).has = PropertyMock(return_value={"fetchOHLCV": True}) - type(api_mock).has = PropertyMock(return_value={"fetchFundingRateHistory": True}) + type(api_mock).has = PropertyMock( + return_value={ + "fetchFundingRateHistory": True, + "fetchMarkOHLCV": True, + "fetchOHLCV": True, + } + ) ex = get_patched_exchange(mocker, default_conf, api_mock, exchange=exchange) mocker.patch(f"{EXMS}.timeframes", PropertyMock(return_value=["1h", "4h", "8h"])) @@ -5517,8 +5525,13 @@ def test__fetch_and_calculate_funding_fees_datetime_called( api_mock.fetch_funding_rate_history = get_mock_coro( return_value=funding_rate_history_octohourly ) - type(api_mock).has = PropertyMock(return_value={"fetchOHLCV": True}) - type(api_mock).has = PropertyMock(return_value={"fetchFundingRateHistory": True}) + type(api_mock).has = PropertyMock( + return_value={ + "fetchFundingRateHistory": True, + "fetchMarkOHLCV": True, + "fetchOHLCV": True, + } + ) mocker.patch(f"{EXMS}.timeframes", PropertyMock(return_value=["4h", "8h"])) exchange = get_patched_exchange(mocker, default_conf, api_mock, exchange=exchange) d1 = datetime.strptime("2021-08-31 23:00:01 +0000", "%Y-%m-%d %H:%M:%S %z") @@ -6605,3 +6618,31 @@ def test_fetch_funding_rate(default_conf, mocker, exchange_name): with pytest.raises(DependencyException, match=r"Pair XRP/ETH not available"): exchange.fetch_funding_rate(pair="XRP/ETH") + + +def test_verify_candle_type_support(default_conf, mocker): + api_mock = MagicMock() + type(api_mock).has = PropertyMock( + return_value={ + "fetchFundingRateHistory": True, + "fetchIndexOHLCV": True, + "fetchMarkOHLCV": True, + "fetchPremiumIndexOHLCV": False, + } + ) + exchange = get_patched_exchange(mocker, default_conf, api_mock) + + # Should pass + exchange.verify_candle_type_support("futures") + exchange.verify_candle_type_support(CandleType.FUTURES) + exchange.verify_candle_type_support(CandleType.FUNDING_RATE) + exchange.verify_candle_type_support(CandleType.SPOT) + exchange.verify_candle_type_support(CandleType.MARK) + + # Should fail: + + with pytest.raises( + OperationalException, + match=r"Exchange .* does not support fetching premiumindex candles\.", + ): + exchange.verify_candle_type_support(CandleType.PREMIUMINDEX)