+ market = mock.Mock()
+ market.fetch_fees.return_value = "Foo"
+ self.assertEqual("Foo", portfolio.Trade.fetch_fees(market))
+ market.fetch_fees.assert_called_once()
+ self.assertEqual("Foo", portfolio.Trade.fetch_fees(market))
+ market.fetch_fees.assert_called_once()
+
+ def test_action(self):
+ value_from = portfolio.Amount("BTC", "1.0")
+ value_from.linked_to = portfolio.Amount("ETH", "10.0")
+ value_to = portfolio.Amount("BTC", "1.0")
+ trade = portfolio.Trade(value_from, value_to, "ETH")
+
+ self.assertIsNone(trade.action)
+
+ value_from = portfolio.Amount("BTC", "1.0")
+ value_from.linked_to = portfolio.Amount("BTC", "1.0")
+ value_to = portfolio.Amount("BTC", "1.0")
+ trade = portfolio.Trade(value_from, value_to, "BTC")
+
+ self.assertIsNone(trade.action)
+
+ value_from = portfolio.Amount("BTC", "0.5")
+ value_from.linked_to = portfolio.Amount("ETH", "10.0")
+ value_to = portfolio.Amount("BTC", "1.0")
+ trade = portfolio.Trade(value_from, value_to, "ETH")
+
+ self.assertEqual("acquire", trade.action)
+
+ value_from = portfolio.Amount("BTC", "0")
+ value_from.linked_to = portfolio.Amount("ETH", "0")
+ value_to = portfolio.Amount("BTC", "-1.0")
+ trade = portfolio.Trade(value_from, value_to, "ETH")
+
+ self.assertEqual("dispose", trade.action)
+
+ def test_order_action(self):
+ value_from = portfolio.Amount("BTC", "0.5")
+ value_from.linked_to = portfolio.Amount("ETH", "10.0")
+ value_to = portfolio.Amount("BTC", "1.0")
+ trade = portfolio.Trade(value_from, value_to, "ETH")
+
+ self.assertEqual("buy", trade.order_action(False))
+ self.assertEqual("sell", trade.order_action(True))
+
+ value_from = portfolio.Amount("BTC", "0")
+ value_from.linked_to = portfolio.Amount("ETH", "0")
+ value_to = portfolio.Amount("BTC", "-1.0")
+ trade = portfolio.Trade(value_from, value_to, "ETH")
+
+ self.assertEqual("sell", trade.order_action(False))
+ self.assertEqual("buy", trade.order_action(True))
+
+ def test_trade_type(self):
+ value_from = portfolio.Amount("BTC", "0.5")
+ value_from.linked_to = portfolio.Amount("ETH", "10.0")
+ value_to = portfolio.Amount("BTC", "1.0")
+ trade = portfolio.Trade(value_from, value_to, "ETH")
+
+ self.assertEqual("long", trade.trade_type)
+
+ value_from = portfolio.Amount("BTC", "0")
+ value_from.linked_to = portfolio.Amount("ETH", "0")
+ value_to = portfolio.Amount("BTC", "-1.0")
+ trade = portfolio.Trade(value_from, value_to, "ETH")
+
+ self.assertEqual("short", trade.trade_type)
+
+ def test_filled_amount(self):
+ value_from = portfolio.Amount("BTC", "0.5")
+ value_from.linked_to = portfolio.Amount("ETH", "10.0")
+ value_to = portfolio.Amount("BTC", "1.0")
+ trade = portfolio.Trade(value_from, value_to, "ETH")
+
+ order1 = mock.Mock()
+ order1.filled_amount = portfolio.Amount("ETH", "0.3")
+
+ order2 = mock.Mock()
+ order2.filled_amount = portfolio.Amount("ETH", "0.01")
+ trade.orders.append(order1)
+ trade.orders.append(order2)
+
+ self.assertEqual(portfolio.Amount("ETH", "0.31"), trade.filled_amount)
+
+ def test_prepare_orders(self):
+ trade_mock1 = mock.Mock()
+ trade_mock2 = mock.Mock()
+
+ portfolio.Trade.trades.append(trade_mock1)
+ portfolio.Trade.trades.append(trade_mock2)
+
+ portfolio.Trade.prepare_orders()
+ trade_mock1.prepare_order.assert_called_with(compute_value="default")
+ trade_mock2.prepare_order.assert_called_with(compute_value="default")
+
+ portfolio.Trade.prepare_orders(compute_value="bla")
+ trade_mock1.prepare_order.assert_called_with(compute_value="bla")
+ trade_mock2.prepare_order.assert_called_with(compute_value="bla")
+
+ trade_mock1.prepare_order.reset_mock()
+ trade_mock2.prepare_order.reset_mock()
+
+ trade_mock1.action = "foo"
+ trade_mock2.action = "bar"
+ portfolio.Trade.prepare_orders(only="bar")
+ trade_mock1.prepare_order.assert_not_called()
+ trade_mock2.prepare_order.assert_called_with(compute_value="default")