def test__place_order_invalid_signal(self): """ Test :meth:`ArbitrageStrategy._place_order` Assert that no orders are placed and `False` is returned. """ arbitrage = ArbitrageStrategy() TEST_PRICE = 1.0 arbitrage._get_market_price = MagicMock(return_value=TEST_PRICE) arbitrage.get_currency_balance = MagicMock() trader = MagicMock() arbitrage.trader = trader INVALID_SIGNAL = 3 TEST_PRODUCT = 'BTC-USD' TEST_DISTANCE = 2.0 success = arbitrage._place_order(INVALID_SIGNAL, TEST_PRODUCT, TEST_DISTANCE) self.assertEqual(trader.buy.called, 0) self.assertEqual(trader.sell.called, 0) self.assertFalse(success)
def test__place_order_sell_signal(self): """ Test :meth:`ArbitrageStrategy._place_order` Assert a sell order is placed and `True` is returned. """ arbitrage = ArbitrageStrategy() TEST_PRICE = 1.0 arbitrage._get_market_price = MagicMock(return_value=TEST_PRICE) arbitrage.get_currency_balance = MagicMock() trader = MagicMock() arbitrage.trader = trader TEST_SIGNAL = CurrencyGraph.SELL_ORDER TEST_PRODUCT = 'BTC-USD' TEST_DISTANCE = 2.0 success = arbitrage._place_order(TEST_SIGNAL, TEST_PRODUCT, TEST_DISTANCE) self.assertEqual(trader.buy.called, 0) self.assertEqual(trader.sell.called, 1) self.assertTrue(success)
def test__place_order_below_threshold(self): """ Test :meth:`ArbitrageStrategy._place_order` Assert that no orders are placed and `False` is returned. """ arbitrage = ArbitrageStrategy() TEST_PRICE = 1.0 arbitrage._get_market_price = MagicMock(return_value=TEST_PRICE) arbitrage.get_currency_balance = MagicMock() trader = MagicMock() arbitrage.trader = trader TEST_SIGNAL = CurrencyGraph.BUY_ORDER TEST_PRODUCT = 'BTC-USD' TEST_DISTANCE = 1.0 success = arbitrage._place_order(TEST_SIGNAL, TEST_PRODUCT, TEST_DISTANCE) self.assertEqual(trader.buy.called, 0) self.assertEqual(trader.sell.called, 0) self.assertFalse(success)
def test_next_update_pending_order(self): """ Test :meth:`ArbitrageStrategy.next` Assert :meth:`ArbitrageStrategy._update_pending_order` is called and `True` is returned. """ arbitrage = ArbitrageStrategy() trade_signal = (CurrencyGraph.BUY_ORDER, 'BTC-USD', 1.0,) arbitrage._get_trade_signal = MagicMock(return_value=trade_signal) arbitrage._set_current_node = MagicMock() arbitrage._track_order = MagicMock(return_value=True) arbitrage._update_pending_order = MagicMock() arbitrage._place_order = MagicMock() success = arbitrage.next() self.assertTrue(success) self.assertEqual(arbitrage._update_pending_order.called, 1) self.assertEqual(arbitrage._place_order.called, 0)
def test_next_trade_signal_error(self): """ Test :meth:`ArbitrageStrategy.next` Assert :meth:`ArbitrageStrategy._update_pending_order` and :meth:`ArbitrageStrategy._place_order` are not called and `False` is returned. """ arbitrage = ArbitrageStrategy() error = MissingCurrencyGraph() arbitrage._get_trade_signal = MagicMock(side_effect=error) arbitrage._set_current_node = MagicMock() arbitrage._track_order = MagicMock(return_value=False) arbitrage._update_pending_order = MagicMock() arbitrage._place_order = MagicMock() success = arbitrage.next() self.assertFalse(success) self.assertEqual(arbitrage._update_pending_order.called, 0) self.assertEqual(arbitrage._place_order.called, 0)