From c737041acb294bbdc51b9ade5b61bce9343c88d4 Mon Sep 17 00:00:00 2001 From: gcarq Date: Fri, 8 Sep 2017 19:25:12 +0200 Subject: [PATCH] add some tests for rpc.teleram --- test/test_main.py | 6 +- test/test_persistence.py | 2 +- test/test_telegram.py | 118 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 test/test_telegram.py diff --git a/test/test_main.py b/test/test_main.py index 99094f72b..8bd06c316 100644 --- a/test/test_main.py +++ b/test/test_main.py @@ -99,14 +99,12 @@ class TestMain(unittest.TestCase): @classmethod def setUpClass(cls): - validate(cls.conf, conf_schema) - - @classmethod - def tearDownClass(cls): try: os.remove('./tradesv2.dry_run.sqlite') except FileNotFoundError: pass + validate(cls.conf, conf_schema) + if __name__ == '__main__': unittest.main() diff --git a/test/test_persistence.py b/test/test_persistence.py index 25bdfd4e1..65af0ad8a 100644 --- a/test/test_persistence.py +++ b/test/test_persistence.py @@ -1,5 +1,5 @@ import unittest -from unittest.mock import patch, Mock +from unittest.mock import patch from exchange import Exchange from persistence import Trade diff --git a/test/test_telegram.py b/test/test_telegram.py new file mode 100644 index 000000000..ceb9e3e7f --- /dev/null +++ b/test/test_telegram.py @@ -0,0 +1,118 @@ +import unittest +from datetime import datetime +from unittest.mock import patch, MagicMock + +import os +from jsonschema import validate +from telegram import Bot, Update, Message, Chat + +import exchange +from main import init, create_trade +from misc import conf_schema +from persistence import Trade +from rpc.telegram import _status, _profit + + +class MagicBot(MagicMock, Bot): + pass + + +class TestTelegram(unittest.TestCase): + + conf = { + "max_open_trades": 3, + "stake_currency": "BTC", + "stake_amount": 0.05, + "dry_run": True, + "minimal_roi": { + "2880": 0.005, + "720": 0.01, + "0": 0.02 + }, + "poloniex": { + "enabled": False, + "key": "key", + "secret": "secret", + "pair_whitelist": [] + }, + "bittrex": { + "enabled": True, + "key": "key", + "secret": "secret", + "pair_whitelist": [ + "BTC_ETH" + ] + }, + "telegram": { + "enabled": True, + "token": "token", + "chat_id": "0" + } + } + + def test_1_status_handle(self): + with patch.dict('main._conf', self.conf): + with patch('main.get_buy_signal', side_effect=lambda _: True): + msg_mock = MagicMock() + with patch.multiple('main.telegram', _conf=self.conf, init=MagicMock(), send_msg=msg_mock): + with patch.multiple('main.exchange', + get_ticker=MagicMock(return_value={ + 'bid': 0.07256061, + 'ask': 0.072661, + 'last': 0.07256061 + }), + buy=MagicMock(return_value='mocked_order_id')): + init(self.conf) + + # Create some test data + trade = create_trade(15.0, exchange.Exchange.BITTREX) + Trade.session.add(trade) + Trade.session.flush() + + _status(bot=MagicBot(), update=self.update) + self.assertEqual(msg_mock.call_count, 2) + self.assertIn('[BTC_ETH]', msg_mock.call_args_list[-1][0][0]) + + def test_2_profit_handle(self): + with patch.dict('main._conf', self.conf): + with patch('main.get_buy_signal', side_effect=lambda _: True): + msg_mock = MagicMock() + with patch.multiple('main.telegram', _conf=self.conf, init=MagicMock(), send_msg=msg_mock): + with patch.multiple('main.exchange', + get_ticker=MagicMock(return_value={ + 'bid': 0.07256061, + 'ask': 0.072661, + 'last': 0.07256061 + }), + buy=MagicMock(return_value='mocked_order_id')): + init(self.conf) + + # Create some test data + trade = create_trade(15.0, exchange.Exchange.BITTREX) + trade.close_rate = 0.07256061 + trade.close_profit = 137.4872490056564 + trade.close_date = datetime.utcnow() + trade.open_order_id = None + trade.is_open = False + Trade.session.add(trade) + Trade.session.flush() + + _profit(bot=MagicBot(), update=self.update) + self.assertEqual(msg_mock.call_count, 2) + self.assertIn('(137.49%)', msg_mock.call_args_list[-1][0][0]) + + def setUp(self): + try: + os.remove('./tradesv2.dry_run.sqlite') + except FileNotFoundError: + pass + self.update = Update(0) + self.update.message = Message(0, 0, MagicMock(), Chat(0, 0)) + + @classmethod + def setUpClass(cls): + validate(cls.conf, conf_schema) + + +if __name__ == '__main__': + unittest.main()