From caa6e22e5312d401f4d3f9eaf540fa18a8b55daf Mon Sep 17 00:00:00 2001 From: Sebastien Moreau Date: Sun, 5 Nov 2017 10:26:03 -0500 Subject: [PATCH] Adds unit tests --- freqtrade/rpc/telegram.py | 2 +- freqtrade/tests/test_telegram.py | 75 +++++++++++++++++++++++++++++++- 2 files changed, 74 insertions(+), 3 deletions(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index dc13726f7..4497f68eb 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -366,7 +366,7 @@ def _performance(bot: Bot, update: Update) -> None: @authorized_only -def _count(bot: Bot) -> None: +def _count(bot: Bot, update: Update) -> None: """ Handler for /count. Returns the number of trades running diff --git a/freqtrade/tests/test_telegram.py b/freqtrade/tests/test_telegram.py index fb9a618a0..74924d5c8 100644 --- a/freqtrade/tests/test_telegram.py +++ b/freqtrade/tests/test_telegram.py @@ -1,4 +1,6 @@ # pragma pylint: disable=missing-docstring +import logging +import re from datetime import datetime from unittest.mock import MagicMock @@ -9,7 +11,12 @@ from telegram import Bot, Update, Message, Chat from freqtrade.main import init, create_trade from freqtrade.misc import update_state, State, get_state, CONF_SCHEMA from freqtrade.persistence import Trade -from freqtrade.rpc.telegram import _status, _profit, _forcesell, _performance, _start, _stop +from freqtrade.rpc.telegram import _status, _status_table, _profit, _forcesell, _performance, \ + _count, _start, _stop + +logging.getLogger('requests.packages.urllib3').setLevel(logging.INFO) +logging.getLogger('telegram').setLevel(logging.INFO) +logger = logging.getLogger(__name__) @pytest.fixture @@ -33,7 +40,8 @@ def conf(): "key": "key", "secret": "secret", "pair_whitelist": [ - "BTC_ETH" + "BTC_ETH", + "BTC_ETC" ] }, "telegram": { @@ -82,6 +90,39 @@ def test_status_handle(conf, update, mocker): assert msg_mock.call_count == 2 assert '[BTC_ETH]' in msg_mock.call_args_list[-1][0][0] + +def test_status_table_handle(conf, update, mocker): + mocker.patch.dict('freqtrade.main._CONF', conf) + mocker.patch('freqtrade.main.get_buy_signal', side_effect=lambda _: True) + msg_mock = MagicMock() + mocker.patch.multiple('freqtrade.main.telegram', _CONF=conf, init=MagicMock(), send_msg=msg_mock) + mocker.patch.multiple('freqtrade.main.exchange', + validate_pairs=MagicMock(), + get_ticker=MagicMock(return_value={ + 'bid': 0.07256061, + 'ask': 0.072661, + 'last': 0.07256061 + }), + buy=MagicMock(return_value='mocked_order_id')) + init(conf, 'sqlite://') + + # Create some test data + trade = create_trade(15.0) + assert trade + Trade.session.add(trade) + Trade.session.flush() + + _status_table(bot=MagicBot(), update=update) + + text = re.sub('<\/?pre>', '', msg_mock.call_args_list[-1][0][0]) + line = text.split("\n") + fields = re.sub('[ ]+', ' ', line[2].strip()).split(' ') + + assert int(fields[0]) == 1 + assert fields[1] == 'BTC_ETH' + assert msg_mock.call_count == 2 + + def test_profit_handle(conf, update, mocker): mocker.patch.dict('freqtrade.main._CONF', conf) mocker.patch('freqtrade.main.get_buy_signal', side_effect=lambda _: True) @@ -171,6 +212,36 @@ def test_performance_handle(conf, update, mocker): assert 'Performance' in msg_mock.call_args_list[-1][0][0] assert 'BTC_ETH 100.00%' in msg_mock.call_args_list[-1][0][0] + +def test_count_handle(conf, update, mocker): + mocker.patch.dict('freqtrade.main._CONF', conf) + mocker.patch('freqtrade.main.get_buy_signal', side_effect=lambda _: True) + msg_mock = MagicMock() + mocker.patch.multiple('freqtrade.main.telegram', _CONF=conf, init=MagicMock(), send_msg=msg_mock) + mocker.patch.multiple('freqtrade.main.exchange', + validate_pairs=MagicMock(), + get_ticker=MagicMock(return_value={ + 'bid': 0.07256061, + 'ask': 0.072661, + 'last': 0.07256061 + }), + buy=MagicMock(return_value='mocked_order_id')) + init(conf, 'sqlite://') + + # Create some test data + trade = create_trade(15.0) + trade2 = create_trade(15.0) + assert trade + assert trade2 + Trade.session.add(trade) + Trade.session.add(trade2) + Trade.session.flush() + + _count(bot=MagicBot(), update=update) + line = msg_mock.call_args_list[-1][0][0].split("\n") + assert line[2] == '{}/{}'.format(2, conf['max_open_trades']) + + def test_start_handle(conf, update, mocker): mocker.patch.dict('freqtrade.main._CONF', conf) msg_mock = MagicMock()