]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git/blobdiff - test.py
Fix dust amount error
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git] / test.py
diff --git a/test.py b/test.py
index a9cae94e58265bcf9d1dcde67b53598d0547b35d..52d737d7528f773261242e0830146415ddb1f487 100644 (file)
--- a/test.py
+++ b/test.py
@@ -571,7 +571,7 @@ class MarketTest(WebMockTestCase):
             ccxt.poloniexE.return_value = self.ccxt
             self.ccxt.session.request.return_value = "response"
 
-            m = market.Market.from_config("config")
+            m = market.Market.from_config({"key": "key", "secred": "secret"})
 
             self.assertEqual(self.ccxt, m.ccxt)
 
@@ -580,7 +580,7 @@ class MarketTest(WebMockTestCase):
             m.report.log_http_request.assert_called_with('GET', 'URL', 'data',
                     'headers', 'response')
 
-        m = market.Market.from_config("config", debug=True)
+        m = market.Market.from_config({"key": "key", "secred": "secret"}, debug=True)
         self.assertEqual(True, m.debug)
 
     def test_get_ticker(self):
@@ -2080,6 +2080,18 @@ class OrderTest(WebMockTestCase):
             self.assertEqual("closed", order.status)
             mark_finished_order.assert_called_once()
 
+        self.m.ccxt.create_order.reset_mock()
+        with self.subTest(dust_amount_exception=True),\
+                mock.patch.object(portfolio.Order, "mark_finished_order") as mark_finished_order:
+            order = portfolio.Order("buy", portfolio.Amount("ETH", 0.001),
+                    D("0.1"), "BTC", "long", self.m, "trade")
+            self.m.ccxt.create_order.side_effect = portfolio.InvalidOrder
+            order.run()
+            self.m.ccxt.create_order.assert_called_once()
+            self.assertEqual(0, len(order.results))
+            self.assertEqual("closed", order.status)
+            mark_finished_order.assert_called_once()
+
 
 @unittest.skipUnless("unit" in limits, "Unit skipped")
 class MouvementTest(WebMockTestCase):
@@ -2180,8 +2192,7 @@ class ReportStoreTest(WebMockTestCase):
         report_store.logs.append({"date": portfolio.datetime(2018, 2, 24)})
         self.assertEqual('[{"foo": "bar"}, {"date": "2018-02-24T00:00:00"}]', report_store.to_json())
         report_store.logs.append({"amount": portfolio.Amount("BTC", 1)})
-        with self.assertRaises(TypeError):
-            report_store.to_json()
+        self.assertEqual('[{"foo": "bar"}, {"date": "2018-02-24T00:00:00"}, {"amount": "1.00000000 BTC"}]', report_store.to_json())
 
     @mock.patch.object(market.ReportStore, "print_log")
     @mock.patch.object(market.ReportStore, "add_log")
@@ -2563,7 +2574,7 @@ class HelperTest(WebMockTestCase):
     @mock.patch("portfolio.Portfolio.wait_for_recent")
     def test_main_process_market(self, wait, buy, sell):
         with self.subTest(before=False, after=False):
-            helper.main_process_market("user")
+            helper.main_process_market("user", None)
             
             wait.assert_not_called()
             buy.assert_not_called()
@@ -2573,7 +2584,7 @@ class HelperTest(WebMockTestCase):
         wait.reset_mock()
         sell.reset_mock()
         with self.subTest(before=True, after=False):
-            helper.main_process_market("user", before=True)
+            helper.main_process_market("user", None, before=True)
             
             wait.assert_not_called()
             buy.assert_not_called()
@@ -2583,7 +2594,7 @@ class HelperTest(WebMockTestCase):
         wait.reset_mock()
         sell.reset_mock()
         with self.subTest(before=False, after=True):
-            helper.main_process_market("user", after=True)
+            helper.main_process_market("user", None, after=True)
             
             wait.assert_called_once_with("user")
             buy.assert_called_once_with("user")
@@ -2593,12 +2604,37 @@ class HelperTest(WebMockTestCase):
         wait.reset_mock()
         sell.reset_mock()
         with self.subTest(before=True, after=True):
-            helper.main_process_market("user", before=True, after=True)
+            helper.main_process_market("user", None, before=True, after=True)
             
             wait.assert_called_once_with("user")
             buy.assert_called_once_with("user")
             sell.assert_called_once_with("user")
 
+        buy.reset_mock()
+        wait.reset_mock()
+        sell.reset_mock()
+        with self.subTest(action="print_balances"),\
+                mock.patch("helper.print_balances") as print_balances:
+            helper.main_process_market("user", "print_balances")
+
+            buy.assert_not_called()
+            wait.assert_not_called()
+            sell.assert_not_called()
+            print_balances.assert_called_once_with("user")
+
+        with self.subTest(action="print_orders"),\
+                mock.patch("helper.print_orders") as print_orders:
+            helper.main_process_market("user", "print_orders")
+
+            buy.assert_not_called()
+            wait.assert_not_called()
+            sell.assert_not_called()
+            print_orders.assert_called_once_with("user")
+
+        with self.subTest(action="unknown"),\
+                self.assertRaises(NotImplementedError):
+            helper.main_process_market("user", "unknown")
+
     @mock.patch.object(helper, "psycopg2")
     def test_fetch_markets(self, psycopg2):
         connect_mock = mock.Mock()
@@ -2608,12 +2644,23 @@ class HelperTest(WebMockTestCase):
         connect_mock.cursor.return_value = cursor_mock
         psycopg2.connect.return_value = connect_mock
 
-        rows = list(helper.main_fetch_markets({"foo": "bar"}))
+        with self.subTest(user=None):
+            rows = list(helper.main_fetch_markets({"foo": "bar"}, None))
+
+            psycopg2.connect.assert_called_once_with(foo="bar")
+            cursor_mock.execute.assert_called_once_with("SELECT config,user_id FROM market_configs")
+
+            self.assertEqual(["row_1", "row_2"], rows)
+
+        psycopg2.connect.reset_mock()
+        cursor_mock.execute.reset_mock()
+        with self.subTest(user=1):
+            rows = list(helper.main_fetch_markets({"foo": "bar"}, 1))
 
-        psycopg2.connect.assert_called_once_with(foo="bar")
-        cursor_mock.execute.assert_called_once_with("SELECT config,user_id FROM market_configs")
+            psycopg2.connect.assert_called_once_with(foo="bar")
+            cursor_mock.execute.assert_called_once_with("SELECT config,user_id FROM market_configs WHERE user_id = %s", 1)
 
-        self.assertEqual(["row_1", "row_2"], rows)
+            self.assertEqual(["row_1", "row_2"], rows)
 
     @mock.patch.object(helper.sys, "exit")
     def test_main_parse_args(self, exit):