|
|
|
|
@ -23,6 +23,7 @@ from freqtrade.exceptions import OperationalException
|
|
|
|
|
from freqtrade.freqtradebot import FreqtradeBot
|
|
|
|
|
from freqtrade.loggers import setup_logging
|
|
|
|
|
from freqtrade.persistence import PairLocks, Trade
|
|
|
|
|
from freqtrade.persistence.models import Order
|
|
|
|
|
from freqtrade.rpc import RPC
|
|
|
|
|
from freqtrade.rpc.rpc import RPCException
|
|
|
|
|
from freqtrade.rpc.telegram import Telegram, authorized_only
|
|
|
|
|
@ -218,6 +219,52 @@ def test_telegram_status(default_conf, update, mocker) -> None:
|
|
|
|
|
assert status_table.call_count == 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@pytest.mark.usefixtures("init_persistence")
|
|
|
|
|
def test_telegram_status_multi_entry(default_conf, update, mocker, fee) -> None:
|
|
|
|
|
update.message.chat.id = "123"
|
|
|
|
|
default_conf['telegram']['enabled'] = False
|
|
|
|
|
default_conf['telegram']['chat_id'] = "123"
|
|
|
|
|
default_conf['position_adjustment_enable'] = True
|
|
|
|
|
mocker.patch.multiple(
|
|
|
|
|
'freqtrade.exchange.Exchange',
|
|
|
|
|
fetch_order=MagicMock(return_value=None),
|
|
|
|
|
get_rate=MagicMock(return_value=0.22),
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
telegram, _, msg_mock = get_telegram_testobject(mocker, default_conf)
|
|
|
|
|
|
|
|
|
|
create_mock_trades(fee)
|
|
|
|
|
trades = Trade.get_open_trades()
|
|
|
|
|
trade = trades[0]
|
|
|
|
|
trade.orders.append(Order(
|
|
|
|
|
order_id='5412vbb',
|
|
|
|
|
ft_order_side='buy',
|
|
|
|
|
ft_pair=trade.pair,
|
|
|
|
|
ft_is_open=False,
|
|
|
|
|
status="closed",
|
|
|
|
|
symbol=trade.pair,
|
|
|
|
|
order_type="market",
|
|
|
|
|
side="buy",
|
|
|
|
|
price=trade.open_rate * 0.95,
|
|
|
|
|
average=trade.open_rate * 0.95,
|
|
|
|
|
filled=trade.amount,
|
|
|
|
|
remaining=0,
|
|
|
|
|
cost=trade.amount,
|
|
|
|
|
order_date=trade.open_date,
|
|
|
|
|
order_filled_date=trade.open_date,
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
trade.recalc_trade_from_orders()
|
|
|
|
|
Trade.commit()
|
|
|
|
|
|
|
|
|
|
telegram._status(update=update, context=MagicMock())
|
|
|
|
|
assert msg_mock.call_count == 4
|
|
|
|
|
msg = msg_mock.call_args_list[0][0][0]
|
|
|
|
|
assert re.search(r'Number of Buy.*2', msg)
|
|
|
|
|
assert re.search(r'Average Buy Price', msg)
|
|
|
|
|
assert re.search(r'Order filled at', msg)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_status_handle(default_conf, update, ticker, fee, mocker) -> None:
|
|
|
|
|
default_conf['max_open_trades'] = 3
|
|
|
|
|
mocker.patch.multiple(
|
|
|
|
|
|