]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git/blobdiff - test.py
Fixes after night run
[perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git] / test.py
diff --git a/test.py b/test.py
index 0bfa2b7b6140d1c3f7e9320441347afce7cf95af..a45010b7c2922929866ad82808cfeebc2bce88e7 100644 (file)
--- a/test.py
+++ b/test.py
@@ -1746,25 +1746,46 @@ class TradeTest(WebMockTestCase):
         trade.orders.append(order_mock1)
         trade.orders.append(order_mock2)
 
-        trade.print_with_order()
+        with mock.patch.object(trade, "filled_amount") as filled:
+            filled.return_value = portfolio.Amount("BTC", "0.1")
 
-        self.m.report.print_log.assert_called()
-        calls = self.m.report.print_log.mock_calls
-        self.assertEqual("Trade(0.50000000 BTC [10.00000000 ETH] -> 1.00000000 BTC in ETH, acquire)", str(calls[0][1][0]))
-        self.assertEqual("\tMock 1", str(calls[1][1][0]))
-        self.assertEqual("\tMock 2", str(calls[2][1][0]))
-        self.assertEqual("\t\tMouvement 1", str(calls[3][1][0]))
-        self.assertEqual("\t\tMouvement 2", str(calls[4][1][0]))
+            trade.print_with_order()
+
+            self.m.report.print_log.assert_called()
+            calls = self.m.report.print_log.mock_calls
+            self.assertEqual("Trade(0.50000000 BTC [10.00000000 ETH] -> 1.00000000 BTC in ETH, acquire)", str(calls[0][1][0]))
+            self.assertEqual("\tMock 1", str(calls[1][1][0]))
+            self.assertEqual("\tMock 2", str(calls[2][1][0]))
+            self.assertEqual("\t\tMouvement 1", str(calls[3][1][0]))
+            self.assertEqual("\t\tMouvement 2", str(calls[4][1][0]))
+
+            self.m.report.print_log.reset_mock()
+
+            filled.return_value = portfolio.Amount("BTC", "0.5")
+            trade.print_with_order()
+            calls = self.m.report.print_log.mock_calls
+            self.assertEqual("Trade(0.50000000 BTC [10.00000000 ETH] -> 1.00000000 BTC in ETH, acquire ✔)", str(calls[0][1][0]))
+
+            self.m.report.print_log.reset_mock()
+
+            filled.return_value = portfolio.Amount("BTC", "0.1")
+            trade.closed = True
+            trade.print_with_order()
+            calls = self.m.report.print_log.mock_calls
+            self.assertEqual("Trade(0.50000000 BTC [10.00000000 ETH] -> 1.00000000 BTC in ETH, acquire ❌)", str(calls[0][1][0]))
 
     def test_close(self):
         value_from = portfolio.Amount("BTC", "0.5")
         value_from.linked_to = portfolio.Amount("ETH", "10.0")
         value_to = portfolio.Amount("BTC", "1.0")
         trade = portfolio.Trade(value_from, value_to, "ETH", self.m)
+        order1 = mock.Mock()
+        trade.orders.append(order1)
 
         trade.close()
 
         self.assertEqual(True, trade.closed)
+        order1.cancel.assert_called_once_with()
 
     def test_pending(self):
         value_from = portfolio.Amount("BTC", "0.5")
@@ -1888,27 +1909,57 @@ class OrderTest(WebMockTestCase):
 
     @mock.patch.object(portfolio.Order, "fetch")
     def test_cancel(self, fetch):
-        self.m.debug = True
-        order = portfolio.Order("buy", portfolio.Amount("ETH", 10),
-                D("0.1"), "BTC", "long", self.m, "trade")
-        order.status = "open"
+        with self.subTest(debug=True):
+            self.m.debug = True
+            order = portfolio.Order("buy", portfolio.Amount("ETH", 10),
+                    D("0.1"), "BTC", "long", self.m, "trade")
+            order.status = "open"
 
-        order.cancel()
-        self.m.ccxt.cancel_order.assert_not_called()
-        self.m.report.log_debug_action.assert_called_once()
-        self.m.report.log_debug_action.reset_mock()
-        self.assertEqual("canceled", order.status)
+            order.cancel()
+            self.m.ccxt.cancel_order.assert_not_called()
+            self.m.report.log_debug_action.assert_called_once()
+            self.m.report.log_debug_action.reset_mock()
+            self.assertEqual("canceled", order.status)
 
-        self.m.debug = False
-        order = portfolio.Order("buy", portfolio.Amount("ETH", 10),
-                D("0.1"), "BTC", "long", self.m, "trade")
-        order.status = "open"
-        order.id = 42
+        with self.subTest(desc="Nominal case"):
+            self.m.debug = False
+            order = portfolio.Order("buy", portfolio.Amount("ETH", 10),
+                    D("0.1"), "BTC", "long", self.m, "trade")
+            order.status = "open"
+            order.id = 42
 
-        order.cancel()
-        self.m.ccxt.cancel_order.assert_called_with(42)
-        fetch.assert_called_once_with()
-        self.m.report.log_debug_action.assert_not_called()
+            order.cancel()
+            self.m.ccxt.cancel_order.assert_called_with(42)
+            fetch.assert_called_once_with()
+            self.m.report.log_debug_action.assert_not_called()
+
+        with self.subTest(exception=True):
+            self.m.ccxt.cancel_order.side_effect = portfolio.OrderNotFound
+            order = portfolio.Order("buy", portfolio.Amount("ETH", 10),
+                    D("0.1"), "BTC", "long", self.m, "trade")
+            order.status = "open"
+            order.id = 42
+            order.cancel()
+            self.m.ccxt.cancel_order.assert_called_with(42)
+            self.m.report.log_error.assert_called_once()
+
+        self.m.reset_mock()
+        with self.subTest(id=None):
+            self.m.ccxt.cancel_order.side_effect = portfolio.OrderNotFound
+            order = portfolio.Order("buy", portfolio.Amount("ETH", 10),
+                    D("0.1"), "BTC", "long", self.m, "trade")
+            order.status = "open"
+            order.cancel()
+            self.m.ccxt.cancel_order.assert_not_called()
+
+        self.m.reset_mock()
+        with self.subTest(open=False):
+            self.m.ccxt.cancel_order.side_effect = portfolio.OrderNotFound
+            order = portfolio.Order("buy", portfolio.Amount("ETH", 10),
+                    D("0.1"), "BTC", "long", self.m, "trade")
+            order.status = "closed"
+            order.cancel()
+            self.m.ccxt.cancel_order.assert_not_called()
 
     def test_dust_amount_remaining(self):
         order = portfolio.Order("buy", portfolio.Amount("ETH", 10),
@@ -2050,7 +2101,7 @@ class OrderTest(WebMockTestCase):
                     }
             order.fetch()
 
-            self.m.ccxt.fetch_order.assert_called_once_with(45, symbol="ETH")
+            self.m.ccxt.fetch_order.assert_called_once_with(45)
             fetch_mouvements.assert_called_once()
             self.assertEqual("foo", order.status)
             self.assertEqual("timestamp", order.timestamp)