Some tests for new market checking
This commit is contained in:
		| @@ -777,6 +777,8 @@ def get_markets(): | |||||||
|             'base': 'ETH', |             'base': 'ETH', | ||||||
|             'quote': 'USDT', |             'quote': 'USDT', | ||||||
|             'spot': True, |             'spot': True, | ||||||
|  |             'future': True, | ||||||
|  |             'margin': True, | ||||||
|             'type': 'spot', |             'type': 'spot', | ||||||
|             'precision': { |             'precision': { | ||||||
|                 'amount': 8, |                 'amount': 8, | ||||||
| @@ -802,6 +804,8 @@ def get_markets(): | |||||||
|             'quote': 'USDT', |             'quote': 'USDT', | ||||||
|             'active': False, |             'active': False, | ||||||
|             'spot': True, |             'spot': True, | ||||||
|  |             'future': True, | ||||||
|  |             'margin': True, | ||||||
|             'type': 'spot', |             'type': 'spot', | ||||||
|             'precision': { |             'precision': { | ||||||
|                 'amount': 8, |                 'amount': 8, | ||||||
|   | |||||||
| @@ -2760,7 +2760,8 @@ def test_get_valid_pair_combination(default_conf, mocker, markets): | |||||||
|  |  | ||||||
|  |  | ||||||
| @pytest.mark.parametrize( | @pytest.mark.parametrize( | ||||||
|     "base_currencies, quote_currencies, pairs_only, active_only, expected_keys", [ |     "base_currencies,quote_currencies,tradable_only,active_only,spot_only," | ||||||
|  |     "futures_only,expected_keys", [ | ||||||
|         # Testing markets (in conftest.py): |         # Testing markets (in conftest.py): | ||||||
|         # 'BLK/BTC':  'active': True |         # 'BLK/BTC':  'active': True | ||||||
|         # 'BTT/BTC':  'active': True |         # 'BTT/BTC':  'active': True | ||||||
| @@ -2775,48 +2776,62 @@ def test_get_valid_pair_combination(default_conf, mocker, markets): | |||||||
|         # 'XLTCUSDT': 'active': True, not a pair |         # 'XLTCUSDT': 'active': True, not a pair | ||||||
|         # 'XRP/BTC':  'active': False |         # 'XRP/BTC':  'active': False | ||||||
|         # all markets |         # all markets | ||||||
|         ([], [], False, False, |         ([], [], False, False, False, False, | ||||||
|          ['BLK/BTC', 'BTT/BTC', 'ETH/BTC', 'ETH/USDT', 'LTC/BTC', 'LTC/ETH', 'LTC/USD', |          ['BLK/BTC', 'BTT/BTC', 'ETH/BTC', 'ETH/USDT', 'LTC/BTC', 'LTC/ETH', 'LTC/USD', | ||||||
|           'LTC/USDT', 'NEO/BTC', 'TKN/BTC', 'XLTCUSDT', 'XRP/BTC']), |           'LTC/USDT', 'NEO/BTC', 'TKN/BTC', 'XLTCUSDT', 'XRP/BTC']), | ||||||
|  |         # all markets, only spot pairs | ||||||
|  |         ([], [], False, False, True, False, | ||||||
|  |          ['BLK/BTC', 'BTT/BTC', 'ETH/BTC', 'ETH/USDT', 'LTC/BTC', 'LTC/ETH', 'LTC/USD', | ||||||
|  |           'LTC/USDT', 'NEO/BTC', 'TKN/BTC', 'XRP/BTC']), | ||||||
|         # active markets |         # active markets | ||||||
|         ([], [], False, True, |         ([], [], False, True, False, False, | ||||||
|          ['BLK/BTC', 'ETH/BTC', 'ETH/USDT', 'LTC/BTC', 'LTC/ETH', 'LTC/USD', 'NEO/BTC', |          ['BLK/BTC', 'ETH/BTC', 'ETH/USDT', 'LTC/BTC', 'LTC/ETH', 'LTC/USD', 'NEO/BTC', | ||||||
|           'TKN/BTC', 'XLTCUSDT', 'XRP/BTC']), |           'TKN/BTC', 'XLTCUSDT', 'XRP/BTC']), | ||||||
|         # all pairs |         # all pairs | ||||||
|         ([], [], True, False, |         ([], [], True, False, False, False, | ||||||
|          ['BLK/BTC', 'BTT/BTC', 'ETH/BTC', 'ETH/USDT', 'LTC/BTC', 'LTC/ETH', 'LTC/USD', |          ['BLK/BTC', 'BTT/BTC', 'ETH/BTC', 'ETH/USDT', 'LTC/BTC', 'LTC/ETH', 'LTC/USD', | ||||||
|           'LTC/USDT', 'NEO/BTC', 'TKN/BTC', 'XRP/BTC']), |           'LTC/USDT', 'NEO/BTC', 'TKN/BTC', 'XRP/BTC']), | ||||||
|         # active pairs |         # active pairs | ||||||
|         ([], [], True, True, |         ([], [], True, True, False, False, | ||||||
|          ['BLK/BTC', 'ETH/BTC', 'ETH/USDT', 'LTC/BTC', 'LTC/ETH', 'LTC/USD', 'NEO/BTC', |          ['BLK/BTC', 'ETH/BTC', 'ETH/USDT', 'LTC/BTC', 'LTC/ETH', 'LTC/USD', 'NEO/BTC', | ||||||
|           'TKN/BTC', 'XRP/BTC']), |           'TKN/BTC', 'XRP/BTC']), | ||||||
|         # all markets, base=ETH, LTC |         # all markets, base=ETH, LTC | ||||||
|         (['ETH', 'LTC'], [], False, False, |         (['ETH', 'LTC'], [], False, False, False, False, | ||||||
|          ['ETH/BTC', 'ETH/USDT', 'LTC/BTC', 'LTC/ETH', 'LTC/USD', 'LTC/USDT', 'XLTCUSDT']), |          ['ETH/BTC', 'ETH/USDT', 'LTC/BTC', 'LTC/ETH', 'LTC/USD', 'LTC/USDT', 'XLTCUSDT']), | ||||||
|         # all markets, base=LTC |         # all markets, base=LTC | ||||||
|         (['LTC'], [], False, False, |         (['LTC'], [], False, False, False, False, | ||||||
|          ['LTC/BTC', 'LTC/ETH', 'LTC/USD', 'LTC/USDT', 'XLTCUSDT']), |          ['LTC/BTC', 'LTC/ETH', 'LTC/USD', 'LTC/USDT', 'XLTCUSDT']), | ||||||
|  |         # spot markets, base=LTC | ||||||
|  |         (['LTC'], [], False, False, True, False, | ||||||
|  |          ['LTC/BTC', 'LTC/ETH', 'LTC/USD', 'LTC/USDT']), | ||||||
|         # all markets, quote=USDT |         # all markets, quote=USDT | ||||||
|         ([], ['USDT'], False, False, |         ([], ['USDT'], False, False, False, False, | ||||||
|          ['ETH/USDT', 'LTC/USDT', 'XLTCUSDT']), |          ['ETH/USDT', 'LTC/USDT', 'XLTCUSDT']), | ||||||
|  |         # Futures markets, quote=USDT | ||||||
|  |         ([], ['USDT'], False, False, False, True, | ||||||
|  |          ['ETH/USDT', 'LTC/USDT']), | ||||||
|         # all markets, quote=USDT, USD |         # all markets, quote=USDT, USD | ||||||
|         ([], ['USDT', 'USD'], False, False, |         ([], ['USDT', 'USD'], False, False, False, False, | ||||||
|          ['ETH/USDT', 'LTC/USD', 'LTC/USDT', 'XLTCUSDT']), |          ['ETH/USDT', 'LTC/USD', 'LTC/USDT', 'XLTCUSDT']), | ||||||
|  |         # spot markets, quote=USDT, USD | ||||||
|  |         ([], ['USDT', 'USD'], False, False, True, False, | ||||||
|  |          ['ETH/USDT', 'LTC/USD', 'LTC/USDT']), | ||||||
|         # all markets, base=LTC, quote=USDT |         # all markets, base=LTC, quote=USDT | ||||||
|         (['LTC'], ['USDT'], False, False, |         (['LTC'], ['USDT'], False, False, False, False, | ||||||
|          ['LTC/USDT', 'XLTCUSDT']), |          ['LTC/USDT', 'XLTCUSDT']), | ||||||
|         # all pairs, base=LTC, quote=USDT |         # all pairs, base=LTC, quote=USDT | ||||||
|         (['LTC'], ['USDT'], True, False, |         (['LTC'], ['USDT'], True, False, False, False, | ||||||
|          ['LTC/USDT']), |          ['LTC/USDT']), | ||||||
|         # all markets, base=LTC, quote=USDT, NONEXISTENT |         # all markets, base=LTC, quote=USDT, NONEXISTENT | ||||||
|         (['LTC'], ['USDT', 'NONEXISTENT'], False, False, |         (['LTC'], ['USDT', 'NONEXISTENT'], False, False, False, False, | ||||||
|          ['LTC/USDT', 'XLTCUSDT']), |          ['LTC/USDT', 'XLTCUSDT']), | ||||||
|         # all markets, base=LTC, quote=NONEXISTENT |         # all markets, base=LTC, quote=NONEXISTENT | ||||||
|         (['LTC'], ['NONEXISTENT'], False, False, |         (['LTC'], ['NONEXISTENT'], False, False, False, False, | ||||||
|          []), |          []), | ||||||
|     ]) |     ]) | ||||||
| def test_get_markets(default_conf, mocker, markets_static, | def test_get_markets(default_conf, mocker, markets_static, | ||||||
|                      base_currencies, quote_currencies, pairs_only, active_only, |                      base_currencies, quote_currencies, tradable_only, active_only, | ||||||
|  |                      spot_only, futures_only, | ||||||
|                      expected_keys): |                      expected_keys): | ||||||
|     mocker.patch.multiple('freqtrade.exchange.Exchange', |     mocker.patch.multiple('freqtrade.exchange.Exchange', | ||||||
|                           _init_ccxt=MagicMock(return_value=MagicMock()), |                           _init_ccxt=MagicMock(return_value=MagicMock()), | ||||||
| @@ -2825,7 +2840,12 @@ def test_get_markets(default_conf, mocker, markets_static, | |||||||
|                           validate_timeframes=MagicMock(), |                           validate_timeframes=MagicMock(), | ||||||
|                           markets=PropertyMock(return_value=markets_static)) |                           markets=PropertyMock(return_value=markets_static)) | ||||||
|     ex = Exchange(default_conf) |     ex = Exchange(default_conf) | ||||||
|     pairs = ex.get_markets(base_currencies, quote_currencies, pairs_only, active_only) |     pairs = ex.get_markets(base_currencies, | ||||||
|  |                            quote_currencies, | ||||||
|  |                            tradable_only=tradable_only, | ||||||
|  |                            spot_only=spot_only, | ||||||
|  |                            futures_only=futures_only, | ||||||
|  |                            active_only=active_only) | ||||||
|     assert sorted(pairs.keys()) == sorted(expected_keys) |     assert sorted(pairs.keys()) == sorted(expected_keys) | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -2926,39 +2946,41 @@ def test_timeframe_to_next_date(): | |||||||
|     assert timeframe_to_next_date("5m", date) == date + timedelta(minutes=5) |     assert timeframe_to_next_date("5m", date) == date + timedelta(minutes=5) | ||||||
|  |  | ||||||
|  |  | ||||||
| @pytest.mark.parametrize("market_symbol,base,quote,exchange,add_dict,expected_result", [ | @pytest.mark.parametrize("market_symbol,base,quote,exchange,spot,futures,add_dict,expected_result", [ | ||||||
|     ("BTC/USDT", 'BTC', 'USDT', "binance", {}, True), |     ("BTC/USDT", 'BTC', 'USDT', "binance", True, False, {}, True), | ||||||
|     ("USDT/BTC", 'USDT', 'BTC', "binance", {}, True), |     ("USDT/BTC", 'USDT', 'BTC', "binance", True, False, {}, True), | ||||||
|     ("USDT/BTC", 'BTC', 'USDT', "binance", {}, False),  # Reversed currencies |     ("USDT/BTC", 'BTC', 'USDT', "binance", True, False, {}, False),  # Reversed currencies | ||||||
|     ("BTCUSDT", 'BTC', 'USDT', "binance", {}, False),  # No seperating / |     ("BTCUSDT", 'BTC', 'USDT', "binance", True, False, {}, False),  # No seperating / | ||||||
|     ("BTCUSDT", None, "USDT", "binance", {}, False),  # |     ("BTCUSDT", None, "USDT", "binance", True, False, {}, False),  # | ||||||
|     ("USDT/BTC", "BTC", None, "binance", {}, False), |     ("USDT/BTC", "BTC", None, "binance", True, False, {}, False), | ||||||
|     ("BTCUSDT", "BTC", None, "binance", {}, False), |     ("BTCUSDT", "BTC", None, "binance", True, False, {}, False), | ||||||
|     ("BTC/USDT", "BTC", "USDT", "binance", {}, True), |     ("BTC/USDT", "BTC", "USDT", "binance", True, False, {}, True), | ||||||
|     ("BTC/USDT", "USDT", "BTC", "binance", {}, False),  # reversed currencies |     ("BTC/USDT", "USDT", "BTC", "binance", True, False, {}, False),  # reversed currencies | ||||||
|     ("BTC/USDT", "BTC", "USD", "binance", {}, False),  # Wrong quote currency |     ("BTC/USDT", "BTC", "USD", "binance", True, False, {}, False),  # Wrong quote currency | ||||||
|     ("BTC/", "BTC", 'UNK', "binance", {}, False), |     ("BTC/", "BTC", 'UNK', "binance", True, False, {}, False), | ||||||
|     ("/USDT", 'UNK', 'USDT', "binance", {}, False), |     ("/USDT", 'UNK', 'USDT', "binance", True, False, {}, False), | ||||||
|     ("BTC/EUR", 'BTC', 'EUR', "kraken", {"darkpool": False}, True), |     ("BTC/EUR", 'BTC', 'EUR', "kraken", True, False, {"darkpool": False}, True), | ||||||
|     ("EUR/BTC", 'EUR', 'BTC', "kraken", {"darkpool": False}, True), |     ("EUR/BTC", 'EUR', 'BTC', "kraken", True, False, {"darkpool": False}, True), | ||||||
|     ("EUR/BTC", 'BTC', 'EUR', "kraken", {"darkpool": False}, False),  # Reversed currencies |     ("EUR/BTC", 'BTC', 'EUR', "kraken", True, False, {"darkpool": False}, False),  # Reversed currencies | ||||||
|     ("BTC/EUR", 'BTC', 'USD', "kraken", {"darkpool": False}, False),  # wrong quote currency |     ("BTC/EUR", 'BTC', 'USD', "kraken", True, False, {"darkpool": False}, False),  # wrong quote currency | ||||||
|     ("BTC/EUR", 'BTC', 'EUR', "kraken", {"darkpool": True}, False),  # no darkpools |     ("BTC/EUR", 'BTC', 'EUR', "kraken", True, False, {"darkpool": True}, False),  # no darkpools | ||||||
|     ("BTC/EUR.d", 'BTC', 'EUR', "kraken", {"darkpool": True}, False),  # no darkpools |     ("BTC/EUR.d", 'BTC', 'EUR', "kraken", True, False, {"darkpool": True}, False),  # no darkpools | ||||||
|     ("BTC/USD", 'BTC', 'USD', "ftx", {'spot': True}, True), |     ("BTC/USD", 'BTC', 'USD', "ftx", True, False, {'spot': True}, True), | ||||||
|     ("USD/BTC", 'USD', 'BTC', "ftx", {'spot': True}, True), |     ("USD/BTC", 'USD', 'BTC', "ftx", True, False, {'spot': True}, True), | ||||||
|     ("BTC/USD", 'BTC', 'USDT', "ftx", {'spot': True}, False),  # Wrong quote currency |     ("BTC/USD", 'BTC', 'USDT', "ftx", True, False, {'spot': True}, False),  # Wrong quote currency | ||||||
|     ("BTC/USD", 'USD', 'BTC', "ftx", {'spot': True}, False),  # Reversed currencies |     ("BTC/USD", 'USD', 'BTC', "ftx", True, False, {'spot': True}, False),  # Reversed currencies | ||||||
|     ("BTC/USD", 'BTC', 'USD', "ftx", {'spot': False}, False),  # Can only trade spot markets |     ("BTC/USD", 'BTC', 'USD', "ftx", False, True, {'spot': False}, False),  # Can only trade spot markets | ||||||
|     ("BTC-PERP", 'BTC', 'USD', "ftx", {'spot': False}, False),  # Can only trade spot markets |     ("BTC-PERP", 'BTC', 'USD', "ftx", False, True, {'spot': False}, False),  # Can only trade spot markets | ||||||
| ]) | ]) | ||||||
| def test_market_is_tradable(mocker, default_conf, market_symbol, base, | def test_market_is_tradable(mocker, default_conf, market_symbol, base, | ||||||
|                             quote, add_dict, exchange, expected_result) -> None: |                             quote, spot, futures, add_dict, exchange, expected_result) -> None: | ||||||
|     ex = get_patched_exchange(mocker, default_conf, id=exchange) |     ex = get_patched_exchange(mocker, default_conf, id=exchange) | ||||||
|     market = { |     market = { | ||||||
|         'symbol': market_symbol, |         'symbol': market_symbol, | ||||||
|         'base': base, |         'base': base, | ||||||
|         'quote': quote, |         'quote': quote, | ||||||
|  |         'spot': spot, | ||||||
|  |         'futures': futures, | ||||||
|         **(add_dict), |         **(add_dict), | ||||||
|     } |     } | ||||||
|     assert ex.market_is_tradable(market) == expected_result |     assert ex.market_is_tradable(market) == expected_result | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user