From 39c582dac2b2f234ddafe2e0208b67d5cf3f81ec Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 29 Sep 2024 15:06:43 +0200 Subject: [PATCH] tests: move protection-validation test to protection test file --- tests/plugins/test_protections.py | 58 ++++++++++++++++++++++++++++++ tests/test_configuration.py | 59 ------------------------------- 2 files changed, 58 insertions(+), 59 deletions(-) diff --git a/tests/plugins/test_protections.py b/tests/plugins/test_protections.py index 45a523c92..85c03f4fc 100644 --- a/tests/plugins/test_protections.py +++ b/tests/plugins/test_protections.py @@ -5,6 +5,7 @@ import pytest from freqtrade import constants from freqtrade.enums import ExitType +from freqtrade.exceptions import OperationalException from freqtrade.persistence import PairLocks, Trade from freqtrade.persistence.trade_model import Order from freqtrade.plugins.protectionmanager import ProtectionManager @@ -101,6 +102,63 @@ def test_protectionmanager(mocker, default_conf): assert handler.stop_per_pair("XRP/BTC", datetime.now(timezone.utc), "*") is None +@pytest.mark.parametrize( + "protconf,expected", + [ + ([], None), + ([{"method": "StoplossGuard", "lookback_period": 2000, "stop_duration_candles": 10}], None), + ([{"method": "StoplossGuard", "lookback_period_candles": 20, "stop_duration": 10}], None), + ( + [ + { + "method": "StoplossGuard", + "lookback_period_candles": 20, + "lookback_period": 2000, + "stop_duration": 10, + } + ], + r"Protections must specify either `lookback_period`.*", + ), + ( + [ + { + "method": "StoplossGuard", + "lookback_period": 20, + "stop_duration": 10, + "stop_duration_candles": 10, + } + ], + r"Protections must specify either `stop_duration`.*", + ), + ( + [ + { + "method": "StoplossGuard", + "lookback_period": 20, + "stop_duration": 10, + "unlock_at": "20:02", + } + ], + r"Protections must specify either `unlock_at`, `stop_duration` or.*", + ), + ( + [{"method": "StoplossGuard", "lookback_period_candles": 20, "unlock_at": "20:02"}], + None, + ), + ( + [{"method": "StoplossGuard", "lookback_period_candles": 20, "unlock_at": "55:102"}], + "Invalid date format for unlock_at: 55:102.", + ), + ], +) +def test_validate_protections(protconf, expected): + if expected: + with pytest.raises(OperationalException, match=expected): + ProtectionManager.validate_protections(protconf) + else: + ProtectionManager.validate_protections(protconf) + + @pytest.mark.parametrize( "timeframe,expected_lookback,expected_stop,protconf", [ diff --git a/tests/test_configuration.py b/tests/test_configuration.py index 9c76272db..829bf699a 100644 --- a/tests/test_configuration.py +++ b/tests/test_configuration.py @@ -812,65 +812,6 @@ def test_validate_whitelist(default_conf): validate_config_consistency(conf) -@pytest.mark.parametrize( - "protconf,expected", - [ - ([], None), - ([{"method": "StoplossGuard", "lookback_period": 2000, "stop_duration_candles": 10}], None), - ([{"method": "StoplossGuard", "lookback_period_candles": 20, "stop_duration": 10}], None), - ( - [ - { - "method": "StoplossGuard", - "lookback_period_candles": 20, - "lookback_period": 2000, - "stop_duration": 10, - } - ], - r"Protections must specify either `lookback_period`.*", - ), - ( - [ - { - "method": "StoplossGuard", - "lookback_period": 20, - "stop_duration": 10, - "stop_duration_candles": 10, - } - ], - r"Protections must specify either `stop_duration`.*", - ), - ( - [ - { - "method": "StoplossGuard", - "lookback_period": 20, - "stop_duration": 10, - "unlock_at": "20:02", - } - ], - r"Protections must specify either `unlock_at`, `stop_duration` or.*", - ), - ( - [{"method": "StoplossGuard", "lookback_period_candles": 20, "unlock_at": "20:02"}], - None, - ), - ( - [{"method": "StoplossGuard", "lookback_period_candles": 20, "unlock_at": "55:102"}], - "Invalid date format for unlock_at: 55:102.", - ), - ], -) -def test_validate_protections(default_conf, protconf, expected): - conf = deepcopy(default_conf) - conf["protections"] = protconf - if expected: - with pytest.raises(OperationalException, match=expected): - validate_config_consistency(conf) - else: - validate_config_consistency(conf) - - def test_validate_ask_orderbook(default_conf, caplog) -> None: conf = deepcopy(default_conf) conf["exit_pricing"]["use_order_book"] = True