diff options
Diffstat (limited to 'test.py')
-rw-r--r-- | test.py | 105 |
1 files changed, 78 insertions, 27 deletions
@@ -1746,25 +1746,46 @@ class TradeTest(WebMockTestCase): | |||
1746 | trade.orders.append(order_mock1) | 1746 | trade.orders.append(order_mock1) |
1747 | trade.orders.append(order_mock2) | 1747 | trade.orders.append(order_mock2) |
1748 | 1748 | ||
1749 | trade.print_with_order() | 1749 | with mock.patch.object(trade, "filled_amount") as filled: |
1750 | filled.return_value = portfolio.Amount("BTC", "0.1") | ||
1750 | 1751 | ||
1751 | self.m.report.print_log.assert_called() | 1752 | trade.print_with_order() |
1752 | calls = self.m.report.print_log.mock_calls | 1753 | |
1753 | self.assertEqual("Trade(0.50000000 BTC [10.00000000 ETH] -> 1.00000000 BTC in ETH, acquire)", str(calls[0][1][0])) | 1754 | self.m.report.print_log.assert_called() |
1754 | self.assertEqual("\tMock 1", str(calls[1][1][0])) | 1755 | calls = self.m.report.print_log.mock_calls |
1755 | self.assertEqual("\tMock 2", str(calls[2][1][0])) | 1756 | self.assertEqual("Trade(0.50000000 BTC [10.00000000 ETH] -> 1.00000000 BTC in ETH, acquire)", str(calls[0][1][0])) |
1756 | self.assertEqual("\t\tMouvement 1", str(calls[3][1][0])) | 1757 | self.assertEqual("\tMock 1", str(calls[1][1][0])) |
1757 | self.assertEqual("\t\tMouvement 2", str(calls[4][1][0])) | 1758 | self.assertEqual("\tMock 2", str(calls[2][1][0])) |
1759 | self.assertEqual("\t\tMouvement 1", str(calls[3][1][0])) | ||
1760 | self.assertEqual("\t\tMouvement 2", str(calls[4][1][0])) | ||
1761 | |||
1762 | self.m.report.print_log.reset_mock() | ||
1763 | |||
1764 | filled.return_value = portfolio.Amount("BTC", "0.5") | ||
1765 | trade.print_with_order() | ||
1766 | calls = self.m.report.print_log.mock_calls | ||
1767 | self.assertEqual("Trade(0.50000000 BTC [10.00000000 ETH] -> 1.00000000 BTC in ETH, acquire ✔)", str(calls[0][1][0])) | ||
1768 | |||
1769 | self.m.report.print_log.reset_mock() | ||
1770 | |||
1771 | filled.return_value = portfolio.Amount("BTC", "0.1") | ||
1772 | trade.closed = True | ||
1773 | trade.print_with_order() | ||
1774 | calls = self.m.report.print_log.mock_calls | ||
1775 | self.assertEqual("Trade(0.50000000 BTC [10.00000000 ETH] -> 1.00000000 BTC in ETH, acquire ❌)", str(calls[0][1][0])) | ||
1758 | 1776 | ||
1759 | def test_close(self): | 1777 | def test_close(self): |
1760 | value_from = portfolio.Amount("BTC", "0.5") | 1778 | value_from = portfolio.Amount("BTC", "0.5") |
1761 | value_from.linked_to = portfolio.Amount("ETH", "10.0") | 1779 | value_from.linked_to = portfolio.Amount("ETH", "10.0") |
1762 | value_to = portfolio.Amount("BTC", "1.0") | 1780 | value_to = portfolio.Amount("BTC", "1.0") |
1763 | trade = portfolio.Trade(value_from, value_to, "ETH", self.m) | 1781 | trade = portfolio.Trade(value_from, value_to, "ETH", self.m) |
1782 | order1 = mock.Mock() | ||
1783 | trade.orders.append(order1) | ||
1764 | 1784 | ||
1765 | trade.close() | 1785 | trade.close() |
1766 | 1786 | ||
1767 | self.assertEqual(True, trade.closed) | 1787 | self.assertEqual(True, trade.closed) |
1788 | order1.cancel.assert_called_once_with() | ||
1768 | 1789 | ||
1769 | def test_pending(self): | 1790 | def test_pending(self): |
1770 | value_from = portfolio.Amount("BTC", "0.5") | 1791 | value_from = portfolio.Amount("BTC", "0.5") |
@@ -1888,27 +1909,57 @@ class OrderTest(WebMockTestCase): | |||
1888 | 1909 | ||
1889 | @mock.patch.object(portfolio.Order, "fetch") | 1910 | @mock.patch.object(portfolio.Order, "fetch") |
1890 | def test_cancel(self, fetch): | 1911 | def test_cancel(self, fetch): |
1891 | self.m.debug = True | 1912 | with self.subTest(debug=True): |
1892 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), | 1913 | self.m.debug = True |
1893 | D("0.1"), "BTC", "long", self.m, "trade") | 1914 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), |
1894 | order.status = "open" | 1915 | D("0.1"), "BTC", "long", self.m, "trade") |
1916 | order.status = "open" | ||
1895 | 1917 | ||
1896 | order.cancel() | 1918 | order.cancel() |
1897 | self.m.ccxt.cancel_order.assert_not_called() | 1919 | self.m.ccxt.cancel_order.assert_not_called() |
1898 | self.m.report.log_debug_action.assert_called_once() | 1920 | self.m.report.log_debug_action.assert_called_once() |
1899 | self.m.report.log_debug_action.reset_mock() | 1921 | self.m.report.log_debug_action.reset_mock() |
1900 | self.assertEqual("canceled", order.status) | 1922 | self.assertEqual("canceled", order.status) |
1901 | 1923 | ||
1902 | self.m.debug = False | 1924 | with self.subTest(desc="Nominal case"): |
1903 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), | 1925 | self.m.debug = False |
1904 | D("0.1"), "BTC", "long", self.m, "trade") | 1926 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), |
1905 | order.status = "open" | 1927 | D("0.1"), "BTC", "long", self.m, "trade") |
1906 | order.id = 42 | 1928 | order.status = "open" |
1929 | order.id = 42 | ||
1907 | 1930 | ||
1908 | order.cancel() | 1931 | order.cancel() |
1909 | self.m.ccxt.cancel_order.assert_called_with(42) | 1932 | self.m.ccxt.cancel_order.assert_called_with(42) |
1910 | fetch.assert_called_once_with() | 1933 | fetch.assert_called_once_with() |
1911 | self.m.report.log_debug_action.assert_not_called() | 1934 | self.m.report.log_debug_action.assert_not_called() |
1935 | |||
1936 | with self.subTest(exception=True): | ||
1937 | self.m.ccxt.cancel_order.side_effect = portfolio.OrderNotFound | ||
1938 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), | ||
1939 | D("0.1"), "BTC", "long", self.m, "trade") | ||
1940 | order.status = "open" | ||
1941 | order.id = 42 | ||
1942 | order.cancel() | ||
1943 | self.m.ccxt.cancel_order.assert_called_with(42) | ||
1944 | self.m.report.log_error.assert_called_once() | ||
1945 | |||
1946 | self.m.reset_mock() | ||
1947 | with self.subTest(id=None): | ||
1948 | self.m.ccxt.cancel_order.side_effect = portfolio.OrderNotFound | ||
1949 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), | ||
1950 | D("0.1"), "BTC", "long", self.m, "trade") | ||
1951 | order.status = "open" | ||
1952 | order.cancel() | ||
1953 | self.m.ccxt.cancel_order.assert_not_called() | ||
1954 | |||
1955 | self.m.reset_mock() | ||
1956 | with self.subTest(open=False): | ||
1957 | self.m.ccxt.cancel_order.side_effect = portfolio.OrderNotFound | ||
1958 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), | ||
1959 | D("0.1"), "BTC", "long", self.m, "trade") | ||
1960 | order.status = "closed" | ||
1961 | order.cancel() | ||
1962 | self.m.ccxt.cancel_order.assert_not_called() | ||
1912 | 1963 | ||
1913 | def test_dust_amount_remaining(self): | 1964 | def test_dust_amount_remaining(self): |
1914 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), | 1965 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), |
@@ -2050,7 +2101,7 @@ class OrderTest(WebMockTestCase): | |||
2050 | } | 2101 | } |
2051 | order.fetch() | 2102 | order.fetch() |
2052 | 2103 | ||
2053 | self.m.ccxt.fetch_order.assert_called_once_with(45, symbol="ETH") | 2104 | self.m.ccxt.fetch_order.assert_called_once_with(45) |
2054 | fetch_mouvements.assert_called_once() | 2105 | fetch_mouvements.assert_called_once() |
2055 | self.assertEqual("foo", order.status) | 2106 | self.assertEqual("foo", order.status) |
2056 | self.assertEqual("timestamp", order.timestamp) | 2107 | self.assertEqual("timestamp", order.timestamp) |