aboutsummaryrefslogtreecommitdiff
path: root/test.py
diff options
context:
space:
mode:
Diffstat (limited to 'test.py')
-rw-r--r--test.py136
1 files changed, 126 insertions, 10 deletions
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):
17 self.assertEqual(amount, amount.in_currency("ETC", None)) 17 self.assertEqual(amount, amount.in_currency("ETC", None))
18 18
19 ticker_mock = unittest.mock.Mock() 19 ticker_mock = unittest.mock.Mock()
20 with mock.patch.object(portfolio.Amount, 'get_ticker', new=ticker_mock): 20 with mock.patch.object(portfolio.Trade, 'get_ticker', new=ticker_mock):
21 ticker_mock.return_value = None 21 ticker_mock.return_value = None
22 portfolio.Amount.get_ticker = ticker_mock
23 22
24 self.assertRaises(Exception, amount.in_currency, "ETH", None) 23 self.assertRaises(Exception, amount.in_currency, "ETH", None)
25 24
26 with mock.patch.object(portfolio.Amount, 'get_ticker', new=ticker_mock): 25 with mock.patch.object(portfolio.Trade, 'get_ticker', new=ticker_mock):
27 ticker_mock.return_value = { 26 ticker_mock.return_value = {
28 "average": 0.3, 27 "average": 0.3,
29 "foo": "bar", 28 "foo": "bar",
@@ -35,10 +34,6 @@ class AmountTest(unittest.TestCase):
35 self.assertEqual(amount, converted_amount.linked_to) 34 self.assertEqual(amount, converted_amount.linked_to)
36 self.assertEqual("bar", converted_amount.ticker["foo"]) 35 self.assertEqual("bar", converted_amount.ticker["foo"])
37 36
38 @unittest.skip("TODO")
39 def test_get_ticker(self):
40 pass
41
42 def test__abs(self): 37 def test__abs(self):
43 amount = portfolio.Amount("SC", -120) 38 amount = portfolio.Amount("SC", -120)
44 self.assertEqual(120, abs(amount).value) 39 self.assertEqual(120, abs(amount).value)
@@ -276,7 +271,7 @@ class BalanceTest(unittest.TestCase):
276 "total": 0.0 271 "total": 0.0
277 }, 272 },
278 } 273 }
279 self.patcher = mock.patch.multiple(portfolio.Balance, known_balances={}, trades={}) 274 self.patcher = mock.patch.multiple(portfolio.Balance, known_balances={})
280 self.patcher.start() 275 self.patcher.start()
281 276
282 def test_values(self): 277 def test_values(self):
@@ -292,7 +287,7 @@ class BalanceTest(unittest.TestCase):
292 self.assertEqual(0.30, balance.used.value) 287 self.assertEqual(0.30, balance.used.value)
293 self.assertEqual("BTC", balance.currency) 288 self.assertEqual("BTC", balance.currency)
294 289
295 @mock.patch.object(portfolio.Amount, "get_ticker") 290 @mock.patch.object(portfolio.Trade, "get_ticker")
296 def test_in_currency(self, get_ticker): 291 def test_in_currency(self, get_ticker):
297 portfolio.Balance.known_balances = { 292 portfolio.Balance.known_balances = {
298 "BTC": portfolio.Balance("BTC", 0.65, 0.35, 0.30), 293 "BTC": portfolio.Balance("BTC", 0.65, 0.35, 0.30),
@@ -352,7 +347,7 @@ class BalanceTest(unittest.TestCase):
352 self.assertEqual(7.5, amounts["XEM"].value) 347 self.assertEqual(7.5, amounts["XEM"].value)
353 348
354 @mock.patch.object(portfolio.Portfolio, "repartition_pertenthousand") 349 @mock.patch.object(portfolio.Portfolio, "repartition_pertenthousand")
355 @mock.patch.object(portfolio.Amount, "get_ticker") 350 @mock.patch.object(portfolio.Trade, "get_ticker")
356 @mock.patch.object(portfolio.Trade, "compute_trades") 351 @mock.patch.object(portfolio.Trade, "compute_trades")
357 def test_prepare_trades(self, compute_trades, get_ticker, repartition): 352 def test_prepare_trades(self, compute_trades, get_ticker, repartition):
358 repartition.return_value = { 353 repartition.return_value = {
@@ -393,5 +388,126 @@ class BalanceTest(unittest.TestCase):
393 def tearDown(self): 388 def tearDown(self):
394 self.patcher.stop() 389 self.patcher.stop()
395 390
391class TradeTest(unittest.TestCase):
392 import time
393
394 def setUp(self):
395 super(TradeTest, self).setUp()
396
397 self.patcher = mock.patch.multiple(portfolio.Trade,
398 ticker_cache={},
399 ticker_cache_timestamp=self.time.time(),
400 fees_cache={},
401 trades={})
402 self.patcher.start()
403
404 def test_get_ticker(self):
405 market = mock.Mock()
406 market.fetch_ticker.side_effect = [
407 { "bid": 1, "ask": 3 },
408 portfolio.ccxt.ExchangeError("foo"),
409 { "bid": 10, "ask": 40 },
410 portfolio.ccxt.ExchangeError("foo"),
411 portfolio.ccxt.ExchangeError("foo"),
412 ]
413
414 ticker = portfolio.Trade.get_ticker("ETH", "ETC", market)
415 market.fetch_ticker.assert_called_with("ETH/ETC")
416 self.assertEqual(1, ticker["bid"])
417 self.assertEqual(3, ticker["ask"])
418 self.assertEqual(2, ticker["average"])
419 self.assertFalse(ticker["inverted"])
420
421 ticker = portfolio.Trade.get_ticker("ETH", "XVG", market)
422 self.assertEqual(0.0625, ticker["average"])
423 self.assertTrue(ticker["inverted"])
424 self.assertIn("original", ticker)
425 self.assertEqual(10, ticker["original"]["bid"])
426
427 ticker = portfolio.Trade.get_ticker("XVG", "XMR", market)
428 self.assertIsNone(ticker)
429
430 market.fetch_ticker.assert_has_calls([
431 mock.call("ETH/ETC"),
432 mock.call("ETH/XVG"),
433 mock.call("XVG/ETH"),
434 mock.call("XVG/XMR"),
435 mock.call("XMR/XVG"),
436 ])
437
438 market2 = mock.Mock()
439 market2.fetch_ticker.side_effect = [
440 { "bid": 1, "ask": 3 },
441 { "bid": 1.2, "ask": 3.5 },
442 ]
443 ticker1 = portfolio.Trade.get_ticker("ETH", "ETC", market2)
444 ticker2 = portfolio.Trade.get_ticker("ETH", "ETC", market2)
445 ticker3 = portfolio.Trade.get_ticker("ETC", "ETH", market2)
446 market2.fetch_ticker.assert_called_once_with("ETH/ETC")
447 self.assertEqual(1, ticker1["bid"])
448 self.assertDictEqual(ticker1, ticker2)
449 self.assertDictEqual(ticker1, ticker3["original"])
450
451 ticker4 = portfolio.Trade.get_ticker("ETH", "ETC", market2, refresh=True)
452 ticker5 = portfolio.Trade.get_ticker("ETH", "ETC", market2)
453 self.assertEqual(1.2, ticker4["bid"])
454 self.assertDictEqual(ticker4, ticker5)
455
456 market3 = mock.Mock()
457 market3.fetch_ticker.side_effect = [
458 { "bid": 1, "ask": 3 },
459 { "bid": 1.2, "ask": 3.5 },
460 ]
461 ticker6 = portfolio.Trade.get_ticker("ETH", "ETC", market3)
462 portfolio.Trade.ticker_cache_timestamp -= 4
463 ticker7 = portfolio.Trade.get_ticker("ETH", "ETC", market3)
464 portfolio.Trade.ticker_cache_timestamp -= 2
465 ticker8 = portfolio.Trade.get_ticker("ETH", "ETC", market3)
466 self.assertDictEqual(ticker6, ticker7)
467 self.assertEqual(1.2, ticker8["bid"])
468
469 @unittest.skip("TODO")
470 def test_values_assertion(self):
471 pass
472
473 @unittest.skip("TODO")
474 def test_fetch_fees(self):
475 pass
476
477 @unittest.skip("TODO")
478 def test_compute_trades(self):
479 pass
480
481 @unittest.skip("TODO")
482 def test_action(self):
483 pass
484
485 @unittest.skip("TODO")
486 def test_action(self):
487 pass
488
489 @unittest.skip("TODO")
490 def test_order_action(self):
491 pass
492
493 @unittest.skip("TODO")
494 def test_prepare_order(self):
495 pass
496
497 @unittest.skip("TODO")
498 def test_all_orders(self):
499 pass
500
501 @unittest.skip("TODO")
502 def test_follow_orders(self):
503 pass
504
505 @unittest.skip("TODO")
506 def test__repr(self):
507 pass
508
509 def tearDown(self):
510 self.patcher.stop()
511
396if __name__ == '__main__': 512if __name__ == '__main__':
397 unittest.main() 513 unittest.main()