Skip to content

Commit 471df70

Browse files
committed
test: add test for improved safe_wrapper behavior
1 parent 90b1e15 commit 471df70

File tree

1 file changed

+26
-2
lines changed

1 file changed

+26
-2
lines changed

tests/strategy/test_strategy_safe_wrapper.py

+26-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
from freqtrade.exceptions import StrategyError
44
from freqtrade.persistence import Trade
55
from freqtrade.strategy.strategy_wrapper import strategy_safe_wrapper
6+
from freqtrade.util.datetime_helpers import dt_now
67
from tests.conftest import create_mock_trades, log_has_re
78

9+
from .strats.strategy_test_v3 import StrategyTestV3
10+
811

912
@pytest.mark.parametrize(
1013
"error",
@@ -47,9 +50,14 @@ def working_method(argumentpassedin):
4750

4851

4952
@pytest.mark.usefixtures("init_persistence")
50-
def test_strategy_safe_wrapper_trade_copy(fee):
53+
def test_strategy_safe_wrapper_trade_copy(fee, mocker):
5154
create_mock_trades(fee)
55+
import freqtrade.strategy.strategy_wrapper as swm
56+
57+
deepcopy_mock = mocker.spy(swm, "deepcopy")
58+
5259
trade_ = Trade.get_open_trades()[0]
60+
strat = StrategyTestV3(config={})
5361

5462
def working_method(trade):
5563
assert len(trade.orders) > 0
@@ -59,11 +67,27 @@ def working_method(trade):
5967
assert id(trade_) != id(trade)
6068
return trade
6169

70+
strat.working_method = working_method
71+
6272
# Don't assert anything before strategy_wrapper.
6373
# This ensures that relationship loading works correctly.
64-
ret = strategy_safe_wrapper(working_method, message="DeadBeef")(trade=trade_)
74+
ret = strategy_safe_wrapper(strat.working_method, message="DeadBeef")(trade=trade_)
6575
assert isinstance(ret, Trade)
6676
assert id(trade_) != id(ret)
6777
# Did not modify the original order
6878
assert len(trade_.orders) > 0
6979
assert len(ret.orders) == 0
80+
assert deepcopy_mock.call_count == 1
81+
deepcopy_mock.reset_mock()
82+
83+
# Call with non-overridden method - shouldn't deep-copy the trade
84+
ret = strategy_safe_wrapper(strat.custom_entry_price, message="DeadBeef")(
85+
pair="ETH/USDT",
86+
trade=trade_,
87+
current_time=dt_now(),
88+
proposed_rate=0.5,
89+
entry_tag="",
90+
side="long",
91+
)
92+
93+
assert deepcopy_mock.call_count == 0

0 commit comments

Comments
 (0)