3
3
from freqtrade .exceptions import StrategyError
4
4
from freqtrade .persistence import Trade
5
5
from freqtrade .strategy .strategy_wrapper import strategy_safe_wrapper
6
+ from freqtrade .util .datetime_helpers import dt_now
6
7
from tests .conftest import create_mock_trades , log_has_re
7
8
9
+ from .strats .strategy_test_v3 import StrategyTestV3
10
+
8
11
9
12
@pytest .mark .parametrize (
10
13
"error" ,
@@ -47,9 +50,14 @@ def working_method(argumentpassedin):
47
50
48
51
49
52
@pytest .mark .usefixtures ("init_persistence" )
50
- def test_strategy_safe_wrapper_trade_copy (fee ):
53
+ def test_strategy_safe_wrapper_trade_copy (fee , mocker ):
51
54
create_mock_trades (fee )
55
+ import freqtrade .strategy .strategy_wrapper as swm
56
+
57
+ deepcopy_mock = mocker .spy (swm , "deepcopy" )
58
+
52
59
trade_ = Trade .get_open_trades ()[0 ]
60
+ strat = StrategyTestV3 (config = {})
53
61
54
62
def working_method (trade ):
55
63
assert len (trade .orders ) > 0
@@ -59,11 +67,27 @@ def working_method(trade):
59
67
assert id (trade_ ) != id (trade )
60
68
return trade
61
69
70
+ strat .working_method = working_method
71
+
62
72
# Don't assert anything before strategy_wrapper.
63
73
# 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_ )
65
75
assert isinstance (ret , Trade )
66
76
assert id (trade_ ) != id (ret )
67
77
# Did not modify the original order
68
78
assert len (trade_ .orders ) > 0
69
79
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