Skip to content

Commit f17e383

Browse files
committed
test: add tests for get_ohlcv and ohlcvs
1 parent 093cc74 commit f17e383

1 file changed

Lines changed: 64 additions & 0 deletions

File tree

tests/exchange/test_exchange_ws.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
from time import sleep
66
from unittest.mock import AsyncMock, MagicMock
77

8+
import pytest
89
from ccxt import NotSupported
910

1011
from freqtrade.enums import CandleType
12+
from freqtrade.exceptions import TemporaryError
1113
from freqtrade.exchange.exchange_ws import ExchangeWS
1214
from ft_client.test_client.test_rest_client import log_has_re
1315

@@ -335,6 +337,68 @@ async def test_exchangews_get_ohlcv_missing_refresh_date(mocker, caplog):
335337
exchange_ws.cleanup()
336338

337339

340+
def test_exchangews_ohlcvs_deepcopy_and_retry(mocker):
341+
config = MagicMock()
342+
ccxt_object = MagicMock()
343+
ccxt_object.ohlcvs = {
344+
"ETH/USDT": {
345+
"1m": [[1, 2, 3, 4, 5, 6]],
346+
}
347+
}
348+
mocker.patch("freqtrade.exchange.exchange_ws.ExchangeWS._start_forever", MagicMock())
349+
350+
exchange_ws = ExchangeWS(config, ccxt_object)
351+
352+
call_count = {"count": 0}
353+
354+
def deepcopy_side_effect(value):
355+
call_count["count"] += 1
356+
if call_count["count"] < 3:
357+
raise RuntimeError("copy failed")
358+
return [candle.copy() for candle in value]
359+
360+
mocker.patch("freqtrade.exchange.exchange_ws.deepcopy", deepcopy_side_effect)
361+
362+
result = exchange_ws.ohlcvs("ETH/USDT", "1m")
363+
364+
assert call_count["count"] == 3
365+
assert result == [[1, 2, 3, 4, 5, 6]]
366+
assert result is not ccxt_object.ohlcvs["ETH/USDT"]["1m"]
367+
368+
# Fail all the time
369+
mocker.patch("freqtrade.exchange.exchange_ws.deepcopy", side_effect=RuntimeError("copy failed"))
370+
with pytest.raises(TemporaryError, match=r"Error deepcopying: copy failed"):
371+
exchange_ws.ohlcvs("ETH/USDT", "1m")
372+
373+
exchange_ws.cleanup()
374+
375+
376+
def test_exchangews_get_ohlcv_with_refresh(mocker):
377+
config = MagicMock()
378+
ccxt_object = MagicMock()
379+
mocker.patch("freqtrade.exchange.exchange_ws.ExchangeWS._start_forever", MagicMock())
380+
381+
exchange_ws = ExchangeWS(config, ccxt_object)
382+
ohlcvs_mock = mocker.patch.object(
383+
exchange_ws, "ohlcvs", return_value=[[10, 11, 12, 13, 14, 15]]
384+
)
385+
386+
paircomb = ("ETH/USDT", "1m", CandleType.SPOT)
387+
exchange_ws._klines_last_refresh[paircomb] = 123456789
388+
389+
candles, refresh = exchange_ws.get_ohlcv_with_refresh("ETH/USDT", "1m", CandleType.SPOT)
390+
391+
ohlcvs_mock.assert_called_once_with("ETH/USDT", "1m")
392+
assert candles == [[10, 11, 12, 13, 14, 15]]
393+
assert refresh == 123456789
394+
395+
candles, refresh = exchange_ws.get_ohlcv_with_refresh("ETH/USDT", "5m", CandleType.SPOT)
396+
assert candles == [[10, 11, 12, 13, 14, 15]]
397+
assert refresh == 0
398+
399+
exchange_ws.cleanup()
400+
401+
338402
def test_exchangews_continuous_stopped_task_exception(mocker, caplog):
339403
config = MagicMock()
340404
ccxt_object = MagicMock()

0 commit comments

Comments
 (0)