X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=test.py;h=76080619a47a3580d736ca80ff7c604e03069189;hb=cfab619d9223fc824649a6fe16863931f5e43891;hp=d10bfe4a9a688f17eec604cb4b62249e936fff25;hpb=f2da658998b6e6605c6ae27ff338ef23b96dce25;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FCryptoportfolio%2FTrader.git diff --git a/test.py b/test.py index d10bfe4..7608061 100644 --- a/test.py +++ b/test.py @@ -17,13 +17,12 @@ class AmountTest(unittest.TestCase): self.assertEqual(amount, amount.in_currency("ETC", None)) ticker_mock = unittest.mock.Mock() - with mock.patch.object(portfolio.Amount, 'get_ticker', new=ticker_mock): + with mock.patch.object(portfolio.Trade, 'get_ticker', new=ticker_mock): ticker_mock.return_value = None - portfolio.Amount.get_ticker = ticker_mock self.assertRaises(Exception, amount.in_currency, "ETH", None) - with mock.patch.object(portfolio.Amount, 'get_ticker', new=ticker_mock): + with mock.patch.object(portfolio.Trade, 'get_ticker', new=ticker_mock): ticker_mock.return_value = { "average": 0.3, "foo": "bar", @@ -35,10 +34,6 @@ class AmountTest(unittest.TestCase): self.assertEqual(amount, converted_amount.linked_to) self.assertEqual("bar", converted_amount.ticker["foo"]) - @unittest.skip("TODO") - def test_get_ticker(self): - pass - def test__abs(self): amount = portfolio.Amount("SC", -120) self.assertEqual(120, abs(amount).value) @@ -276,7 +271,7 @@ class BalanceTest(unittest.TestCase): "total": 0.0 }, } - self.patcher = mock.patch.multiple(portfolio.Balance, known_balances={}, trades={}) + self.patcher = mock.patch.multiple(portfolio.Balance, known_balances={}) self.patcher.start() def test_values(self): @@ -292,7 +287,7 @@ class BalanceTest(unittest.TestCase): self.assertEqual(0.30, balance.used.value) self.assertEqual("BTC", balance.currency) - @mock.patch.object(portfolio.Amount, "get_ticker") + @mock.patch.object(portfolio.Trade, "get_ticker") def test_in_currency(self, get_ticker): portfolio.Balance.known_balances = { "BTC": portfolio.Balance("BTC", 0.65, 0.35, 0.30), @@ -352,7 +347,7 @@ class BalanceTest(unittest.TestCase): self.assertEqual(7.5, amounts["XEM"].value) @mock.patch.object(portfolio.Portfolio, "repartition_pertenthousand") - @mock.patch.object(portfolio.Amount, "get_ticker") + @mock.patch.object(portfolio.Trade, "get_ticker") @mock.patch.object(portfolio.Trade, "compute_trades") def test_prepare_trades(self, compute_trades, get_ticker, repartition): repartition.return_value = { @@ -393,5 +388,126 @@ class BalanceTest(unittest.TestCase): def tearDown(self): self.patcher.stop() +class TradeTest(unittest.TestCase): + import time + + def setUp(self): + super(TradeTest, self).setUp() + + self.patcher = mock.patch.multiple(portfolio.Trade, + ticker_cache={}, + ticker_cache_timestamp=self.time.time(), + fees_cache={}, + trades={}) + self.patcher.start() + + def test_get_ticker(self): + market = mock.Mock() + market.fetch_ticker.side_effect = [ + { "bid": 1, "ask": 3 }, + portfolio.ccxt.ExchangeError("foo"), + { "bid": 10, "ask": 40 }, + portfolio.ccxt.ExchangeError("foo"), + portfolio.ccxt.ExchangeError("foo"), + ] + + ticker = portfolio.Trade.get_ticker("ETH", "ETC", market) + market.fetch_ticker.assert_called_with("ETH/ETC") + self.assertEqual(1, ticker["bid"]) + self.assertEqual(3, ticker["ask"]) + self.assertEqual(2, ticker["average"]) + self.assertFalse(ticker["inverted"]) + + ticker = portfolio.Trade.get_ticker("ETH", "XVG", market) + self.assertEqual(0.0625, ticker["average"]) + self.assertTrue(ticker["inverted"]) + self.assertIn("original", ticker) + self.assertEqual(10, ticker["original"]["bid"]) + + ticker = portfolio.Trade.get_ticker("XVG", "XMR", market) + self.assertIsNone(ticker) + + market.fetch_ticker.assert_has_calls([ + mock.call("ETH/ETC"), + mock.call("ETH/XVG"), + mock.call("XVG/ETH"), + mock.call("XVG/XMR"), + mock.call("XMR/XVG"), + ]) + + market2 = mock.Mock() + market2.fetch_ticker.side_effect = [ + { "bid": 1, "ask": 3 }, + { "bid": 1.2, "ask": 3.5 }, + ] + ticker1 = portfolio.Trade.get_ticker("ETH", "ETC", market2) + ticker2 = portfolio.Trade.get_ticker("ETH", "ETC", market2) + ticker3 = portfolio.Trade.get_ticker("ETC", "ETH", market2) + market2.fetch_ticker.assert_called_once_with("ETH/ETC") + self.assertEqual(1, ticker1["bid"]) + self.assertDictEqual(ticker1, ticker2) + self.assertDictEqual(ticker1, ticker3["original"]) + + ticker4 = portfolio.Trade.get_ticker("ETH", "ETC", market2, refresh=True) + ticker5 = portfolio.Trade.get_ticker("ETH", "ETC", market2) + self.assertEqual(1.2, ticker4["bid"]) + self.assertDictEqual(ticker4, ticker5) + + market3 = mock.Mock() + market3.fetch_ticker.side_effect = [ + { "bid": 1, "ask": 3 }, + { "bid": 1.2, "ask": 3.5 }, + ] + ticker6 = portfolio.Trade.get_ticker("ETH", "ETC", market3) + portfolio.Trade.ticker_cache_timestamp -= 4 + ticker7 = portfolio.Trade.get_ticker("ETH", "ETC", market3) + portfolio.Trade.ticker_cache_timestamp -= 2 + ticker8 = portfolio.Trade.get_ticker("ETH", "ETC", market3) + self.assertDictEqual(ticker6, ticker7) + self.assertEqual(1.2, ticker8["bid"]) + + @unittest.skip("TODO") + def test_values_assertion(self): + pass + + @unittest.skip("TODO") + def test_fetch_fees(self): + pass + + @unittest.skip("TODO") + def test_compute_trades(self): + pass + + @unittest.skip("TODO") + def test_action(self): + pass + + @unittest.skip("TODO") + def test_action(self): + pass + + @unittest.skip("TODO") + def test_order_action(self): + pass + + @unittest.skip("TODO") + def test_prepare_order(self): + pass + + @unittest.skip("TODO") + def test_all_orders(self): + pass + + @unittest.skip("TODO") + def test_follow_orders(self): + pass + + @unittest.skip("TODO") + def test__repr(self): + pass + + def tearDown(self): + self.patcher.stop() + if __name__ == '__main__': unittest.main()