Adapt tests to use async methods
This commit is contained in:
parent
3c85d5201f
commit
011ba1d9ae
@ -1084,7 +1084,7 @@ def ohlcv_history_list():
|
|||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def ohlcv_history(ohlcv_history_list):
|
def ohlcv_history(ohlcv_history_list):
|
||||||
return ohlcv_to_dataframe(ohlcv_history_list, "5m", pair="UNITTEST/BTC",
|
return ohlcv_to_dataframe(ohlcv_history_list, "5m", pair="UNITTEST/BTC",
|
||||||
fill_missing=True)
|
fill_missing=True, drop_incomplete=False)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
|
@ -353,11 +353,19 @@ def test_VolumePairList_refresh_empty(mocker, markets_empty, whitelist_conf):
|
|||||||
"BTC", ['ETH/BTC', 'TKN/BTC', 'HOT/BTC']),
|
"BTC", ['ETH/BTC', 'TKN/BTC', 'HOT/BTC']),
|
||||||
])
|
])
|
||||||
def test_VolumePairList_whitelist_gen(mocker, whitelist_conf, shitcoinmarkets, tickers,
|
def test_VolumePairList_whitelist_gen(mocker, whitelist_conf, shitcoinmarkets, tickers,
|
||||||
ohlcv_history_list, pairlists, base_currency,
|
ohlcv_history, pairlists, base_currency,
|
||||||
whitelist_result, caplog) -> None:
|
whitelist_result, caplog) -> None:
|
||||||
whitelist_conf['pairlists'] = pairlists
|
whitelist_conf['pairlists'] = pairlists
|
||||||
whitelist_conf['stake_currency'] = base_currency
|
whitelist_conf['stake_currency'] = base_currency
|
||||||
|
|
||||||
|
ohlcv_data = {
|
||||||
|
('ETH/BTC', '1d'): ohlcv_history,
|
||||||
|
('TKN/BTC', '1d'): ohlcv_history,
|
||||||
|
('LTC/BTC', '1d'): ohlcv_history,
|
||||||
|
('XRP/BTC', '1d'): ohlcv_history,
|
||||||
|
('HOT/BTC', '1d'): ohlcv_history,
|
||||||
|
}
|
||||||
|
|
||||||
mocker.patch('freqtrade.exchange.Exchange.exchange_has', MagicMock(return_value=True))
|
mocker.patch('freqtrade.exchange.Exchange.exchange_has', MagicMock(return_value=True))
|
||||||
|
|
||||||
if whitelist_result == 'static_in_the_middle':
|
if whitelist_result == 'static_in_the_middle':
|
||||||
@ -374,7 +382,7 @@ def test_VolumePairList_whitelist_gen(mocker, whitelist_conf, shitcoinmarkets, t
|
|||||||
)
|
)
|
||||||
mocker.patch.multiple(
|
mocker.patch.multiple(
|
||||||
'freqtrade.exchange.Exchange',
|
'freqtrade.exchange.Exchange',
|
||||||
get_historic_ohlcv=MagicMock(return_value=ohlcv_history_list),
|
refresh_latest_ohlcv=MagicMock(return_value=ohlcv_data),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Provide for PerformanceFilter's dependency
|
# Provide for PerformanceFilter's dependency
|
||||||
@ -402,7 +410,7 @@ def test_VolumePairList_whitelist_gen(mocker, whitelist_conf, shitcoinmarkets, t
|
|||||||
|
|
||||||
for pairlist in pairlists:
|
for pairlist in pairlists:
|
||||||
if pairlist['method'] == 'AgeFilter' and pairlist['min_days_listed'] and \
|
if pairlist['method'] == 'AgeFilter' and pairlist['min_days_listed'] and \
|
||||||
len(ohlcv_history_list) <= pairlist['min_days_listed']:
|
len(ohlcv_history) <= pairlist['min_days_listed']:
|
||||||
assert log_has_re(r'^Removed .* from whitelist, because age .* is less than '
|
assert log_has_re(r'^Removed .* from whitelist, because age .* is less than '
|
||||||
r'.* day.*', caplog)
|
r'.* day.*', caplog)
|
||||||
if pairlist['method'] == 'PrecisionFilter' and whitelist_result:
|
if pairlist['method'] == 'PrecisionFilter' and whitelist_result:
|
||||||
@ -575,8 +583,13 @@ def test_agefilter_min_days_listed_too_large(mocker, default_conf, markets, tick
|
|||||||
get_patched_freqtradebot(mocker, default_conf)
|
get_patched_freqtradebot(mocker, default_conf)
|
||||||
|
|
||||||
|
|
||||||
def test_agefilter_caching(mocker, markets, whitelist_conf_agefilter, tickers, ohlcv_history_list):
|
def test_agefilter_caching(mocker, markets, whitelist_conf_agefilter, tickers, ohlcv_history):
|
||||||
|
ohlcv_data = {
|
||||||
|
('ETH/BTC', '1d'): ohlcv_history,
|
||||||
|
('TKN/BTC', '1d'): ohlcv_history,
|
||||||
|
('LTC/BTC', '1d'): ohlcv_history,
|
||||||
|
('XRP/BTC', '1d'): ohlcv_history,
|
||||||
|
}
|
||||||
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
markets=PropertyMock(return_value=markets),
|
markets=PropertyMock(return_value=markets),
|
||||||
exchange_has=MagicMock(return_value=True),
|
exchange_has=MagicMock(return_value=True),
|
||||||
@ -584,18 +597,18 @@ def test_agefilter_caching(mocker, markets, whitelist_conf_agefilter, tickers, o
|
|||||||
)
|
)
|
||||||
mocker.patch.multiple(
|
mocker.patch.multiple(
|
||||||
'freqtrade.exchange.Exchange',
|
'freqtrade.exchange.Exchange',
|
||||||
get_historic_ohlcv=MagicMock(return_value=ohlcv_history_list),
|
refresh_latest_ohlcv=MagicMock(return_value=ohlcv_data),
|
||||||
)
|
)
|
||||||
|
|
||||||
freqtrade = get_patched_freqtradebot(mocker, whitelist_conf_agefilter)
|
freqtrade = get_patched_freqtradebot(mocker, whitelist_conf_agefilter)
|
||||||
assert freqtrade.exchange.get_historic_ohlcv.call_count == 0
|
assert freqtrade.exchange.refresh_latest_ohlcv.call_count == 0
|
||||||
freqtrade.pairlists.refresh_pairlist()
|
freqtrade.pairlists.refresh_pairlist()
|
||||||
assert freqtrade.exchange.get_historic_ohlcv.call_count > 0
|
assert freqtrade.exchange.refresh_latest_ohlcv.call_count > 0
|
||||||
|
|
||||||
previous_call_count = freqtrade.exchange.get_historic_ohlcv.call_count
|
previous_call_count = freqtrade.exchange.refresh_latest_ohlcv.call_count
|
||||||
freqtrade.pairlists.refresh_pairlist()
|
freqtrade.pairlists.refresh_pairlist()
|
||||||
# Should not have increased since first call.
|
# Should not have increased since first call.
|
||||||
assert freqtrade.exchange.get_historic_ohlcv.call_count == previous_call_count
|
assert freqtrade.exchange.refresh_latest_ohlcv.call_count == previous_call_count
|
||||||
|
|
||||||
|
|
||||||
def test_rangestabilityfilter_checks(mocker, default_conf, markets, tickers):
|
def test_rangestabilityfilter_checks(mocker, default_conf, markets, tickers):
|
||||||
@ -625,7 +638,7 @@ def test_rangestabilityfilter_checks(mocker, default_conf, markets, tickers):
|
|||||||
(0.01, 5),
|
(0.01, 5),
|
||||||
(0.05, 0), # Setting rate_of_change to 5% removes all pairs from the whitelist.
|
(0.05, 0), # Setting rate_of_change to 5% removes all pairs from the whitelist.
|
||||||
])
|
])
|
||||||
def test_rangestabilityfilter_caching(mocker, markets, default_conf, tickers, ohlcv_history_list,
|
def test_rangestabilityfilter_caching(mocker, markets, default_conf, tickers, ohlcv_history,
|
||||||
min_rate_of_change, expected_length):
|
min_rate_of_change, expected_length):
|
||||||
default_conf['pairlists'] = [{'method': 'VolumePairList', 'number_assets': 10},
|
default_conf['pairlists'] = [{'method': 'VolumePairList', 'number_assets': 10},
|
||||||
{'method': 'RangeStabilityFilter', 'lookback_days': 2,
|
{'method': 'RangeStabilityFilter', 'lookback_days': 2,
|
||||||
@ -636,22 +649,30 @@ def test_rangestabilityfilter_caching(mocker, markets, default_conf, tickers, oh
|
|||||||
exchange_has=MagicMock(return_value=True),
|
exchange_has=MagicMock(return_value=True),
|
||||||
get_tickers=tickers
|
get_tickers=tickers
|
||||||
)
|
)
|
||||||
|
ohlcv_data = {
|
||||||
|
('ETH/BTC', '1d'): ohlcv_history,
|
||||||
|
('TKN/BTC', '1d'): ohlcv_history,
|
||||||
|
('LTC/BTC', '1d'): ohlcv_history,
|
||||||
|
('XRP/BTC', '1d'): ohlcv_history,
|
||||||
|
('HOT/BTC', '1d'): ohlcv_history,
|
||||||
|
('BLK/BTC', '1d'): ohlcv_history,
|
||||||
|
}
|
||||||
mocker.patch.multiple(
|
mocker.patch.multiple(
|
||||||
'freqtrade.exchange.Exchange',
|
'freqtrade.exchange.Exchange',
|
||||||
get_historic_ohlcv=MagicMock(return_value=ohlcv_history_list),
|
refresh_latest_ohlcv=MagicMock(return_value=ohlcv_data),
|
||||||
)
|
)
|
||||||
|
|
||||||
freqtrade = get_patched_freqtradebot(mocker, default_conf)
|
freqtrade = get_patched_freqtradebot(mocker, default_conf)
|
||||||
assert freqtrade.exchange.get_historic_ohlcv.call_count == 0
|
assert freqtrade.exchange.refresh_latest_ohlcv.call_count == 0
|
||||||
freqtrade.pairlists.refresh_pairlist()
|
freqtrade.pairlists.refresh_pairlist()
|
||||||
assert len(freqtrade.pairlists.whitelist) == expected_length
|
assert len(freqtrade.pairlists.whitelist) == expected_length
|
||||||
assert freqtrade.exchange.get_historic_ohlcv.call_count > 0
|
assert freqtrade.exchange.refresh_latest_ohlcv.call_count > 0
|
||||||
|
|
||||||
previous_call_count = freqtrade.exchange.get_historic_ohlcv.call_count
|
previous_call_count = freqtrade.exchange.refresh_latest_ohlcv.call_count
|
||||||
freqtrade.pairlists.refresh_pairlist()
|
freqtrade.pairlists.refresh_pairlist()
|
||||||
assert len(freqtrade.pairlists.whitelist) == expected_length
|
assert len(freqtrade.pairlists.whitelist) == expected_length
|
||||||
# Should not have increased since first call.
|
# Should not have increased since first call.
|
||||||
assert freqtrade.exchange.get_historic_ohlcv.call_count == previous_call_count
|
assert freqtrade.exchange.refresh_latest_ohlcv.call_count == previous_call_count
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("pairlistconfig,desc_expected,exception_expected", [
|
@pytest.mark.parametrize("pairlistconfig,desc_expected,exception_expected", [
|
||||||
|
@ -870,7 +870,7 @@ def test_api_forcesell(botclient, mocker, ticker, fee, markets):
|
|||||||
def test_api_pair_candles(botclient, ohlcv_history):
|
def test_api_pair_candles(botclient, ohlcv_history):
|
||||||
ftbot, client = botclient
|
ftbot, client = botclient
|
||||||
timeframe = '5m'
|
timeframe = '5m'
|
||||||
amount = 2
|
amount = 3
|
||||||
|
|
||||||
# No pair
|
# No pair
|
||||||
rc = client_get(client,
|
rc = client_get(client,
|
||||||
@ -910,8 +910,8 @@ def test_api_pair_candles(botclient, ohlcv_history):
|
|||||||
assert 'data_stop_ts' in rc.json
|
assert 'data_stop_ts' in rc.json
|
||||||
assert rc.json['data_start'] == '2017-11-26 08:50:00+00:00'
|
assert rc.json['data_start'] == '2017-11-26 08:50:00+00:00'
|
||||||
assert rc.json['data_start_ts'] == 1511686200000
|
assert rc.json['data_start_ts'] == 1511686200000
|
||||||
assert rc.json['data_stop'] == '2017-11-26 08:55:00+00:00'
|
assert rc.json['data_stop'] == '2017-11-26 09:00:00+00:00'
|
||||||
assert rc.json['data_stop_ts'] == 1511686500000
|
assert rc.json['data_stop_ts'] == 1511686800000
|
||||||
assert isinstance(rc.json['columns'], list)
|
assert isinstance(rc.json['columns'], list)
|
||||||
assert rc.json['columns'] == ['date', 'open', 'high',
|
assert rc.json['columns'] == ['date', 'open', 'high',
|
||||||
'low', 'close', 'volume', 'sma', 'buy', 'sell',
|
'low', 'close', 'volume', 'sma', 'buy', 'sell',
|
||||||
@ -926,7 +926,10 @@ def test_api_pair_candles(botclient, ohlcv_history):
|
|||||||
[['2017-11-26 08:50:00', 8.794e-05, 8.948e-05, 8.794e-05, 8.88e-05, 0.0877869,
|
[['2017-11-26 08:50:00', 8.794e-05, 8.948e-05, 8.794e-05, 8.88e-05, 0.0877869,
|
||||||
None, 0, 0, 1511686200000, None, None],
|
None, 0, 0, 1511686200000, None, None],
|
||||||
['2017-11-26 08:55:00', 8.88e-05, 8.942e-05, 8.88e-05,
|
['2017-11-26 08:55:00', 8.88e-05, 8.942e-05, 8.88e-05,
|
||||||
8.893e-05, 0.05874751, 8.886500000000001e-05, 1, 0, 1511686500000, 8.88e-05, None]
|
8.893e-05, 0.05874751, 8.886500000000001e-05, 1, 0, 1511686500000, 8.88e-05, None],
|
||||||
|
['2017-11-26 09:00:00', 8.891e-05, 8.893e-05, 8.875e-05, 8.877e-05,
|
||||||
|
0.7039405, 8.885000000000002e-05, 0, 0, 1511686800000, None, None]
|
||||||
|
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
@ -128,27 +128,28 @@ def test_assert_df_raise(default_conf, mocker, caplog, ohlcv_history):
|
|||||||
|
|
||||||
|
|
||||||
def test_assert_df(default_conf, mocker, ohlcv_history, caplog):
|
def test_assert_df(default_conf, mocker, ohlcv_history, caplog):
|
||||||
|
df_len = len(ohlcv_history) - 1
|
||||||
# Ensure it's running when passed correctly
|
# Ensure it's running when passed correctly
|
||||||
_STRATEGY.assert_df(ohlcv_history, len(ohlcv_history),
|
_STRATEGY.assert_df(ohlcv_history, len(ohlcv_history),
|
||||||
ohlcv_history.loc[1, 'close'], ohlcv_history.loc[1, 'date'])
|
ohlcv_history.loc[df_len, 'close'], ohlcv_history.loc[df_len, 'date'])
|
||||||
|
|
||||||
with pytest.raises(StrategyError, match=r"Dataframe returned from strategy.*length\."):
|
with pytest.raises(StrategyError, match=r"Dataframe returned from strategy.*length\."):
|
||||||
_STRATEGY.assert_df(ohlcv_history, len(ohlcv_history) + 1,
|
_STRATEGY.assert_df(ohlcv_history, len(ohlcv_history) + 1,
|
||||||
ohlcv_history.loc[1, 'close'], ohlcv_history.loc[1, 'date'])
|
ohlcv_history.loc[df_len, 'close'], ohlcv_history.loc[df_len, 'date'])
|
||||||
|
|
||||||
with pytest.raises(StrategyError,
|
with pytest.raises(StrategyError,
|
||||||
match=r"Dataframe returned from strategy.*last close price\."):
|
match=r"Dataframe returned from strategy.*last close price\."):
|
||||||
_STRATEGY.assert_df(ohlcv_history, len(ohlcv_history),
|
_STRATEGY.assert_df(ohlcv_history, len(ohlcv_history),
|
||||||
ohlcv_history.loc[1, 'close'] + 0.01, ohlcv_history.loc[1, 'date'])
|
ohlcv_history.loc[df_len, 'close'] + 0.01, ohlcv_history.loc[df_len, 'date'])
|
||||||
with pytest.raises(StrategyError,
|
with pytest.raises(StrategyError,
|
||||||
match=r"Dataframe returned from strategy.*last date\."):
|
match=r"Dataframe returned from strategy.*last date\."):
|
||||||
_STRATEGY.assert_df(ohlcv_history, len(ohlcv_history),
|
_STRATEGY.assert_df(ohlcv_history, len(ohlcv_history),
|
||||||
ohlcv_history.loc[1, 'close'], ohlcv_history.loc[0, 'date'])
|
ohlcv_history.loc[df_len, 'close'], ohlcv_history.loc[0, 'date'])
|
||||||
|
|
||||||
_STRATEGY.disable_dataframe_checks = True
|
_STRATEGY.disable_dataframe_checks = True
|
||||||
caplog.clear()
|
caplog.clear()
|
||||||
_STRATEGY.assert_df(ohlcv_history, len(ohlcv_history),
|
_STRATEGY.assert_df(ohlcv_history, len(ohlcv_history),
|
||||||
ohlcv_history.loc[1, 'close'], ohlcv_history.loc[0, 'date'])
|
ohlcv_history.loc[2, 'close'], ohlcv_history.loc[0, 'date'])
|
||||||
assert log_has_re(r"Dataframe returned from strategy.*last date\.", caplog)
|
assert log_has_re(r"Dataframe returned from strategy.*last date\.", caplog)
|
||||||
# reset to avoid problems in other tests due to test leakage
|
# reset to avoid problems in other tests due to test leakage
|
||||||
_STRATEGY.disable_dataframe_checks = False
|
_STRATEGY.disable_dataframe_checks = False
|
||||||
|
Loading…
Reference in New Issue
Block a user