test: add tests for get_ohlcv and ohlcvs

This commit is contained in:
Matthias
2026-04-25 13:09:34 +02:00
parent 093cc74774
commit f17e383157
+64
View File
@@ -5,9 +5,11 @@ from datetime import timedelta
from time import sleep from time import sleep
from unittest.mock import AsyncMock, MagicMock from unittest.mock import AsyncMock, MagicMock
import pytest
from ccxt import NotSupported from ccxt import NotSupported
from freqtrade.enums import CandleType from freqtrade.enums import CandleType
from freqtrade.exceptions import TemporaryError
from freqtrade.exchange.exchange_ws import ExchangeWS from freqtrade.exchange.exchange_ws import ExchangeWS
from ft_client.test_client.test_rest_client import log_has_re from ft_client.test_client.test_rest_client import log_has_re
@@ -335,6 +337,68 @@ async def test_exchangews_get_ohlcv_missing_refresh_date(mocker, caplog):
exchange_ws.cleanup() exchange_ws.cleanup()
def test_exchangews_ohlcvs_deepcopy_and_retry(mocker):
config = MagicMock()
ccxt_object = MagicMock()
ccxt_object.ohlcvs = {
"ETH/USDT": {
"1m": [[1, 2, 3, 4, 5, 6]],
}
}
mocker.patch("freqtrade.exchange.exchange_ws.ExchangeWS._start_forever", MagicMock())
exchange_ws = ExchangeWS(config, ccxt_object)
call_count = {"count": 0}
def deepcopy_side_effect(value):
call_count["count"] += 1
if call_count["count"] < 3:
raise RuntimeError("copy failed")
return [candle.copy() for candle in value]
mocker.patch("freqtrade.exchange.exchange_ws.deepcopy", deepcopy_side_effect)
result = exchange_ws.ohlcvs("ETH/USDT", "1m")
assert call_count["count"] == 3
assert result == [[1, 2, 3, 4, 5, 6]]
assert result is not ccxt_object.ohlcvs["ETH/USDT"]["1m"]
# Fail all the time
mocker.patch("freqtrade.exchange.exchange_ws.deepcopy", side_effect=RuntimeError("copy failed"))
with pytest.raises(TemporaryError, match=r"Error deepcopying: copy failed"):
exchange_ws.ohlcvs("ETH/USDT", "1m")
exchange_ws.cleanup()
def test_exchangews_get_ohlcv_with_refresh(mocker):
config = MagicMock()
ccxt_object = MagicMock()
mocker.patch("freqtrade.exchange.exchange_ws.ExchangeWS._start_forever", MagicMock())
exchange_ws = ExchangeWS(config, ccxt_object)
ohlcvs_mock = mocker.patch.object(
exchange_ws, "ohlcvs", return_value=[[10, 11, 12, 13, 14, 15]]
)
paircomb = ("ETH/USDT", "1m", CandleType.SPOT)
exchange_ws._klines_last_refresh[paircomb] = 123456789
candles, refresh = exchange_ws.get_ohlcv_with_refresh("ETH/USDT", "1m", CandleType.SPOT)
ohlcvs_mock.assert_called_once_with("ETH/USDT", "1m")
assert candles == [[10, 11, 12, 13, 14, 15]]
assert refresh == 123456789
candles, refresh = exchange_ws.get_ohlcv_with_refresh("ETH/USDT", "5m", CandleType.SPOT)
assert candles == [[10, 11, 12, 13, 14, 15]]
assert refresh == 0
exchange_ws.cleanup()
def test_exchangews_continuous_stopped_task_exception(mocker, caplog): def test_exchangews_continuous_stopped_task_exception(mocker, caplog):
config = MagicMock() config = MagicMock()
ccxt_object = MagicMock() ccxt_object = MagicMock()