aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorIsmaël Bouya <ismael.bouya@normalesup.org>2018-08-26 22:22:03 +0200
committerIsmaël Bouya <ismael.bouya@normalesup.org>2018-08-26 22:22:03 +0200
commit8f98e46aa52f4e229ae4f44cd9cc49f9fad9c866 (patch)
treef512e943a84127881c41b498a3ce4d5d0ca0cdb4 /tests
parent445185355d0d13d8d7251fa9add8e249c5361aa7 (diff)
downloadTrader-8f98e46aa52f4e229ae4f44cd9cc49f9fad9c866.tar.gz
Trader-8f98e46aa52f4e229ae4f44cd9cc49f9fad9c866.tar.zst
Trader-8f98e46aa52f4e229ae4f44cd9cc49f9fad9c866.zip
Add increasing delay to fetching cryptoportfolio
Diffstat (limited to 'tests')
-rw-r--r--tests/helper.py1
-rw-r--r--tests/test_market.py2
-rw-r--r--tests/test_store.py50
3 files changed, 32 insertions, 21 deletions
diff --git a/tests/helper.py b/tests/helper.py
index 935e060..a2f8a22 100644
--- a/tests/helper.py
+++ b/tests/helper.py
@@ -45,6 +45,7 @@ class WebMockTestCase(unittest.TestCase):
45 worker_tag="", 45 worker_tag="",
46 worker_notify=None, 46 worker_notify=None,
47 worker_started=False, 47 worker_started=False,
48 poll_started_at=None,
48 callback=None), 49 callback=None),
49 mock.patch.multiple(portfolio.Computation, 50 mock.patch.multiple(portfolio.Computation,
50 computations=portfolio.Computation.computations), 51 computations=portfolio.Computation.computations),
diff --git a/tests/test_market.py b/tests/test_market.py
index 49d159c..e6e6f36 100644
--- a/tests/test_market.py
+++ b/tests/test_market.py
@@ -1033,7 +1033,7 @@ class ProcessorTest(WebMockTestCase):
1033 1033
1034 method, arguments = processor.method_arguments("wait_for_recent") 1034 method, arguments = processor.method_arguments("wait_for_recent")
1035 self.assertEqual(market.Portfolio.wait_for_recent, method) 1035 self.assertEqual(market.Portfolio.wait_for_recent, method)
1036 self.assertEqual(["delta", "poll"], arguments) 1036 self.assertEqual(["delta"], arguments)
1037 1037
1038 method, arguments = processor.method_arguments("prepare_trades") 1038 method, arguments = processor.method_arguments("prepare_trades")
1039 self.assertEqual(m.prepare_trades, method) 1039 self.assertEqual(m.prepare_trades, method)
diff --git a/tests/test_store.py b/tests/test_store.py
index 3097f6d..4ab9bdf 100644
--- a/tests/test_store.py
+++ b/tests/test_store.py
@@ -1430,22 +1430,8 @@ class PortfolioTest(WebMockTestCase):
1430 del(data["portfolio_2"]["weights"]) 1430 del(data["portfolio_2"]["weights"])
1431 market.Portfolio.data = store.LockedVar(data) 1431 market.Portfolio.data = store.LockedVar(data)
1432 1432
1433 market.Portfolio.parse_cryptoportfolio() 1433 with self.assertRaises(AssertionError):
1434 self.assertListEqual( 1434 market.Portfolio.parse_cryptoportfolio()
1435 ["medium", "high"],
1436 list(market.Portfolio.liquidities.get().keys()))
1437 self.assertEqual({}, market.Portfolio.liquidities.get("medium"))
1438
1439 with self.subTest(description="All missing weights"):
1440 data = store.json.loads(self.json_response, parse_int=D, parse_float=D)
1441 del(data["portfolio_1"]["weights"])
1442 del(data["portfolio_2"]["weights"])
1443 market.Portfolio.data = store.LockedVar(data)
1444
1445 market.Portfolio.parse_cryptoportfolio()
1446 self.assertEqual({}, market.Portfolio.liquidities.get("medium"))
1447 self.assertEqual({}, market.Portfolio.liquidities.get("high"))
1448 self.assertEqual(datetime.datetime(1,1,1), market.Portfolio.last_date.get())
1449 1435
1450 @mock.patch.object(store.dbs, "redis_connected") 1436 @mock.patch.object(store.dbs, "redis_connected")
1451 @mock.patch.object(store.dbs, "redis") 1437 @mock.patch.object(store.dbs, "redis")
@@ -1551,7 +1537,8 @@ class PortfolioTest(WebMockTestCase):
1551 1537
1552 @mock.patch.object(market.time, "sleep") 1538 @mock.patch.object(market.time, "sleep")
1553 @mock.patch.object(market.Portfolio, "get_cryptoportfolio") 1539 @mock.patch.object(market.Portfolio, "get_cryptoportfolio")
1554 def test_wait_for_recent(self, get_cryptoportfolio, sleep): 1540 @mock.patch.object(market.Portfolio, "next_wait_time")
1541 def test_wait_for_recent(self, next_wait_time, get_cryptoportfolio, sleep):
1555 self.call_count = 0 1542 self.call_count = 0
1556 def _get(refetch=False): 1543 def _get(refetch=False):
1557 if self.call_count != 0: 1544 if self.call_count != 0:
@@ -1563,6 +1550,7 @@ class PortfolioTest(WebMockTestCase):
1563 - store.datetime.timedelta(10)\ 1550 - store.datetime.timedelta(10)\
1564 + store.datetime.timedelta(self.call_count)) 1551 + store.datetime.timedelta(self.call_count))
1565 get_cryptoportfolio.side_effect = _get 1552 get_cryptoportfolio.side_effect = _get
1553 next_wait_time.return_value = 30
1566 1554
1567 market.Portfolio.wait_for_recent() 1555 market.Portfolio.wait_for_recent()
1568 sleep.assert_called_with(30) 1556 sleep.assert_called_with(30)
@@ -1608,7 +1596,7 @@ class PortfolioTest(WebMockTestCase):
1608 def test_start_worker(self): 1596 def test_start_worker(self):
1609 with mock.patch.object(store.Portfolio, "wait_for_notification") as notification: 1597 with mock.patch.object(store.Portfolio, "wait_for_notification") as notification:
1610 store.Portfolio.start_worker() 1598 store.Portfolio.start_worker()
1611 notification.assert_called_once_with(poll=30) 1599 notification.assert_called_once_with()
1612 1600
1613 self.assertEqual("lock", store.Portfolio.last_date.lock.__class__.__name__) 1601 self.assertEqual("lock", store.Portfolio.last_date.lock.__class__.__name__)
1614 self.assertEqual("lock", store.Portfolio.liquidities.lock.__class__.__name__) 1602 self.assertEqual("lock", store.Portfolio.liquidities.lock.__class__.__name__)
@@ -1626,7 +1614,7 @@ class PortfolioTest(WebMockTestCase):
1626 with mock.patch.object(store.Portfolio, "get_cryptoportfolio") as get,\ 1614 with mock.patch.object(store.Portfolio, "get_cryptoportfolio") as get,\
1627 mock.patch.object(store.Portfolio, "report") as report,\ 1615 mock.patch.object(store.Portfolio, "report") as report,\
1628 mock.patch.object(store.time, "sleep") as sleep: 1616 mock.patch.object(store.time, "sleep") as sleep:
1629 store.Portfolio.start_worker(poll=3) 1617 store.Portfolio.start_worker()
1630 store.Portfolio.stop_worker() 1618 store.Portfolio.stop_worker()
1631 store.Portfolio.worker.join() 1619 store.Portfolio.worker.join()
1632 get.assert_not_called() 1620 get.assert_not_called()
@@ -1640,8 +1628,10 @@ class PortfolioTest(WebMockTestCase):
1640 1628
1641 with mock.patch.object(store.Portfolio, "get_cryptoportfolio") as get,\ 1629 with mock.patch.object(store.Portfolio, "get_cryptoportfolio") as get,\
1642 mock.patch.object(store.Portfolio, "report") as report,\ 1630 mock.patch.object(store.Portfolio, "report") as report,\
1631 mock.patch.object(store.Portfolio, "next_wait_time") as wait,\
1643 mock.patch.object(store.time, "sleep") as sleep: 1632 mock.patch.object(store.time, "sleep") as sleep:
1644 store.Portfolio.start_worker(poll=3) 1633 wait.return_value = 3
1634 store.Portfolio.start_worker()
1645 1635
1646 store.Portfolio.worker_notify.set() 1636 store.Portfolio.worker_notify.set()
1647 1637
@@ -1667,4 +1657,24 @@ class PortfolioTest(WebMockTestCase):
1667 worker_notify.set.assert_called_once_with() 1657 worker_notify.set.assert_called_once_with()
1668 callback.wait.assert_called_once_with() 1658 callback.wait.assert_called_once_with()
1669 1659
1660 def test_next_wait_time(self):
1661 with self.subTest("first start"):
1662 self.assertEqual(30, store.Portfolio.next_wait_time())
1663 self.assertIsNotNone(store.Portfolio.poll_started_at)
1664 with self.subTest("25min"):
1665 store.Portfolio.poll_started_at = datetime.datetime.now() - datetime.timedelta(minutes=25)
1666 self.assertEqual(30, store.Portfolio.next_wait_time())
1667 with self.subTest("35min"):
1668 store.Portfolio.poll_started_at = datetime.datetime.now() - datetime.timedelta(minutes=35)
1669 self.assertEqual(60, store.Portfolio.next_wait_time())
1670 with self.subTest("1h15"):
1671 store.Portfolio.poll_started_at = datetime.datetime.now() - datetime.timedelta(minutes=75)
1672 self.assertEqual(300, store.Portfolio.next_wait_time())
1673 with self.subTest("5hours"):
1674 store.Portfolio.poll_started_at = datetime.datetime.now() - datetime.timedelta(hours=5)
1675 self.assertEqual(3600, store.Portfolio.next_wait_time())
1676 with self.subTest("overdue"), self.assertRaises(Exception):
1677 store.Portfolio.poll_started_at = datetime.datetime.now() - datetime.timedelta(hours=25)
1678 store.Portfolio.next_wait_time()
1679
1670 1680