]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git/blobdiff - test.py
Add processors
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git] / test.py
diff --git a/test.py b/test.py
index 141c9e062d9cd6ea9a7ecfdb98bcdf3bdef93862..235f6189008ae7bf67cbf5c17600c153d14db618 100644 (file)
--- a/test.py
+++ b/test.py
@@ -45,6 +45,87 @@ class WebMockTestCase(unittest.TestCase):
         self.wm.stop()
         super(WebMockTestCase, self).tearDown()
 
+@unittest.skipUnless("unit" in limits, "Unit skipped")
+class poloniexETest(unittest.TestCase):
+    def setUp(self):
+        super(poloniexETest, self).setUp()
+        self.wm = requests_mock.Mocker()
+        self.wm.start()
+
+        self.s = market.ccxt.poloniexE()
+
+    def tearDown(self):
+        self.wm.stop()
+        super(poloniexETest, self).tearDown()
+
+    def test_nanoseconds(self):
+        with mock.patch.object(market.ccxt.time, "time") as time:
+            time.return_value = 123456.7890123456
+            self.assertEqual(123456789012345, self.s.nanoseconds())
+
+    def test_nonce(self):
+        with mock.patch.object(market.ccxt.time, "time") as time:
+            time.return_value = 123456.7890123456
+            self.assertEqual(123456789012345, self.s.nonce())
+
+    def test_order_precision(self):
+        self.assertEqual(8, self.s.order_precision("FOO"))
+
+    def test_transfer_balance(self):
+        with self.subTest(success=True),\
+                mock.patch.object(self.s, "privatePostTransferBalance") as t:
+            t.return_value = { "success": 1 }
+            result = self.s.transfer_balance("FOO", 12, "exchange", "margin")
+            t.assert_called_once_with({
+                "currency": "FOO",
+                "amount": 12,
+                "fromAccount": "exchange",
+                "toAccount": "margin",
+                "confirmed": 1
+                })
+            self.assertTrue(result)
+
+        with self.subTest(success=False),\
+                mock.patch.object(self.s, "privatePostTransferBalance") as t:
+            t.return_value = { "success": 0 }
+            self.assertFalse(self.s.transfer_balance("FOO", 12, "exchange", "margin"))
+
+    def test_close_margin_position(self):
+        with mock.patch.object(self.s, "privatePostCloseMarginPosition") as c:
+            self.s.close_margin_position("FOO", "BAR")
+            c.assert_called_with({"currencyPair": "BAR_FOO"})
+
+    def test_tradable_balances(self):
+        with mock.patch.object(self.s, "privatePostReturnTradableBalances") as r:
+            r.return_value = {
+                    "FOO": { "exchange": "12.1234", "margin": "0.0123" },
+                    "BAR": { "exchange": "1", "margin": "0" },
+                    }
+            balances = self.s.tradable_balances()
+            self.assertEqual(["FOO", "BAR"], list(balances.keys()))
+            self.assertEqual(["exchange", "margin"], list(balances["FOO"].keys()))
+            self.assertEqual(D("12.1234"), balances["FOO"]["exchange"])
+            self.assertEqual(["exchange", "margin"], list(balances["BAR"].keys()))
+
+    def test_margin_summary(self):
+        with mock.patch.object(self.s, "privatePostReturnMarginAccountSummary") as r:
+            r.return_value = {
+                    "currentMargin": "1.49680968",
+                    "lendingFees": "0.0000001",
+                    "pl": "0.00008254",
+                    "totalBorrowedValue": "0.00673602",
+                    "totalValue": "0.01000000",
+                    "netValue": "0.01008254",
+                    }
+            expected = {
+                    'current_margin': D('1.49680968'),
+                    'gains': D('0.00008254'),
+                    'lending_fees': D('0.0000001'),
+                    'total': D('0.01000000'),
+                    'total_borrowed': D('0.00673602')
+                    }
+            self.assertEqual(expected, self.s.margin_summary())
+
 @unittest.skipUnless("unit" in limits, "Unit skipped")
 class PortfolioTest(WebMockTestCase):
     def fill_data(self):
@@ -612,6 +693,7 @@ class MarketTest(WebMockTestCase):
             self.assertTrue(ticker["inverted"])
             self.assertIn("original", ticker)
             self.assertEqual(10, ticker["original"]["bid"])
+            self.assertEqual(25, ticker["original"]["average"])
 
             ticker = m.get_ticker("XVG", "XMR")
             self.assertIsNone(ticker)
@@ -640,6 +722,7 @@ class MarketTest(WebMockTestCase):
             self.assertTrue(ticker["inverted"])
             self.assertIn("original", ticker)
             self.assertEqual(10, ticker["original"]["bid"])
+            self.assertEqual(25, ticker["original"]["average"])
 
             ticker = m.get_ticker("XVG", "XMR")
             self.assertIsNone(ticker)
@@ -2792,9 +2875,9 @@ class HelperTest(WebMockTestCase):
             self.assertRegex(stdout_mock.getvalue(), "impossible to store report file: FileNotFoundError;")
 
     @mock.patch("helper.process_sell_all__1_all_sell")
-    @mock.patch("helper.process_sell_all__2_all_buy")
-    @mock.patch("portfolio.Portfolio.wait_for_recent")
-    def test_main_process_market(self, wait, buy, sell):
+    @mock.patch("helper.process_sell_all__2_wait")
+    @mock.patch("helper.process_sell_all__3_all_buy")
+    def test_main_process_market(self, buy, wait, sell):
         with self.subTest(before=False, after=False):
             helper.main_process_market("user", None)
             
@@ -2837,7 +2920,7 @@ class HelperTest(WebMockTestCase):
         sell.reset_mock()
         with self.subTest(action="print_balances"),\
                 mock.patch("helper.print_balances") as print_balances:
-            helper.main_process_market("user", "print_balances")
+            helper.main_process_market("user", ["print_balances"])
 
             buy.assert_not_called()
             wait.assert_not_called()
@@ -2845,17 +2928,19 @@ class HelperTest(WebMockTestCase):
             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")
+                mock.patch("helper.print_orders") as print_orders,\
+                mock.patch("helper.print_balances") as print_balances:
+            helper.main_process_market("user", ["print_orders", "print_balances"])
 
             buy.assert_not_called()
             wait.assert_not_called()
             sell.assert_not_called()
             print_orders.assert_called_once_with("user")
+            print_balances.assert_called_once_with("user")
 
         with self.subTest(action="unknown"),\
                 self.assertRaises(NotImplementedError):
-            helper.main_process_market("user", "unknown")
+            helper.main_process_market("user", ["unknown"])
 
     @mock.patch.object(helper, "psycopg2")
     def test_fetch_markets(self, psycopg2):
@@ -3032,12 +3117,22 @@ class HelperTest(WebMockTestCase):
             mock.call("process_sell_all__1_all_sell_end")
             ])
 
-    def test_process_sell_all__2_all_buy(self):
-        helper.process_sell_all__2_all_buy(self.m)
+    @mock.patch("portfolio.Portfolio.wait_for_recent")
+    def test_process_sell_all__2_wait(self, wait):
+        helper.process_sell_all__2_wait(self.m)
+
+        wait.assert_called_once_with(self.m)
+        self.m.report.log_stage.assert_has_calls([
+            mock.call("process_sell_all__2_wait_begin"),
+            mock.call("process_sell_all__2_wait_end")
+            ])
+
+    def test_process_sell_all__3_all_buy(self):
+        helper.process_sell_all__3_all_buy(self.m)
 
         self.m.balances.fetch_balances.assert_has_calls([
-            mock.call(tag="process_sell_all__2_all_buy_begin"),
-            mock.call(tag="process_sell_all__2_all_buy_end"),
+            mock.call(tag="process_sell_all__3_all_buy_begin"),
+            mock.call(tag="process_sell_all__3_all_buy_end"),
             ])
         self.m.prepare_trades.assert_called_with(base_currency="BTC",
                 liquidity="medium")
@@ -3046,8 +3141,8 @@ class HelperTest(WebMockTestCase):
         self.m.trades.run_orders.assert_called()
         self.m.follow_orders.assert_called()
         self.m.report.log_stage.assert_has_calls([
-            mock.call("process_sell_all__2_all_buy_begin"),
-            mock.call("process_sell_all__2_all_buy_end")
+            mock.call("process_sell_all__3_all_buy_begin"),
+            mock.call("process_sell_all__3_all_buy_end")
             ])
 
 @unittest.skipUnless("acceptance" in limits, "Acceptance skipped")