import portfolio
import datetime
+@unittest.skipUnless("unit" in limits, "Unit skipped")
class ComputationTest(WebMockTestCase):
def test_compute_value(self):
compute = mock.Mock()
portfolio.Computation.compute_value("foo", "bid", compute_value="test")
compute.assert_called_with("foo", "bid")
+@unittest.skipUnless("unit" in limits, "Unit skipped")
class TradeTest(WebMockTestCase):
def test_values_assertion(self):
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")
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):
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")
self.assertEqual(0, len(trade.orders))
Order.assert_not_called()
+ self.m.get_ticker.return_value = None
+ with self.subTest(desc="Unknown ticker"):
+ filled_amount.return_value = portfolio.Amount("BTC", "3")
+ compute_value.return_value = D("0.125")
+
+ value_from = portfolio.Amount("BTC", "1")
+ value_from.rate = D("0.1")
+ value_from.linked_to = portfolio.Amount("FOO", "10")
+ value_to = portfolio.Amount("BTC", "10")
+ trade = portfolio.Trade(value_from, value_to, "FOO", self.m)
+
+ trade.prepare_order()
+
+ filled_amount.assert_not_called()
+ compute_value.assert_not_called()
+ self.assertEqual(0, len(trade.orders))
+ Order.assert_not_called()
+ self.m.report.log_error.assert_called_once_with('prepare_order',
+ message='Unknown ticker FOO/BTC')
+
self.m.get_ticker.return_value = { "inverted": False }
with self.subTest(desc="Already filled"):
filled_amount.return_value = portfolio.Amount("FOO", "100")
self.assertEqual("ETH", as_json["currency"])
self.assertEqual("BTC", as_json["base_currency"])
+@unittest.skipUnless("unit" in limits, "Unit skipped")
class BalanceTest(WebMockTestCase):
def test_values(self):
balance = portfolio.Balance("BTC", {
self.assertEqual(D(0), as_json["margin_available"])
self.assertEqual(D(0), as_json["margin_borrowed"])
+@unittest.skipUnless("unit" in limits, "Unit skipped")
class OrderTest(WebMockTestCase):
def test_values(self):
order = portfolio.Order("buy", portfolio.Amount("ETH", 10),
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)
- order.remaining_amount = mock.Mock(return_value=portfolio.Amount("ETH", D("0.0001")))
- self.assertTrue(order.dust_amount_remaining())
+ self.m.ccxt.is_dust_trade.return_value = True
+ 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))
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))
"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)
result = order.retrieve_order()
self.assertFalse(result)
+@unittest.skipUnless("unit" in limits, "Unit skipped")
class MouvementTest(WebMockTestCase):
def test_values(self):
mouvement = portfolio.Mouvement("ETH", "BTC", {
self.assertEqual("BTC", as_json["base_currency"])
self.assertEqual("ETH", as_json["currency"])
+@unittest.skipUnless("unit" in limits, "Unit skipped")
class AmountTest(WebMockTestCase):
def test_values(self):
amount = portfolio.Amount("BTC", "0.65")