Add some tests for strategy_wrapper
This commit is contained in:
parent
365fdf4c37
commit
8cd77b2e27
@ -25,6 +25,7 @@ def strategy_safe_wrapper(f, message: str = "", default_retval=None):
|
|||||||
return default_retval
|
return default_retval
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
logger.exception(
|
logger.exception(
|
||||||
|
f"{message}"
|
||||||
f"Unexpected error {error} calling {f}"
|
f"Unexpected error {error} calling {f}"
|
||||||
)
|
)
|
||||||
if default_retval is None:
|
if default_retval is None:
|
||||||
|
@ -4,12 +4,15 @@ import logging
|
|||||||
from unittest.mock import MagicMock
|
from unittest.mock import MagicMock
|
||||||
|
|
||||||
import arrow
|
import arrow
|
||||||
|
import pytest
|
||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
|
|
||||||
from freqtrade.configuration import TimeRange
|
from freqtrade.configuration import TimeRange
|
||||||
from freqtrade.data.history import load_data
|
from freqtrade.data.history import load_data
|
||||||
|
from freqtrade.exceptions import StrategyError
|
||||||
from freqtrade.persistence import Trade
|
from freqtrade.persistence import Trade
|
||||||
from freqtrade.resolvers import StrategyResolver
|
from freqtrade.resolvers import StrategyResolver
|
||||||
|
from freqtrade.strategy.strategy_wrapper import strategy_safe_wrapper
|
||||||
from tests.conftest import get_patched_exchange, log_has, log_has_re
|
from tests.conftest import get_patched_exchange, log_has, log_has_re
|
||||||
|
|
||||||
from .strats.default_strategy import DefaultStrategy
|
from .strats.default_strategy import DefaultStrategy
|
||||||
@ -323,3 +326,38 @@ def test_is_pair_locked(default_conf):
|
|||||||
pair = 'ETH/BTC'
|
pair = 'ETH/BTC'
|
||||||
strategy.unlock_pair(pair)
|
strategy.unlock_pair(pair)
|
||||||
assert not strategy.is_pair_locked(pair)
|
assert not strategy.is_pair_locked(pair)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('error', [
|
||||||
|
ValueError, KeyError, Exception,
|
||||||
|
])
|
||||||
|
def test_strategy_safe_wrapper_error(caplog, error):
|
||||||
|
def failing_method():
|
||||||
|
raise error('This is an error.')
|
||||||
|
|
||||||
|
def working_method(argumentpassedin):
|
||||||
|
return argumentpassedin
|
||||||
|
|
||||||
|
with pytest.raises(StrategyError, match=r'This is an error.'):
|
||||||
|
strategy_safe_wrapper(failing_method, message='DeadBeef')()
|
||||||
|
|
||||||
|
assert log_has_re(r'DeadBeef.*', caplog)
|
||||||
|
ret = strategy_safe_wrapper(failing_method, message='DeadBeef', default_retval=True)()
|
||||||
|
|
||||||
|
assert isinstance(ret, bool)
|
||||||
|
assert ret
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('value', [
|
||||||
|
1, 22, 55, True, False, {'a': 1, 'b': '112'},
|
||||||
|
[1, 2, 3, 4], (4, 2, 3, 6)
|
||||||
|
])
|
||||||
|
def test_strategy_safe_wrapper(value):
|
||||||
|
|
||||||
|
def working_method(argumentpassedin):
|
||||||
|
return argumentpassedin
|
||||||
|
|
||||||
|
ret = strategy_safe_wrapper(working_method, message='DeadBeef')(value)
|
||||||
|
|
||||||
|
assert type(ret) == type(value)
|
||||||
|
assert ret == value
|
||||||
|
Loading…
Reference in New Issue
Block a user