diff --git a/tests/exchange/test_exchange.py b/tests/exchange/test_exchange.py index 187cb011b..3114a3408 100644 --- a/tests/exchange/test_exchange.py +++ b/tests/exchange/test_exchange.py @@ -255,7 +255,6 @@ def test_init_exception(default_conf, mocker): def test_exchange_resolver(default_conf, mocker, caplog): mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=MagicMock())) mocker.patch(f"{EXMS}._load_async_markets") - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_timeframes") mocker.patch(f"{EXMS}.validate_stakecurrency") mocker.patch(f"{EXMS}.validate_pricing") @@ -555,7 +554,6 @@ def test_get_min_pair_stake_amount_real_data(mocker, default_conf) -> None: def test__load_async_markets(default_conf, mocker, caplog): mocker.patch(f"{EXMS}._init_ccxt") - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_timeframes") mocker.patch(f"{EXMS}.reload_markets") mocker.patch(f"{EXMS}.validate_stakecurrency") @@ -584,7 +582,6 @@ def test__load_markets(default_conf, mocker, caplog): api_mock = MagicMock() api_mock.load_markets = get_mock_coro(side_effect=ccxt.BaseError("SomeError")) mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_timeframes") mocker.patch(f"{EXMS}.validate_stakecurrency") mocker.patch(f"{EXMS}.validate_pricing") @@ -684,7 +681,6 @@ def test_validate_stakecurrency(default_conf, stake_currency, mocker, caplog): } ) mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_timeframes") mocker.patch(f"{EXMS}.validate_pricing") Exchange(default_conf) @@ -702,7 +698,6 @@ def test_validate_stakecurrency_error(default_conf, mocker, caplog): } ) mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_timeframes") with pytest.raises( ConfigurationError, @@ -755,123 +750,6 @@ def test_get_pair_base_currency(default_conf, mocker, pair, expected): assert ex.get_pair_base_currency(pair) == expected -def test_validate_pairs(default_conf, mocker): - api_mock = MagicMock() - id_mock = PropertyMock(return_value="test_exchange") - type(api_mock).id = id_mock - - mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) - mocker.patch(f"{EXMS}.validate_timeframes") - mocker.patch( - f"{EXMS}._load_async_markets", - return_value={ - "ETH/BTC": {"quote": "BTC"}, - "LTC/BTC": {"quote": "BTC"}, - "XRP/BTC": {"quote": "BTC"}, - "NEO/BTC": {"quote": "BTC"}, - }, - ) - mocker.patch(f"{EXMS}.validate_stakecurrency") - mocker.patch(f"{EXMS}.validate_pricing") - # test exchange.validate_pairs directly - # No assert - but this should not fail (!) - Exchange(default_conf) - - -def test_validate_pairs_not_available(default_conf, mocker): - api_mock = MagicMock() - type(api_mock).markets = PropertyMock( - return_value={"XRP/BTC": {"inactive": True, "base": "XRP", "quote": "BTC"}} - ) - mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) - mocker.patch(f"{EXMS}.validate_timeframes") - mocker.patch(f"{EXMS}.validate_stakecurrency") - mocker.patch(f"{EXMS}._load_async_markets") - - with pytest.raises(OperationalException, match=r"not available"): - Exchange(default_conf) - - -def test_validate_pairs_exception(default_conf, mocker, caplog): - caplog.set_level(logging.INFO) - api_mock = MagicMock() - mocker.patch(f"{EXMS}.name", PropertyMock(return_value="Binance")) - - type(api_mock).markets = PropertyMock(return_value={}) - mocker.patch(f"{EXMS}._init_ccxt", api_mock) - mocker.patch(f"{EXMS}.validate_timeframes") - mocker.patch(f"{EXMS}.validate_stakecurrency") - mocker.patch(f"{EXMS}.validate_pricing") - mocker.patch(f"{EXMS}._load_async_markets") - - with pytest.raises(OperationalException, match=r"Pair ETH/BTC is not available on Binance"): - Exchange(default_conf) - - mocker.patch(f"{EXMS}.markets", PropertyMock(return_value={})) - Exchange(default_conf) - assert log_has("Unable to validate pairs (assuming they are correct).", caplog) - - -def test_validate_pairs_stakecompatibility(default_conf, mocker): - api_mock = MagicMock() - type(api_mock).load_markets = get_mock_coro( - return_value={ - "ETH/BTC": {"quote": "BTC"}, - "LTC/BTC": {"quote": "BTC"}, - "XRP/BTC": {"quote": "BTC"}, - "NEO/BTC": {"quote": "BTC"}, - "HELLO-WORLD": {"quote": "BTC"}, - } - ) - mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) - mocker.patch(f"{EXMS}.validate_timeframes") - mocker.patch(f"{EXMS}.validate_stakecurrency") - mocker.patch(f"{EXMS}.validate_pricing") - - Exchange(default_conf) - - -def test_validate_pairs_stakecompatibility_downloaddata(default_conf, mocker): - api_mock = MagicMock() - default_conf["stake_currency"] = "" - type(api_mock).load_markets = get_mock_coro( - return_value={ - "ETH/BTC": {"quote": "BTC"}, - "LTC/BTC": {"quote": "BTC"}, - "XRP/BTC": {"quote": "BTC"}, - "NEO/BTC": {"quote": "BTC"}, - "HELLO-WORLD": {"quote": "BTC"}, - } - ) - mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) - mocker.patch(f"{EXMS}.validate_timeframes") - mocker.patch(f"{EXMS}.validate_stakecurrency") - mocker.patch(f"{EXMS}.validate_pricing") - - Exchange(default_conf) - assert type(api_mock).load_markets.call_count == 1 - - -def test_validate_pairs_stakecompatibility_fail(default_conf, mocker): - default_conf["exchange"]["pair_whitelist"].append("HELLO-WORLD") - api_mock = MagicMock() - type(api_mock).load_markets = get_mock_coro( - return_value={ - "ETH/BTC": {"quote": "BTC"}, - "LTC/BTC": {"quote": "BTC"}, - "XRP/BTC": {"quote": "BTC"}, - "NEO/BTC": {"quote": "BTC"}, - "HELLO-WORLD": {"quote": "USDT"}, - } - ) - mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) - mocker.patch(f"{EXMS}.validate_timeframes") - mocker.patch(f"{EXMS}.validate_stakecurrency") - - with pytest.raises(OperationalException, match=r"Stake-currency 'BTC' not compatible with.*"): - Exchange(default_conf) - - @pytest.mark.parametrize("timeframe", [("5m"), ("1m"), ("15m"), ("1h")]) def test_validate_timeframes(default_conf, mocker, timeframe): default_conf["timeframe"] = timeframe @@ -883,7 +761,6 @@ def test_validate_timeframes(default_conf, mocker, timeframe): mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) mocker.patch(f"{EXMS}.reload_markets") - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_stakecurrency") mocker.patch(f"{EXMS}.validate_pricing") Exchange(default_conf) @@ -901,7 +778,6 @@ def test_validate_timeframes_failed(default_conf, mocker): mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) mocker.patch(f"{EXMS}.reload_markets") - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_stakecurrency") mocker.patch(f"{EXMS}.validate_pricing") with pytest.raises( @@ -931,7 +807,6 @@ def test_validate_timeframes_emulated_ohlcv_1(default_conf, mocker): mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) mocker.patch(f"{EXMS}.reload_markets") - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_stakecurrency") with pytest.raises( OperationalException, @@ -953,7 +828,6 @@ def test_validate_timeframes_emulated_ohlcvi_2(default_conf, mocker): mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) mocker.patch(f"{EXMS}.reload_markets") - mocker.patch(f"{EXMS}.validate_pairs", MagicMock()) mocker.patch(f"{EXMS}.validate_stakecurrency") with pytest.raises( OperationalException, @@ -975,7 +849,6 @@ def test_validate_timeframes_not_in_config(default_conf, mocker): mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) mocker.patch(f"{EXMS}.reload_markets") - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_stakecurrency") mocker.patch(f"{EXMS}.validate_pricing") mocker.patch(f"{EXMS}.validate_required_startup_candles") @@ -992,7 +865,6 @@ def test_validate_pricing(default_conf, mocker): mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) mocker.patch(f"{EXMS}.reload_markets") mocker.patch(f"{EXMS}.validate_trading_mode_and_margin_mode") - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_timeframes") mocker.patch(f"{EXMS}.validate_stakecurrency") mocker.patch(f"{EXMS}.name", "Binance") @@ -1027,7 +899,6 @@ def test_validate_ordertypes(default_conf, mocker): type(api_mock).has = PropertyMock(return_value={"createMarketOrder": True}) mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) mocker.patch(f"{EXMS}.reload_markets") - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_timeframes") mocker.patch(f"{EXMS}.validate_stakecurrency") mocker.patch(f"{EXMS}.validate_pricing") @@ -1086,7 +957,6 @@ def test_validate_ordertypes_stop_advanced(default_conf, mocker, exchange_name, type(api_mock).has = PropertyMock(return_value={"createMarketOrder": True}) mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) mocker.patch(f"{EXMS}.reload_markets") - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_timeframes") mocker.patch(f"{EXMS}.validate_stakecurrency") mocker.patch(f"{EXMS}.validate_pricing") @@ -1111,7 +981,6 @@ def test_validate_order_types_not_in_config(default_conf, mocker): api_mock = MagicMock() mocker.patch(f"{EXMS}._init_ccxt", MagicMock(return_value=api_mock)) mocker.patch(f"{EXMS}.reload_markets") - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_timeframes") mocker.patch(f"{EXMS}.validate_pricing") mocker.patch(f"{EXMS}.validate_stakecurrency") @@ -1127,7 +996,6 @@ def test_validate_required_startup_candles(default_conf, mocker, caplog): mocker.patch(f"{EXMS}._init_ccxt", api_mock) mocker.patch(f"{EXMS}.validate_timeframes") mocker.patch(f"{EXMS}._load_async_markets") - mocker.patch(f"{EXMS}.validate_pairs") mocker.patch(f"{EXMS}.validate_pricing") mocker.patch(f"{EXMS}.validate_stakecurrency") @@ -4161,7 +4029,6 @@ def test_merge_ft_has_dict(default_conf, mocker): EXMS, _init_ccxt=MagicMock(return_value=MagicMock()), _load_async_markets=MagicMock(), - validate_pairs=MagicMock(), validate_timeframes=MagicMock(), validate_stakecurrency=MagicMock(), validate_pricing=MagicMock(), @@ -4196,7 +4063,6 @@ def test_get_valid_pair_combination(default_conf, mocker, markets): EXMS, _init_ccxt=MagicMock(return_value=MagicMock()), _load_async_markets=MagicMock(), - validate_pairs=MagicMock(), validate_timeframes=MagicMock(), validate_pricing=MagicMock(), markets=PropertyMock(return_value=markets), @@ -4476,7 +4342,6 @@ def test_get_markets( EXMS, _init_ccxt=MagicMock(return_value=MagicMock()), _load_async_markets=MagicMock(), - validate_pairs=MagicMock(), validate_timeframes=MagicMock(), validate_pricing=MagicMock(), markets=PropertyMock(return_value=markets_static), diff --git a/tests/freqtradebot/test_freqtradebot.py b/tests/freqtradebot/test_freqtradebot.py index 7c45928a2..f0b2d5b36 100644 --- a/tests/freqtradebot/test_freqtradebot.py +++ b/tests/freqtradebot/test_freqtradebot.py @@ -2204,7 +2204,6 @@ def test_manage_open_orders_buy_exception( patch_exchange(mocker) mocker.patch.multiple( EXMS, - validate_pairs=MagicMock(), fetch_ticker=ticker_usdt, fetch_order=MagicMock(side_effect=ExchangeError), cancel_order=cancel_order_mock,