From b4116076d07137fcfdeccb7be713b5b125a670af Mon Sep 17 00:00:00 2001 From: matstedt Date: Tue, 20 Jan 2026 08:46:06 +0100 Subject: [PATCH] tests: cover krakenfutures currency sum and funding fees --- tests/exchange/test_krakenfutures.py | 43 ++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/tests/exchange/test_krakenfutures.py b/tests/exchange/test_krakenfutures.py index 171b0ab0b..048c52a3a 100644 --- a/tests/exchange/test_krakenfutures.py +++ b/tests/exchange/test_krakenfutures.py @@ -3,6 +3,7 @@ from __future__ import annotations from copy import deepcopy +from datetime import UTC, datetime from unittest.mock import MagicMock from freqtrade.enums import CandleType, MarginMode, TradingMode @@ -166,3 +167,45 @@ def test_krakenfutures_get_balances_falls_back_to_ccxt_fetch_balance(mocker, def res = ex.get_balances() assert res["free"]["USD"] == 11.0 assert res["total"]["USD"] == 12.0 + + +def test_krakenfutures_sum_currencies_value_sums_valid_values(mocker, default_conf): + """Sum currencies values, skipping invalid entries.""" + ex = get_patched_exchange(mocker, default_conf, exchange="krakenfutures") + currencies = { + "USD": {"value": "10"}, + "EUR": {"value": 2.5}, + "BAD": {"value": ""}, + "NODICT": 3, + } + + assert ex._sum_currencies_value(currencies) == 12.5 + + +def test_krakenfutures_sum_currencies_value_returns_none_when_empty(mocker, default_conf): + """Return None when no valid values are found.""" + ex = get_patched_exchange(mocker, default_conf, exchange="krakenfutures") + assert ex._sum_currencies_value(["not", "dict"]) is None + assert ex._sum_currencies_value({"USD": {"value": ""}}) is None + + +def test_krakenfutures_get_funding_fees_futures_success(mocker, default_conf): + """Use funding fee helper in futures mode.""" + conf = dict(default_conf) + conf["trading_mode"] = TradingMode.FUTURES + ex = get_patched_exchange(mocker, conf, exchange="krakenfutures") + + helper = mocker.patch.object(ex, "_fetch_and_calculate_funding_fees", return_value=1.23) + open_date = datetime.now(UTC) + + assert ex.get_funding_fees("BTC/USD:USD", 0.1, False, open_date) == 1.23 + helper.assert_called_once_with("BTC/USD:USD", 0.1, False, open_date) + + +def test_krakenfutures_get_funding_fees_spot_returns_zero(mocker, default_conf): + """Return 0.0 outside futures mode without calling the helper.""" + ex = get_patched_exchange(mocker, default_conf, exchange="krakenfutures") + helper = mocker.patch.object(ex, "_fetch_and_calculate_funding_fees") + + assert ex.get_funding_fees("BTC/USD:USD", 0.1, False, None) == 0.0 + helper.assert_not_called()