diff options
Diffstat (limited to 'test.py')
-rw-r--r-- | test.py | 88 |
1 files changed, 63 insertions, 25 deletions
@@ -1375,16 +1375,20 @@ class TradeTest(WebMockTestCase): | |||
1375 | value_to = portfolio.Amount("BTC", "1.0") | 1375 | value_to = portfolio.Amount("BTC", "1.0") |
1376 | trade = portfolio.Trade(value_from, value_to, "ETH", self.m) | 1376 | trade = portfolio.Trade(value_from, value_to, "ETH", self.m) |
1377 | 1377 | ||
1378 | self.assertEqual("buy", trade.order_action(False)) | 1378 | trade.inverted = False |
1379 | self.assertEqual("sell", trade.order_action(True)) | 1379 | self.assertEqual("buy", trade.order_action()) |
1380 | trade.inverted = True | ||
1381 | self.assertEqual("sell", trade.order_action()) | ||
1380 | 1382 | ||
1381 | value_from = portfolio.Amount("BTC", "0") | 1383 | value_from = portfolio.Amount("BTC", "0") |
1382 | value_from.linked_to = portfolio.Amount("ETH", "0") | 1384 | value_from.linked_to = portfolio.Amount("ETH", "0") |
1383 | value_to = portfolio.Amount("BTC", "-1.0") | 1385 | value_to = portfolio.Amount("BTC", "-1.0") |
1384 | trade = portfolio.Trade(value_from, value_to, "ETH", self.m) | 1386 | trade = portfolio.Trade(value_from, value_to, "ETH", self.m) |
1385 | 1387 | ||
1386 | self.assertEqual("sell", trade.order_action(False)) | 1388 | trade.inverted = False |
1387 | self.assertEqual("buy", trade.order_action(True)) | 1389 | self.assertEqual("sell", trade.order_action()) |
1390 | trade.inverted = True | ||
1391 | self.assertEqual("buy", trade.order_action()) | ||
1388 | 1392 | ||
1389 | def test_trade_type(self): | 1393 | def test_trade_type(self): |
1390 | value_from = portfolio.Amount("BTC", "0.5") | 1394 | value_from = portfolio.Amount("BTC", "0.5") |
@@ -1402,26 +1406,59 @@ class TradeTest(WebMockTestCase): | |||
1402 | self.assertEqual("short", trade.trade_type) | 1406 | self.assertEqual("short", trade.trade_type) |
1403 | 1407 | ||
1404 | def test_is_fullfiled(self): | 1408 | def test_is_fullfiled(self): |
1405 | value_from = portfolio.Amount("BTC", "0.5") | 1409 | with self.subTest(inverted=False): |
1406 | value_from.linked_to = portfolio.Amount("ETH", "10.0") | 1410 | value_from = portfolio.Amount("BTC", "0.5") |
1407 | value_to = portfolio.Amount("BTC", "1.0") | 1411 | value_from.linked_to = portfolio.Amount("ETH", "10.0") |
1408 | trade = portfolio.Trade(value_from, value_to, "ETH", self.m) | 1412 | value_to = portfolio.Amount("BTC", "1.0") |
1413 | trade = portfolio.Trade(value_from, value_to, "ETH", self.m) | ||
1409 | 1414 | ||
1410 | order1 = mock.Mock() | 1415 | order1 = mock.Mock() |
1411 | order1.filled_amount.return_value = portfolio.Amount("BTC", "0.3") | 1416 | order1.filled_amount.return_value = portfolio.Amount("BTC", "0.3") |
1412 | 1417 | ||
1413 | order2 = mock.Mock() | 1418 | order2 = mock.Mock() |
1414 | order2.filled_amount.return_value = portfolio.Amount("BTC", "0.01") | 1419 | order2.filled_amount.return_value = portfolio.Amount("BTC", "0.01") |
1415 | trade.orders.append(order1) | 1420 | trade.orders.append(order1) |
1416 | trade.orders.append(order2) | 1421 | trade.orders.append(order2) |
1422 | |||
1423 | self.assertFalse(trade.is_fullfiled) | ||
1424 | |||
1425 | order3 = mock.Mock() | ||
1426 | order3.filled_amount.return_value = portfolio.Amount("BTC", "0.19") | ||
1427 | trade.orders.append(order3) | ||
1428 | |||
1429 | self.assertTrue(trade.is_fullfiled) | ||
1430 | |||
1431 | order1.filled_amount.assert_called_with(in_base_currency=True) | ||
1432 | order2.filled_amount.assert_called_with(in_base_currency=True) | ||
1433 | order3.filled_amount.assert_called_with(in_base_currency=True) | ||
1417 | 1434 | ||
1418 | self.assertFalse(trade.is_fullfiled) | 1435 | with self.subTest(inverted=True): |
1436 | value_from = portfolio.Amount("BTC", "0.5") | ||
1437 | value_from.linked_to = portfolio.Amount("USDT", "1000.0") | ||
1438 | value_to = portfolio.Amount("BTC", "1.0") | ||
1439 | trade = portfolio.Trade(value_from, value_to, "USDT", self.m) | ||
1440 | trade.inverted = True | ||
1419 | 1441 | ||
1420 | order3 = mock.Mock() | 1442 | order1 = mock.Mock() |
1421 | order3.filled_amount.return_value = portfolio.Amount("BTC", "0.19") | 1443 | order1.filled_amount.return_value = portfolio.Amount("BTC", "0.3") |
1422 | trade.orders.append(order3) | 1444 | |
1445 | order2 = mock.Mock() | ||
1446 | order2.filled_amount.return_value = portfolio.Amount("BTC", "0.01") | ||
1447 | trade.orders.append(order1) | ||
1448 | trade.orders.append(order2) | ||
1449 | |||
1450 | self.assertFalse(trade.is_fullfiled) | ||
1451 | |||
1452 | order3 = mock.Mock() | ||
1453 | order3.filled_amount.return_value = portfolio.Amount("BTC", "0.19") | ||
1454 | trade.orders.append(order3) | ||
1455 | |||
1456 | self.assertTrue(trade.is_fullfiled) | ||
1457 | |||
1458 | order1.filled_amount.assert_called_with(in_base_currency=False) | ||
1459 | order2.filled_amount.assert_called_with(in_base_currency=False) | ||
1460 | order3.filled_amount.assert_called_with(in_base_currency=False) | ||
1423 | 1461 | ||
1424 | self.assertTrue(trade.is_fullfiled) | ||
1425 | 1462 | ||
1426 | def test_filled_amount(self): | 1463 | def test_filled_amount(self): |
1427 | value_from = portfolio.Amount("BTC", "0.5") | 1464 | value_from = portfolio.Amount("BTC", "0.5") |
@@ -2081,7 +2118,8 @@ class OrderTest(WebMockTestCase): | |||
2081 | self.m.report.log_debug_action.assert_called_once() | 2118 | self.m.report.log_debug_action.assert_called_once() |
2082 | 2119 | ||
2083 | @mock.patch.object(portfolio.Order, "fetch_mouvements") | 2120 | @mock.patch.object(portfolio.Order, "fetch_mouvements") |
2084 | def test_fetch(self, fetch_mouvements): | 2121 | @mock.patch.object(portfolio.Order, "mark_finished_order") |
2122 | def test_fetch(self, mark_finished_order, fetch_mouvements): | ||
2085 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), | 2123 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), |
2086 | D("0.1"), "BTC", "long", self.m, "trade") | 2124 | D("0.1"), "BTC", "long", self.m, "trade") |
2087 | order.id = 45 | 2125 | order.id = 45 |
@@ -2091,6 +2129,7 @@ class OrderTest(WebMockTestCase): | |||
2091 | self.m.report.log_debug_action.assert_called_once() | 2129 | self.m.report.log_debug_action.assert_called_once() |
2092 | self.m.report.log_debug_action.reset_mock() | 2130 | self.m.report.log_debug_action.reset_mock() |
2093 | self.m.ccxt.fetch_order.assert_not_called() | 2131 | self.m.ccxt.fetch_order.assert_not_called() |
2132 | mark_finished_order.assert_not_called() | ||
2094 | fetch_mouvements.assert_not_called() | 2133 | fetch_mouvements.assert_not_called() |
2095 | 2134 | ||
2096 | with self.subTest(debug=False): | 2135 | with self.subTest(debug=False): |
@@ -2107,17 +2146,19 @@ class OrderTest(WebMockTestCase): | |||
2107 | self.assertEqual("timestamp", order.timestamp) | 2146 | self.assertEqual("timestamp", order.timestamp) |
2108 | self.assertEqual(1, len(order.results)) | 2147 | self.assertEqual(1, len(order.results)) |
2109 | self.m.report.log_debug_action.assert_not_called() | 2148 | self.m.report.log_debug_action.assert_not_called() |
2149 | mark_finished_order.assert_called_once() | ||
2110 | 2150 | ||
2151 | mark_finished_order.reset_mock() | ||
2111 | with self.subTest(missing_order=True): | 2152 | with self.subTest(missing_order=True): |
2112 | self.m.ccxt.fetch_order.side_effect = [ | 2153 | self.m.ccxt.fetch_order.side_effect = [ |
2113 | portfolio.OrderNotCached, | 2154 | portfolio.OrderNotCached, |
2114 | ] | 2155 | ] |
2115 | order.fetch() | 2156 | order.fetch() |
2116 | self.assertEqual("closed_unknown", order.status) | 2157 | self.assertEqual("closed_unknown", order.status) |
2158 | mark_finished_order.assert_called_once() | ||
2117 | 2159 | ||
2118 | @mock.patch.object(portfolio.Order, "fetch") | 2160 | @mock.patch.object(portfolio.Order, "fetch") |
2119 | @mock.patch.object(portfolio.Order, "mark_finished_order") | 2161 | def test_get_status(self, fetch): |
2120 | def test_get_status(self, mark_finished_order, fetch): | ||
2121 | with self.subTest(debug=True): | 2162 | with self.subTest(debug=True): |
2122 | self.m.debug = True | 2163 | self.m.debug = True |
2123 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), | 2164 | order = portfolio.Order("buy", portfolio.Amount("ETH", 10), |
@@ -2136,10 +2177,8 @@ class OrderTest(WebMockTestCase): | |||
2136 | return update_status | 2177 | return update_status |
2137 | fetch.side_effect = _fetch(order) | 2178 | fetch.side_effect = _fetch(order) |
2138 | self.assertEqual("open", order.get_status()) | 2179 | self.assertEqual("open", order.get_status()) |
2139 | mark_finished_order.assert_not_called() | ||
2140 | fetch.assert_called_once() | 2180 | fetch.assert_called_once() |
2141 | 2181 | ||
2142 | mark_finished_order.reset_mock() | ||
2143 | fetch.reset_mock() | 2182 | fetch.reset_mock() |
2144 | with self.subTest(debug=False, finished=True): | 2183 | with self.subTest(debug=False, finished=True): |
2145 | self.m.debug = False | 2184 | self.m.debug = False |
@@ -2151,7 +2190,6 @@ class OrderTest(WebMockTestCase): | |||
2151 | return update_status | 2190 | return update_status |
2152 | fetch.side_effect = _fetch(order) | 2191 | fetch.side_effect = _fetch(order) |
2153 | self.assertEqual("closed", order.get_status()) | 2192 | self.assertEqual("closed", order.get_status()) |
2154 | mark_finished_order.assert_called_once() | ||
2155 | fetch.assert_called_once() | 2193 | fetch.assert_called_once() |
2156 | 2194 | ||
2157 | def test_run(self): | 2195 | def test_run(self): |