From 0cfbb56b6ccf6b092d532f810f0e21a421faa2dd Mon Sep 17 00:00:00 2001 From: gcarq Date: Thu, 9 Nov 2017 21:47:47 +0100 Subject: [PATCH] enhance and test pair validation --- freqtrade/exchange/__init__.py | 5 +++++ freqtrade/tests/test_exchange.py | 34 ++++++++++++++++++++++++++++++++ freqtrade/tests/test_telegram.py | 3 ++- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 freqtrade/tests/test_exchange.py diff --git a/freqtrade/exchange/__init__.py b/freqtrade/exchange/__init__.py index 87bd0bbd1..feebd6bf1 100644 --- a/freqtrade/exchange/__init__.py +++ b/freqtrade/exchange/__init__.py @@ -63,7 +63,12 @@ def validate_pairs(pairs: List[str]) -> None: :return: None """ markets = _API.get_markets() + stake_cur = _CONF['stake_currency'] for pair in pairs: + if not pair.startswith(stake_cur): + raise RuntimeError( + 'Pair {} not compatible with stake_currency: {}'.format(pair, stake_cur) + ) if pair not in markets: raise RuntimeError('Pair {} is not available at {}'.format(pair, _API.name.lower())) diff --git a/freqtrade/tests/test_exchange.py b/freqtrade/tests/test_exchange.py new file mode 100644 index 000000000..d4d4e2588 --- /dev/null +++ b/freqtrade/tests/test_exchange.py @@ -0,0 +1,34 @@ +# pragma pylint: disable=missing-docstring +from unittest.mock import MagicMock + +import pytest + +from freqtrade.exchange import validate_pairs + + +def test_validate_pairs(default_conf, mocker): + api_mock = MagicMock() + api_mock.get_markets = MagicMock(return_value=['BTC_ETH', 'BTC_TKN', 'BTC_TRST', 'BTC_SWT']) + mocker.patch('freqtrade.exchange._API', api_mock) + mocker.patch.dict('freqtrade.exchange._CONF', default_conf) + validate_pairs(default_conf['exchange']['pair_whitelist']) + + +def test_validate_pairs_not_available(default_conf, mocker): + api_mock = MagicMock() + api_mock.get_markets = MagicMock(return_value=[]) + mocker.patch('freqtrade.exchange._API', api_mock) + mocker.patch.dict('freqtrade.exchange._CONF', default_conf) + with pytest.raises(RuntimeError, match=r'not available'): + validate_pairs(default_conf['exchange']['pair_whitelist']) + + +def test_validate_pairs_not_compatible(default_conf, mocker): + api_mock = MagicMock() + api_mock.get_markets = MagicMock(return_value=['BTC_ETH', 'BTC_TKN', 'BTC_TRST', 'BTC_SWT']) + default_conf['stake_currency'] = 'ETH' + mocker.patch('freqtrade.exchange._API', api_mock) + mocker.patch.dict('freqtrade.exchange._CONF', default_conf) + with pytest.raises(RuntimeError, match=r'not compatible'): + validate_pairs(default_conf['exchange']['pair_whitelist']) + diff --git a/freqtrade/tests/test_telegram.py b/freqtrade/tests/test_telegram.py index 0fc79ecad..7ca2619a7 100644 --- a/freqtrade/tests/test_telegram.py +++ b/freqtrade/tests/test_telegram.py @@ -268,7 +268,8 @@ def test_forcesell_handle_invalid(default_conf, update, mocker): assert 'no open trade' in msg_mock.call_args_list[0][0][0] -def test_performance_handle(default_conf, update, ticker, limit_buy_order, limit_sell_order, mocker): +def test_performance_handle( + default_conf, update, ticker, limit_buy_order, limit_sell_order, mocker): mocker.patch.dict('freqtrade.main._CONF', default_conf) mocker.patch('freqtrade.main.get_buy_signal', side_effect=lambda _: True) msg_mock = MagicMock()