mirror of
https://github.com/freqtrade/freqtrade.git
synced 2025-12-03 02:23:05 +00:00
70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
import pytest
|
|
|
|
from freqtrade.exceptions import StrategyError
|
|
from freqtrade.persistence import Trade
|
|
from freqtrade.strategy.strategy_wrapper import strategy_safe_wrapper
|
|
from tests.conftest import create_mock_trades, log_has_re
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"error",
|
|
[
|
|
ValueError,
|
|
KeyError,
|
|
Exception,
|
|
],
|
|
)
|
|
def test_strategy_safe_wrapper_error(caplog, error):
|
|
def failing_method():
|
|
raise error("This is an error.")
|
|
|
|
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
|
|
|
|
caplog.clear()
|
|
# Test suppressing error
|
|
ret = strategy_safe_wrapper(failing_method, message="DeadBeef", supress_error=True)()
|
|
assert log_has_re(r"DeadBeef.*", caplog)
|
|
|
|
|
|
@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 isinstance(ret, type(value))
|
|
assert ret == value
|
|
|
|
|
|
@pytest.mark.usefixtures("init_persistence")
|
|
def test_strategy_safe_wrapper_trade_copy(fee):
|
|
create_mock_trades(fee)
|
|
trade_ = Trade.get_open_trades()[0]
|
|
|
|
def working_method(trade):
|
|
assert len(trade.orders) > 0
|
|
assert trade.orders
|
|
trade.orders = []
|
|
assert len(trade.orders) == 0
|
|
assert id(trade_) != id(trade)
|
|
return trade
|
|
|
|
# Don't assert anything before strategy_wrapper.
|
|
# This ensures that relationship loading works correctly.
|
|
ret = strategy_safe_wrapper(working_method, message="DeadBeef")(trade=trade_)
|
|
assert isinstance(ret, Trade)
|
|
assert id(trade_) != id(ret)
|
|
# Did not modify the original order
|
|
assert len(trade_.orders) > 0
|
|
assert len(ret.orders) == 0
|