diff --git a/tests/plugins/test_pairlist.py b/tests/plugins/test_pairlist.py index 37ebdc58b..79ca8dc0c 100644 --- a/tests/plugins/test_pairlist.py +++ b/tests/plugins/test_pairlist.py @@ -2212,7 +2212,7 @@ def test_FullTradesFilter(mocker, default_conf_usdt, fee, caplog) -> None: @pytest.mark.parametrize( - "pairlists,trade_mode,result", + "pairlists,trade_mode,result,coin_market_calls", [ ( [ @@ -2222,6 +2222,7 @@ def test_FullTradesFilter(mocker, default_conf_usdt, fee, caplog) -> None: ], "spot", ["BTC/USDT", "ETH/USDT"], + 1, ), ( [ @@ -2231,6 +2232,7 @@ def test_FullTradesFilter(mocker, default_conf_usdt, fee, caplog) -> None: ], "spot", ["BTC/USDT", "ETH/USDT", "XRP/USDT", "ADA/USDT"], + 1, ), ( [ @@ -2240,6 +2242,7 @@ def test_FullTradesFilter(mocker, default_conf_usdt, fee, caplog) -> None: ], "spot", ["BTC/USDT", "ETH/USDT", "XRP/USDT"], + 1, ), ( [ @@ -2249,6 +2252,7 @@ def test_FullTradesFilter(mocker, default_conf_usdt, fee, caplog) -> None: ], "spot", ["BTC/USDT", "ETH/USDT", "XRP/USDT"], + 1, ), ( [ @@ -2257,6 +2261,7 @@ def test_FullTradesFilter(mocker, default_conf_usdt, fee, caplog) -> None: ], "spot", ["BTC/USDT", "ETH/USDT", "XRP/USDT"], + 1, ), ( [ @@ -2265,6 +2270,7 @@ def test_FullTradesFilter(mocker, default_conf_usdt, fee, caplog) -> None: ], "spot", ["BTC/USDT", "ETH/USDT"], + 1, ), ( [ @@ -2273,6 +2279,7 @@ def test_FullTradesFilter(mocker, default_conf_usdt, fee, caplog) -> None: ], "futures", ["ETH/USDT:USDT"], + 1, ), ( [ @@ -2281,11 +2288,34 @@ def test_FullTradesFilter(mocker, default_conf_usdt, fee, caplog) -> None: ], "futures", ["ETH/USDT:USDT", "ADA/USDT:USDT"], + 1, + ), + ( + [ + # MarketCapPairList as generator - futures, 1 category + {"method": "MarketCapPairList", "number_assets": 2, "categories": ["layer-1"]} + ], + "futures", + ["ETH/USDT:USDT", "ADA/USDT:USDT"], + ["layer-1"], + ), + ( + [ + # MarketCapPairList as generator - futures, 1 category + { + "method": "MarketCapPairList", + "number_assets": 2, + "categories": ["layer-1", "protocol"], + } + ], + "futures", + ["ETH/USDT:USDT", "ADA/USDT:USDT"], + ["layer-1", "protocol"], ), ], ) def test_MarketCapPairList_filter( - mocker, default_conf_usdt, trade_mode, markets, pairlists, result + mocker, default_conf_usdt, trade_mode, markets, pairlists, result, coin_market_calls ): test_value = [ {"symbol": "btc"}, @@ -2309,8 +2339,16 @@ def test_MarketCapPairList_filter( markets=PropertyMock(return_value=markets), exchange_has=MagicMock(return_value=True), ) - mocker.patch( + "freqtrade.plugins.pairlist.MarketCapPairList.FtCoinGeckoApi.get_coins_categories_list", + return_value=[ + {"category_id": "layer-1"}, + {"category_id": "protocol"}, + {"category_id": "defi"}, + ], + ) + + gcm_mock = mocker.patch( "freqtrade.plugins.pairlist.MarketCapPairList.FtCoinGeckoApi.get_coins_markets", return_value=test_value, ) @@ -2319,6 +2357,15 @@ def test_MarketCapPairList_filter( pm = PairListManager(exchange, default_conf_usdt) pm.refresh_pairlist() + if isinstance(coin_market_calls, int): + assert gcm_mock.call_count == coin_market_calls + else: + assert gcm_mock.call_count == len(coin_market_calls) + for call in coin_market_calls: + assert any( + "category" in c.kwargs and c.kwargs["category"] == call + for c in gcm_mock.call_args_list + ) assert pm.whitelist == result