]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git/blobdiff - test.py
Dynamically use process methods
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git] / test.py
diff --git a/test.py b/test.py
index 141c9e062d9cd6ea9a7ecfdb98bcdf3bdef93862..14b5559a354fb173e26f3966c31b600b1c1eeaae 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)
@@ -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):