Skip to content

Commit eaf3fc8

Browse files
committed
test: add negative test for parallel download
1 parent 94c5ddc commit eaf3fc8

File tree

1 file changed

+80
-5
lines changed

1 file changed

+80
-5
lines changed

tests/data/test_history.py

Lines changed: 80 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -800,9 +800,9 @@ def test_download_pair_history_with_pair_candles(mocker, default_conf, tmp_path,
800800
existing_data = DataFrame(
801801
{
802802
"date": [dt_utc(2018, 1, 10, 10, 0), dt_utc(2018, 1, 10, 10, 5)],
803-
"open": [1.0, 1.1],
803+
"open": [1.0, 1.15],
804804
"high": [1.1, 1.2],
805-
"low": [0.9, 1.0],
805+
"low": [0.9, 1.1],
806806
"close": [1.05, 1.15],
807807
"volume": [100, 150],
808808
}
@@ -856,9 +856,6 @@ def test_download_pair_history_with_pair_candles(mocker, default_conf, tmp_path,
856856
"volume": [100, 200, 250, 300],
857857
}
858858
)
859-
mocker.patch(
860-
"freqtrade.data.history.history_utils.clean_ohlcv_dataframe", return_value=expected_result
861-
)
862859

863860
get_historic_ohlcv_mock = MagicMock()
864861
mocker.patch.object(exchange, "get_historic_ohlcv", get_historic_ohlcv_mock)
@@ -887,3 +884,81 @@ def test_download_pair_history_with_pair_candles(mocker, default_conf, tmp_path,
887884
stored_data = data_handler_mock.ohlcv_store.call_args_list[0][1]["data"]
888885
assert stored_data.equals(expected_result)
889886
assert len(stored_data) == 4
887+
888+
889+
def test_download_pair_history_with_pair_candles_no_overlap(
890+
mocker, default_conf, tmp_path, caplog
891+
) -> None:
892+
exchange = get_patched_exchange(mocker, default_conf)
893+
894+
# Create test data for existing cached data
895+
existing_data = DataFrame(
896+
{
897+
"date": [dt_utc(2018, 1, 10, 10, 0), dt_utc(2018, 1, 10, 10, 5)],
898+
"open": [1.0, 1.1],
899+
"high": [1.1, 1.2],
900+
"low": [0.9, 1.0],
901+
"close": [1.05, 1.15],
902+
"volume": [100, 150],
903+
}
904+
)
905+
906+
# Create pair_candles data that will be used instead of exchange download
907+
# This data should start before or at the same time as since_ms to trigger the else branch
908+
pair_candles_data = DataFrame(
909+
{
910+
"date": [
911+
dt_utc(2018, 1, 10, 10, 10),
912+
dt_utc(2018, 1, 10, 10, 15),
913+
dt_utc(2018, 1, 10, 10, 20),
914+
],
915+
"open": [1.15, 1.2, 1.25],
916+
"high": [1.25, 1.3, 1.35],
917+
"low": [1.1, 1.15, 1.2],
918+
"close": [1.2, 1.25, 1.3],
919+
"volume": [200, 250, 300],
920+
}
921+
)
922+
923+
# Mock the data handler to return existing cached data
924+
data_handler_mock = MagicMock()
925+
data_handler_mock.ohlcv_load.return_value = existing_data
926+
data_handler_mock.ohlcv_store = MagicMock()
927+
mocker.patch(
928+
"freqtrade.data.history.history_utils.get_datahandler", return_value=data_handler_mock
929+
)
930+
931+
# Mock _load_cached_data_for_updating to return existing data and since_ms
932+
since_ms = dt_ts(dt_utc(2018, 1, 10, 10, 5)) # Time of last existing candle
933+
mocker.patch(
934+
"freqtrade.data.history.history_utils._load_cached_data_for_updating",
935+
return_value=(existing_data, since_ms, None),
936+
)
937+
938+
get_historic_ohlcv_mock = MagicMock(return_value=DataFrame())
939+
mocker.patch.object(exchange, "get_historic_ohlcv", get_historic_ohlcv_mock)
940+
941+
# Call _download_pair_history with pre-loaded pair_candles
942+
result = _download_pair_history(
943+
datadir=tmp_path,
944+
exchange=exchange,
945+
pair="TEST/BTC",
946+
timeframe="5m",
947+
candle_type=CandleType.SPOT,
948+
pair_candles=pair_candles_data,
949+
)
950+
951+
# Verify the function succeeded
952+
assert result is True
953+
954+
# Verify that exchange.get_historic_ohlcv was NOT called (parallel method was used)
955+
assert get_historic_ohlcv_mock.call_count == 1
956+
957+
# Verify the log message indicating parallel method was used (line 315-316)
958+
assert not log_has_re(r"Downloaded .* Parallel Method.", caplog)
959+
960+
# Verify data was stored
961+
assert data_handler_mock.ohlcv_store.call_count == 1
962+
stored_data = data_handler_mock.ohlcv_store.call_args_list[0][1]["data"]
963+
assert stored_data.equals(existing_data)
964+
assert len(stored_data) == 2

0 commit comments

Comments
 (0)