diff options
Diffstat (limited to 'test.py')
-rw-r--r-- | test.py | 59 |
1 files changed, 52 insertions, 7 deletions
@@ -2073,24 +2073,68 @@ class OrderTest(WebMockTestCase): | |||
2073 | mock.patch.object(portfolio.Order, "mark_finished_order") as mark_finished_order: | 2073 | mock.patch.object(portfolio.Order, "mark_finished_order") as mark_finished_order: |
2074 | order = portfolio.Order("buy", portfolio.Amount("ETH", 0.001), | 2074 | order = portfolio.Order("buy", portfolio.Amount("ETH", 0.001), |
2075 | D("0.1"), "BTC", "long", self.m, "trade") | 2075 | D("0.1"), "BTC", "long", self.m, "trade") |
2076 | self.m.ccxt.create_order.side_effect = portfolio.ExchangeNotAvailable | 2076 | self.m.ccxt.create_order.side_effect = portfolio.InvalidOrder |
2077 | order.run() | 2077 | order.run() |
2078 | self.m.ccxt.create_order.assert_called_once() | 2078 | self.m.ccxt.create_order.assert_called_once() |
2079 | self.assertEqual(0, len(order.results)) | 2079 | self.assertEqual(0, len(order.results)) |
2080 | self.assertEqual("closed", order.status) | 2080 | self.assertEqual("closed", order.status) |
2081 | mark_finished_order.assert_called_once() | 2081 | mark_finished_order.assert_called_once() |
2082 | 2082 | ||
2083 | self.m.ccxt.order_precision.return_value = 8 | ||
2083 | self.m.ccxt.create_order.reset_mock() | 2084 | self.m.ccxt.create_order.reset_mock() |
2084 | with self.subTest(dust_amount_exception=True),\ | 2085 | with self.subTest(insufficient_funds=True),\ |
2085 | mock.patch.object(portfolio.Order, "mark_finished_order") as mark_finished_order: | 2086 | mock.patch.object(portfolio.Order, "mark_finished_order") as mark_finished_order: |
2086 | order = portfolio.Order("buy", portfolio.Amount("ETH", 0.001), | 2087 | order = portfolio.Order("buy", portfolio.Amount("ETH", "0.001"), |
2087 | D("0.1"), "BTC", "long", self.m, "trade") | 2088 | D("0.1"), "BTC", "long", self.m, "trade") |
2088 | self.m.ccxt.create_order.side_effect = portfolio.InvalidOrder | 2089 | self.m.ccxt.create_order.side_effect = [ |
2090 | portfolio.InsufficientFunds, | ||
2091 | portfolio.InsufficientFunds, | ||
2092 | portfolio.InsufficientFunds, | ||
2093 | { "id": 123 }, | ||
2094 | ] | ||
2089 | order.run() | 2095 | order.run() |
2090 | self.m.ccxt.create_order.assert_called_once() | 2096 | self.m.ccxt.create_order.assert_has_calls([ |
2097 | mock.call('ETH/BTC', 'limit', 'buy', D('0.0010'), account='exchange', price=D('0.1')), | ||
2098 | mock.call('ETH/BTC', 'limit', 'buy', D('0.00099'), account='exchange', price=D('0.1')), | ||
2099 | mock.call('ETH/BTC', 'limit', 'buy', D('0.0009801'), account='exchange', price=D('0.1')), | ||
2100 | mock.call('ETH/BTC', 'limit', 'buy', D('0.00097029'), account='exchange', price=D('0.1')), | ||
2101 | ]) | ||
2102 | self.assertEqual(4, self.m.ccxt.create_order.call_count) | ||
2103 | self.assertEqual(1, len(order.results)) | ||
2104 | self.assertEqual("open", order.status) | ||
2105 | self.assertEqual(4, order.tries) | ||
2106 | self.m.report.log_error.assert_called() | ||
2107 | self.assertEqual(4, self.m.report.log_error.call_count) | ||
2108 | |||
2109 | self.m.ccxt.order_precision.return_value = 8 | ||
2110 | self.m.ccxt.create_order.reset_mock() | ||
2111 | self.m.report.log_error.reset_mock() | ||
2112 | with self.subTest(insufficient_funds=True),\ | ||
2113 | mock.patch.object(portfolio.Order, "mark_finished_order") as mark_finished_order: | ||
2114 | order = portfolio.Order("buy", portfolio.Amount("ETH", "0.001"), | ||
2115 | D("0.1"), "BTC", "long", self.m, "trade") | ||
2116 | self.m.ccxt.create_order.side_effect = [ | ||
2117 | portfolio.InsufficientFunds, | ||
2118 | portfolio.InsufficientFunds, | ||
2119 | portfolio.InsufficientFunds, | ||
2120 | portfolio.InsufficientFunds, | ||
2121 | portfolio.InsufficientFunds, | ||
2122 | ] | ||
2123 | order.run() | ||
2124 | self.m.ccxt.create_order.assert_has_calls([ | ||
2125 | mock.call('ETH/BTC', 'limit', 'buy', D('0.0010'), account='exchange', price=D('0.1')), | ||
2126 | mock.call('ETH/BTC', 'limit', 'buy', D('0.00099'), account='exchange', price=D('0.1')), | ||
2127 | mock.call('ETH/BTC', 'limit', 'buy', D('0.0009801'), account='exchange', price=D('0.1')), | ||
2128 | mock.call('ETH/BTC', 'limit', 'buy', D('0.00097029'), account='exchange', price=D('0.1')), | ||
2129 | mock.call('ETH/BTC', 'limit', 'buy', D('0.00096059'), account='exchange', price=D('0.1')), | ||
2130 | ]) | ||
2131 | self.assertEqual(5, self.m.ccxt.create_order.call_count) | ||
2091 | self.assertEqual(0, len(order.results)) | 2132 | self.assertEqual(0, len(order.results)) |
2092 | self.assertEqual("closed", order.status) | 2133 | self.assertEqual("error", order.status) |
2093 | mark_finished_order.assert_called_once() | 2134 | self.assertEqual(5, order.tries) |
2135 | self.m.report.log_error.assert_called() | ||
2136 | self.assertEqual(5, self.m.report.log_error.call_count) | ||
2137 | self.m.report.log_error.assert_called_with(mock.ANY, message="Giving up Order(buy long 0.00096060 ETH at 0.1 BTC [pending])", exception=mock.ANY) | ||
2094 | 2138 | ||
2095 | 2139 | ||
2096 | @unittest.skipUnless("unit" in limits, "Unit skipped") | 2140 | @unittest.skipUnless("unit" in limits, "Unit skipped") |
@@ -2750,6 +2794,7 @@ class HelperTest(WebMockTestCase): | |||
2750 | 2794 | ||
2751 | helper.print_balances(self.m) | 2795 | helper.print_balances(self.m) |
2752 | 2796 | ||
2797 | self.m.report.log_stage.assert_called_once_with("print_balances") | ||
2753 | self.m.balances.fetch_balances.assert_called_with() | 2798 | self.m.balances.fetch_balances.assert_called_with() |
2754 | self.m.report.print_log.assert_has_calls([ | 2799 | self.m.report.print_log.assert_has_calls([ |
2755 | mock.call("total:"), | 2800 | mock.call("total:"), |