X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests%2Ftest_portfolio.py;h=f2f639470c0bbf880916d16f5d0583b59392357e;hb=8bbca32edc344c7ee2f5ea5db5448a4c4ff79684;hp=4d789965673b9090c0df2ac7d74c0cd81e46d4ce;hpb=3080f31d1ee74104640dcff451922cd0ae88ee22;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FCryptoportfolio%2FTrader.git diff --git a/tests/test_portfolio.py b/tests/test_portfolio.py index 4d78996..f2f6394 100644 --- a/tests/test_portfolio.py +++ b/tests/test_portfolio.py @@ -26,6 +26,12 @@ class ComputationTest(WebMockTestCase): portfolio.Computation.compute_value("foo", "bid", compute_value="test") compute.assert_called_with("foo", "bid") + def test_eat_several(self): + self.m.ccxt.fetch_nth_order_book.return_value = D("0.00001275") + + self.assertEqual(D("0.00001275"), portfolio.Computation.eat_several(self.m)({ "symbol": "BTC/HUC" }, "ask")) + + @unittest.skipUnless("unit" in limits, "Unit skipped") class TradeTest(WebMockTestCase): @@ -142,9 +148,9 @@ class TradeTest(WebMockTestCase): self.assertTrue(trade.is_fullfiled) - order1.filled_amount.assert_called_with(in_base_currency=True) - order2.filled_amount.assert_called_with(in_base_currency=True) - order3.filled_amount.assert_called_with(in_base_currency=True) + order1.filled_amount.assert_called_with(in_base_currency=True, refetch=True) + order2.filled_amount.assert_called_with(in_base_currency=True, refetch=True) + order3.filled_amount.assert_called_with(in_base_currency=True, refetch=True) with self.subTest(inverted=True): value_from = portfolio.Amount("BTC", "0.5") @@ -169,9 +175,9 @@ class TradeTest(WebMockTestCase): self.assertTrue(trade.is_fullfiled) - order1.filled_amount.assert_called_with(in_base_currency=False) - order2.filled_amount.assert_called_with(in_base_currency=False) - order3.filled_amount.assert_called_with(in_base_currency=False) + order1.filled_amount.assert_called_with(in_base_currency=False, refetch=True) + order2.filled_amount.assert_called_with(in_base_currency=False, refetch=True) + order3.filled_amount.assert_called_with(in_base_currency=False, refetch=True) def test_filled_amount(self): @@ -189,16 +195,16 @@ class TradeTest(WebMockTestCase): trade.orders.append(order2) self.assertEqual(portfolio.Amount("ETH", "0.31"), trade.filled_amount()) - order1.filled_amount.assert_called_with(in_base_currency=False) - order2.filled_amount.assert_called_with(in_base_currency=False) + order1.filled_amount.assert_called_with(in_base_currency=False, refetch=False) + order2.filled_amount.assert_called_with(in_base_currency=False, refetch=False) self.assertEqual(portfolio.Amount("ETH", "0.31"), trade.filled_amount(in_base_currency=False)) - order1.filled_amount.assert_called_with(in_base_currency=False) - order2.filled_amount.assert_called_with(in_base_currency=False) + order1.filled_amount.assert_called_with(in_base_currency=False, refetch=False) + order2.filled_amount.assert_called_with(in_base_currency=False, refetch=False) self.assertEqual(portfolio.Amount("ETH", "0.31"), trade.filled_amount(in_base_currency=True)) - order1.filled_amount.assert_called_with(in_base_currency=True) - order2.filled_amount.assert_called_with(in_base_currency=True) + order1.filled_amount.assert_called_with(in_base_currency=True, refetch=False) + order2.filled_amount.assert_called_with(in_base_currency=True, refetch=False) @mock.patch.object(portfolio.Computation, "compute_value") @mock.patch.object(portfolio.Trade, "filled_amount") @@ -506,6 +512,25 @@ class TradeTest(WebMockTestCase): trade.orders = [] self.m.report.log_order.reset_mock() + with self.subTest(tick=22): + trade.update_order(order_mock, 22) + order_mock.cancel.assert_called() + new_order_mock.run.assert_called() + prepare_order.assert_called_with(compute_value=mock.ANY) + self.m.report.log_order.assert_called() + self.assertEqual(2, self.m.report.log_order.call_count) + calls = [ + mock.call(order_mock, 22, update="market_adjust_eat", + compute_value=mock.ANY, + new_order=new_order_mock), + mock.call(order_mock, 22, new_order=new_order_mock), + ] + self.m.report.log_order.assert_has_calls(calls) + + order_mock.reset_mock() + new_order_mock.reset_mock() + trade.orders = [] + self.m.report.log_order.reset_mock() def test_print_with_order(self): value_from = portfolio.Amount("BTC", "0.5") @@ -823,14 +848,20 @@ class OrderTest(WebMockTestCase): order.cancel() self.m.ccxt.cancel_order.assert_not_called() - def test_dust_amount_remaining(self): + def test_mark_dust_amount_remaining(self): order = portfolio.Order("buy", portfolio.Amount("ETH", 10), D("0.1"), "BTC", "long", self.m, "trade") - order.remaining_amount = mock.Mock(return_value=portfolio.Amount("ETH", 1)) - self.assertFalse(order.dust_amount_remaining()) + self.m.ccxt.is_dust_trade.return_value = False + order.mark_dust_amount_remaining_order() + self.assertEqual("pending", order.status) + + self.m.ccxt.is_dust_trade.return_value = True + order.mark_dust_amount_remaining_order() + self.assertEqual("pending", order.status) - order.remaining_amount = mock.Mock(return_value=portfolio.Amount("ETH", D("0.0001"))) - self.assertTrue(order.dust_amount_remaining()) + order.status = "open" + order.mark_dust_amount_remaining_order() + self.assertEqual("closed_dust_remaining", order.status) @mock.patch.object(portfolio.Order, "fetch") @mock.patch.object(portfolio.Order, "filled_amount", return_value=portfolio.Amount("ETH", 1)) @@ -861,6 +892,8 @@ class OrderTest(WebMockTestCase): fetch.assert_not_called() order.status = "open" self.assertEqual(portfolio.Amount("ETH", 5), order.filled_amount(in_base_currency=False)) + fetch.assert_not_called() + self.assertEqual(portfolio.Amount("ETH", 5), order.filled_amount(in_base_currency=False, refetch=True)) fetch.assert_called_once() self.assertEqual(portfolio.Amount("BTC", "0.7"), order.filled_amount(in_base_currency=True)) @@ -965,6 +998,7 @@ class OrderTest(WebMockTestCase): "status": "foo", "datetime": "timestamp" } + self.m.ccxt.is_dust_trade.return_value = False order.fetch() self.m.ccxt.fetch_order.assert_called_once_with(45) @@ -1327,7 +1361,7 @@ class OrderTest(WebMockTestCase): with self.subTest(similar_open_order=True): order = portfolio.Order("buy", portfolio.Amount("ETH", "0.001"), D("0.1"), "BTC", "long", self.m, "trade") - order.start_date = datetime.datetime(2018, 3, 25, 15, 15, 55) + order.start_date = datetime.datetime(2018, 3, 25, 15, 15, 55, 0, tz(2)) self.m.ccxt.order_precision.return_value = 8 self.m.ccxt.fetch_orders.return_value = [ @@ -1437,7 +1471,7 @@ class OrderTest(WebMockTestCase): with self.subTest(similar_open_order=False, past_trades=True): order = portfolio.Order("buy", portfolio.Amount("ETH", "0.001"), D("0.1"), "BTC", "long", self.m, "trade") - order.start_date = datetime.datetime(2018, 3, 25, 15, 15, 55) + order.start_date = datetime.datetime(2018, 3, 25, 15, 15, 55, 0, tz(2)) self.m.ccxt.order_precision.return_value = 8 self.m.ccxt.fetch_orders.return_value = [] @@ -1822,7 +1856,7 @@ class AmountTest(WebMockTestCase): with self.subTest(desc="no ticker for currency"): self.m.get_ticker.return_value = None - self.assertRaises(Exception, amount.in_currency, "ETH", self.m) + self.assertEqual(portfolio.Amount("ETH", 0), amount.in_currency("ETH", self.m)) with self.subTest(desc="nominal case"): self.m.get_ticker.return_value = {