Adjust tests
This commit is contained in:
parent
4ce968763e
commit
bcd7f115bf
@ -118,10 +118,13 @@ def test_init_exception(default_conf, mocker):
|
|||||||
|
|
||||||
|
|
||||||
def test_exchange_resolver(default_conf, mocker, caplog):
|
def test_exchange_resolver(default_conf, mocker, caplog):
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=MagicMock()))
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_async_markets', MagicMock())
|
_init_ccxt=MagicMock(return_value=MagicMock()),
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_pairs', MagicMock())
|
validate_timeframes=MagicMock())
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_timeframes', MagicMock())
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
|
_load_async_markets=MagicMock(),
|
||||||
|
validate_timeframe=MagicMock(),
|
||||||
|
validate_pairs=MagicMock())
|
||||||
exchange = ExchangeResolver('Bittrex', default_conf).exchange
|
exchange = ExchangeResolver('Bittrex', default_conf).exchange
|
||||||
assert isinstance(exchange, Exchange)
|
assert isinstance(exchange, Exchange)
|
||||||
assert log_has_re(r"No .* specific subclass found. Using the generic class instead.", caplog)
|
assert log_has_re(r"No .* specific subclass found. Using the generic class instead.", caplog)
|
||||||
@ -173,7 +176,7 @@ def test_symbol_amount_prec(default_conf, mocker):
|
|||||||
api_mock.load_markets = MagicMock(return_value={
|
api_mock.load_markets = MagicMock(return_value={
|
||||||
'ETH/BTC': '', 'LTC/BTC': '', 'XRP/BTC': '', 'NEO/BTC': ''
|
'ETH/BTC': '', 'LTC/BTC': '', 'XRP/BTC': '', 'NEO/BTC': ''
|
||||||
})
|
})
|
||||||
mocker.patch('freqtrade.exchange.Exchange.name', PropertyMock(return_value='binance'))
|
mocker.patch('freqtrade.exchange.BaseExchange.name', PropertyMock(return_value='binance'))
|
||||||
|
|
||||||
markets = PropertyMock(return_value={'ETH/BTC': {'precision': {'amount': 4}}})
|
markets = PropertyMock(return_value={'ETH/BTC': {'precision': {'amount': 4}}})
|
||||||
type(api_mock).markets = markets
|
type(api_mock).markets = markets
|
||||||
@ -194,7 +197,7 @@ def test_symbol_price_prec(default_conf, mocker):
|
|||||||
api_mock.load_markets = MagicMock(return_value={
|
api_mock.load_markets = MagicMock(return_value={
|
||||||
'ETH/BTC': '', 'LTC/BTC': '', 'XRP/BTC': '', 'NEO/BTC': ''
|
'ETH/BTC': '', 'LTC/BTC': '', 'XRP/BTC': '', 'NEO/BTC': ''
|
||||||
})
|
})
|
||||||
mocker.patch('freqtrade.exchange.Exchange.name', PropertyMock(return_value='binance'))
|
mocker.patch('freqtrade.exchange.BaseExchange.name', PropertyMock(return_value='binance'))
|
||||||
|
|
||||||
markets = PropertyMock(return_value={'ETH/BTC': {'precision': {'price': 4}}})
|
markets = PropertyMock(return_value={'ETH/BTC': {'precision': {'price': 4}}})
|
||||||
type(api_mock).markets = markets
|
type(api_mock).markets = markets
|
||||||
@ -259,10 +262,13 @@ def test__load_markets(default_conf, mocker, caplog):
|
|||||||
caplog.set_level(logging.INFO)
|
caplog.set_level(logging.INFO)
|
||||||
api_mock = MagicMock()
|
api_mock = MagicMock()
|
||||||
api_mock.load_markets = MagicMock(side_effect=ccxt.BaseError("SomeError"))
|
api_mock.load_markets = MagicMock(side_effect=ccxt.BaseError("SomeError"))
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_pairs', MagicMock())
|
_init_ccxt=MagicMock(return_value=api_mock),
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_timeframes', MagicMock())
|
validate_timeframes=MagicMock())
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_async_markets', MagicMock())
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
|
_load_async_markets=MagicMock(),
|
||||||
|
validate_timeframe=MagicMock(),
|
||||||
|
validate_pairs=MagicMock())
|
||||||
Exchange(default_conf)
|
Exchange(default_conf)
|
||||||
assert log_has('Unable to initialize markets. Reason: SomeError', caplog)
|
assert log_has('Unable to initialize markets. Reason: SomeError', caplog)
|
||||||
|
|
||||||
@ -325,9 +331,12 @@ def test_validate_pairs(default_conf, mocker): # test exchange.validate_pairs d
|
|||||||
id_mock = PropertyMock(return_value='test_exchange')
|
id_mock = PropertyMock(return_value='test_exchange')
|
||||||
type(api_mock).id = id_mock
|
type(api_mock).id = id_mock
|
||||||
|
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_timeframes', MagicMock())
|
_init_ccxt=MagicMock(return_value=api_mock),
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_async_markets', MagicMock())
|
validate_timeframes=MagicMock())
|
||||||
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
|
_load_async_markets=MagicMock(),
|
||||||
|
validate_timeframe=MagicMock())
|
||||||
Exchange(default_conf)
|
Exchange(default_conf)
|
||||||
|
|
||||||
|
|
||||||
@ -336,9 +345,12 @@ def test_validate_pairs_not_available(default_conf, mocker):
|
|||||||
type(api_mock).markets = PropertyMock(return_value={
|
type(api_mock).markets = PropertyMock(return_value={
|
||||||
'XRP/BTC': {'inactive': True}
|
'XRP/BTC': {'inactive': True}
|
||||||
})
|
})
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_timeframes', MagicMock())
|
_init_ccxt=MagicMock(return_value=api_mock),
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_async_markets', MagicMock())
|
validate_timeframes=MagicMock())
|
||||||
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
|
_load_async_markets=MagicMock(),
|
||||||
|
validate_timeframe=MagicMock())
|
||||||
|
|
||||||
with pytest.raises(OperationalException, match=r'not available'):
|
with pytest.raises(OperationalException, match=r'not available'):
|
||||||
Exchange(default_conf)
|
Exchange(default_conf)
|
||||||
@ -347,12 +359,15 @@ def test_validate_pairs_not_available(default_conf, mocker):
|
|||||||
def test_validate_pairs_exception(default_conf, mocker, caplog):
|
def test_validate_pairs_exception(default_conf, mocker, caplog):
|
||||||
caplog.set_level(logging.INFO)
|
caplog.set_level(logging.INFO)
|
||||||
api_mock = MagicMock()
|
api_mock = MagicMock()
|
||||||
mocker.patch('freqtrade.exchange.Exchange.name', PropertyMock(return_value='Binance'))
|
mocker.patch('freqtrade.exchange.BaseExchange.name', PropertyMock(return_value='Binance'))
|
||||||
|
|
||||||
type(api_mock).markets = PropertyMock(return_value={})
|
type(api_mock).markets = PropertyMock(return_value={})
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', api_mock)
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_timeframes', MagicMock())
|
_init_ccxt=api_mock,
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_async_markets', MagicMock())
|
validate_timeframes=MagicMock())
|
||||||
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
|
_load_async_markets=MagicMock(),
|
||||||
|
validate_timeframe=MagicMock())
|
||||||
|
|
||||||
with pytest.raises(OperationalException, match=r'Pair ETH/BTC is not available on Binance'):
|
with pytest.raises(OperationalException, match=r'Pair ETH/BTC is not available on Binance'):
|
||||||
Exchange(default_conf)
|
Exchange(default_conf)
|
||||||
@ -368,9 +383,12 @@ def test_validate_pairs_restricted(default_conf, mocker, caplog):
|
|||||||
'ETH/BTC': {}, 'LTC/BTC': {}, 'NEO/BTC': {},
|
'ETH/BTC': {}, 'LTC/BTC': {}, 'NEO/BTC': {},
|
||||||
'XRP/BTC': {'info': {'IsRestricted': True}}
|
'XRP/BTC': {'info': {'IsRestricted': True}}
|
||||||
})
|
})
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_timeframes', MagicMock())
|
_init_ccxt=MagicMock(return_value=api_mock),
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_async_markets', MagicMock())
|
validate_timeframes=MagicMock())
|
||||||
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
|
_load_async_markets=MagicMock(),
|
||||||
|
validate_timeframe=MagicMock())
|
||||||
|
|
||||||
Exchange(default_conf)
|
Exchange(default_conf)
|
||||||
assert log_has(f"Pair XRP/BTC is restricted for some users on this exchange."
|
assert log_has(f"Pair XRP/BTC is restricted for some users on this exchange."
|
||||||
@ -389,9 +407,11 @@ def test_validate_timeframes(default_conf, mocker):
|
|||||||
'1h': '1h'})
|
'1h': '1h'})
|
||||||
type(api_mock).timeframes = timeframes
|
type(api_mock).timeframes = timeframes
|
||||||
|
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_markets', MagicMock(return_value={}))
|
_init_ccxt=MagicMock(return_value=api_mock))
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_pairs', MagicMock())
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
|
_load_markets=MagicMock(return_value={}),
|
||||||
|
validate_pairs=MagicMock())
|
||||||
Exchange(default_conf)
|
Exchange(default_conf)
|
||||||
|
|
||||||
|
|
||||||
@ -406,9 +426,11 @@ def test_validate_timeframes_failed(default_conf, mocker):
|
|||||||
'1h': '1h'})
|
'1h': '1h'})
|
||||||
type(api_mock).timeframes = timeframes
|
type(api_mock).timeframes = timeframes
|
||||||
|
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_markets', MagicMock(return_value={}))
|
_init_ccxt=MagicMock(return_value=api_mock))
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_pairs', MagicMock())
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
|
_load_markets=MagicMock(return_value={}),
|
||||||
|
validate_pairs=MagicMock())
|
||||||
with pytest.raises(OperationalException,
|
with pytest.raises(OperationalException,
|
||||||
match=r"Invalid ticker interval '3m'. This exchange supports.*"):
|
match=r"Invalid ticker interval '3m'. This exchange supports.*"):
|
||||||
Exchange(default_conf)
|
Exchange(default_conf)
|
||||||
@ -423,9 +445,11 @@ def test_validate_timeframes_emulated_ohlcv_1(default_conf, mocker):
|
|||||||
# delete timeframes so magicmock does not autocreate it
|
# delete timeframes so magicmock does not autocreate it
|
||||||
del api_mock.timeframes
|
del api_mock.timeframes
|
||||||
|
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_markets', MagicMock(return_value={}))
|
_init_ccxt=MagicMock(return_value=api_mock))
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_pairs', MagicMock())
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
|
_load_markets=MagicMock(return_value={}),
|
||||||
|
validate_pairs=MagicMock())
|
||||||
with pytest.raises(OperationalException,
|
with pytest.raises(OperationalException,
|
||||||
match=r'The ccxt library does not provide the list of timeframes '
|
match=r'The ccxt library does not provide the list of timeframes '
|
||||||
r'for the exchange ".*" and this exchange '
|
r'for the exchange ".*" and this exchange '
|
||||||
@ -442,10 +466,11 @@ def test_validate_timeframes_emulated_ohlcvi_2(default_conf, mocker):
|
|||||||
# delete timeframes so magicmock does not autocreate it
|
# delete timeframes so magicmock does not autocreate it
|
||||||
del api_mock.timeframes
|
del api_mock.timeframes
|
||||||
|
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_markets',
|
_init_ccxt=MagicMock(return_value=api_mock))
|
||||||
MagicMock(return_value={'timeframes': None}))
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_pairs', MagicMock())
|
_load_markets=MagicMock(return_value={'timeframes': None}),
|
||||||
|
validate_pairs=MagicMock())
|
||||||
with pytest.raises(OperationalException,
|
with pytest.raises(OperationalException,
|
||||||
match=r'The ccxt library does not provide the list of timeframes '
|
match=r'The ccxt library does not provide the list of timeframes '
|
||||||
r'for the exchange ".*" and this exchange '
|
r'for the exchange ".*" and this exchange '
|
||||||
@ -464,21 +489,25 @@ def test_validate_timeframes_not_in_config(default_conf, mocker):
|
|||||||
'1h': '1h'})
|
'1h': '1h'})
|
||||||
type(api_mock).timeframes = timeframes
|
type(api_mock).timeframes = timeframes
|
||||||
|
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_markets', MagicMock(return_value={}))
|
_init_ccxt=MagicMock(return_value=api_mock))
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_pairs', MagicMock())
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
|
_load_markets=MagicMock(return_value={}),
|
||||||
|
validate_pairs=MagicMock())
|
||||||
Exchange(default_conf)
|
Exchange(default_conf)
|
||||||
|
|
||||||
|
|
||||||
def test_validate_order_types(default_conf, mocker):
|
def test_validate_order_types(default_conf, mocker):
|
||||||
api_mock = MagicMock()
|
api_mock = MagicMock()
|
||||||
|
|
||||||
type(api_mock).has = PropertyMock(return_value={'createMarketOrder': True})
|
type(api_mock).has = PropertyMock(return_value={'createMarketOrder': True})
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_markets', MagicMock(return_value={}))
|
_init_ccxt=MagicMock(return_value=api_mock),
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_pairs', MagicMock())
|
validate_timeframes=MagicMock(),
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_timeframes', MagicMock())
|
name='Bittrex')
|
||||||
mocker.patch('freqtrade.exchange.Exchange.name', 'Bittrex')
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
|
_load_markets=MagicMock(return_value={}),
|
||||||
|
validate_pairs=MagicMock(),
|
||||||
|
validate_timeframe=MagicMock())
|
||||||
default_conf['order_types'] = {
|
default_conf['order_types'] = {
|
||||||
'buy': 'limit',
|
'buy': 'limit',
|
||||||
'sell': 'limit',
|
'sell': 'limit',
|
||||||
@ -489,7 +518,7 @@ def test_validate_order_types(default_conf, mocker):
|
|||||||
Exchange(default_conf)
|
Exchange(default_conf)
|
||||||
|
|
||||||
type(api_mock).has = PropertyMock(return_value={'createMarketOrder': False})
|
type(api_mock).has = PropertyMock(return_value={'createMarketOrder': False})
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
mocker.patch('freqtrade.exchange.BaseExchange._init_ccxt', MagicMock(return_value=api_mock))
|
||||||
|
|
||||||
default_conf['order_types'] = {
|
default_conf['order_types'] = {
|
||||||
'buy': 'limit',
|
'buy': 'limit',
|
||||||
@ -515,11 +544,13 @@ def test_validate_order_types(default_conf, mocker):
|
|||||||
|
|
||||||
|
|
||||||
def test_validate_order_types_not_in_config(default_conf, mocker):
|
def test_validate_order_types_not_in_config(default_conf, mocker):
|
||||||
api_mock = MagicMock()
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange._init_ccxt', MagicMock(return_value=api_mock))
|
_init_ccxt=MagicMock(return_value=MagicMock()),
|
||||||
mocker.patch('freqtrade.exchange.Exchange._load_markets', MagicMock(return_value={}))
|
validate_timeframes=MagicMock())
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_pairs', MagicMock())
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
mocker.patch('freqtrade.exchange.Exchange.validate_timeframes', MagicMock())
|
_load_markets=MagicMock(return_value={}),
|
||||||
|
validate_pairs=MagicMock(),
|
||||||
|
validate_timeframe=MagicMock())
|
||||||
|
|
||||||
conf = copy.deepcopy(default_conf)
|
conf = copy.deepcopy(default_conf)
|
||||||
Exchange(conf)
|
Exchange(conf)
|
||||||
@ -1444,11 +1475,13 @@ def test_stoploss_limit_order_unsupported_exchange(default_conf, mocker):
|
|||||||
|
|
||||||
|
|
||||||
def test_merge_ft_has_dict(default_conf, mocker):
|
def test_merge_ft_has_dict(default_conf, mocker):
|
||||||
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
_init_ccxt=MagicMock(return_value=MagicMock()),
|
_init_ccxt=MagicMock(return_value=MagicMock()),
|
||||||
|
validate_timeframes=MagicMock())
|
||||||
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
_load_async_markets=MagicMock(),
|
_load_async_markets=MagicMock(),
|
||||||
validate_pairs=MagicMock(),
|
validate_pairs=MagicMock(),
|
||||||
validate_timeframes=MagicMock())
|
validate_timeframe=MagicMock())
|
||||||
ex = Exchange(default_conf)
|
ex = Exchange(default_conf)
|
||||||
assert ex._ft_has == Exchange._ft_has_default
|
assert ex._ft_has == Exchange._ft_has_default
|
||||||
|
|
||||||
@ -1472,11 +1505,13 @@ def test_merge_ft_has_dict(default_conf, mocker):
|
|||||||
|
|
||||||
|
|
||||||
def test_get_valid_pair_combination(default_conf, mocker, markets):
|
def test_get_valid_pair_combination(default_conf, mocker, markets):
|
||||||
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
mocker.patch.multiple('freqtrade.exchange.BaseExchange',
|
||||||
_init_ccxt=MagicMock(return_value=MagicMock()),
|
_init_ccxt=MagicMock(return_value=MagicMock()),
|
||||||
|
validate_timeframes=MagicMock())
|
||||||
|
mocker.patch.multiple('freqtrade.exchange.Exchange',
|
||||||
_load_async_markets=MagicMock(),
|
_load_async_markets=MagicMock(),
|
||||||
validate_pairs=MagicMock(),
|
validate_pairs=MagicMock(),
|
||||||
validate_timeframes=MagicMock(),
|
validate_timeframe=MagicMock(),
|
||||||
markets=PropertyMock(return_value=markets))
|
markets=PropertyMock(return_value=markets))
|
||||||
ex = Exchange(default_conf)
|
ex = Exchange(default_conf)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user