diff options
Diffstat (limited to 'test.py')
-rw-r--r-- | test.py | 140 |
1 files changed, 136 insertions, 4 deletions
@@ -1458,6 +1458,25 @@ class TradeTest(WebMockTestCase): | |||
1458 | D("0.125"), "BTC", "long", self.m, | 1458 | D("0.125"), "BTC", "long", self.m, |
1459 | trade, close_if_possible=False) | 1459 | trade, close_if_possible=False) |
1460 | 1460 | ||
1461 | with self.subTest(action="dispose", inverted=False, close_if_possible=True): | ||
1462 | filled_amount.return_value = portfolio.Amount("FOO", "60") | ||
1463 | compute_value.return_value = D("0.125") | ||
1464 | |||
1465 | value_from = portfolio.Amount("BTC", "10") | ||
1466 | value_from.rate = D("0.1") | ||
1467 | value_from.linked_to = portfolio.Amount("FOO", "100") | ||
1468 | value_to = portfolio.Amount("BTC", "1") | ||
1469 | trade = portfolio.Trade(value_from, value_to, "FOO", self.m) | ||
1470 | |||
1471 | trade.prepare_order(close_if_possible=True) | ||
1472 | |||
1473 | filled_amount.assert_called_with(in_base_currency=False) | ||
1474 | compute_value.assert_called_with(self.m.get_ticker.return_value, "sell", compute_value="default") | ||
1475 | self.assertEqual(1, len(trade.orders)) | ||
1476 | Order.assert_called_with("sell", portfolio.Amount("FOO", 30), | ||
1477 | D("0.125"), "BTC", "long", self.m, | ||
1478 | trade, close_if_possible=True) | ||
1479 | |||
1461 | with self.subTest(action="acquire", inverted=False): | 1480 | with self.subTest(action="acquire", inverted=False): |
1462 | filled_amount.return_value = portfolio.Amount("BTC", "3") | 1481 | filled_amount.return_value = portfolio.Amount("BTC", "3") |
1463 | compute_value.return_value = D("0.125") | 1482 | compute_value.return_value = D("0.125") |
@@ -1812,7 +1831,7 @@ class OrderTest(WebMockTestCase): | |||
1812 | 1831 | ||
1813 | order.cancel() | 1832 | order.cancel() |
1814 | self.m.ccxt.cancel_order.assert_called_with(42) | 1833 | self.m.ccxt.cancel_order.assert_called_with(42) |
1815 | fetch.assert_called_once() | 1834 | fetch.assert_called_once_with(force=True) |
1816 | self.m.report.log_debug_action.assert_not_called() | 1835 | self.m.report.log_debug_action.assert_not_called() |
1817 | 1836 | ||
1818 | def test_dust_amount_remaining(self): | 1837 | def test_dust_amount_remaining(self): |
@@ -1966,7 +1985,7 @@ class OrderTest(WebMockTestCase): | |||
1966 | } | 1985 | } |
1967 | order.fetch() | 1986 | order.fetch() |
1968 | 1987 | ||
1969 | self.m.ccxt.fetch_order.assert_called_once() | 1988 | self.m.ccxt.fetch_order.assert_called_once_with(45, symbol="ETH") |
1970 | fetch_mouvements.assert_called_once() | 1989 | fetch_mouvements.assert_called_once() |
1971 | self.assertEqual("foo", order.status) | 1990 | self.assertEqual("foo", order.status) |
1972 | self.assertEqual("timestamp", order.timestamp) | 1991 | self.assertEqual("timestamp", order.timestamp) |
@@ -1982,7 +2001,7 @@ class OrderTest(WebMockTestCase): | |||
1982 | fetch_mouvements.assert_not_called() | 2001 | fetch_mouvements.assert_not_called() |
1983 | 2002 | ||
1984 | order.fetch(force=True) | 2003 | order.fetch(force=True) |
1985 | self.m.ccxt.fetch_order.assert_called_once() | 2004 | self.m.ccxt.fetch_order.assert_called_once_with(45, symbol="ETH") |
1986 | fetch_mouvements.assert_called_once() | 2005 | fetch_mouvements.assert_called_once() |
1987 | 2006 | ||
1988 | self.m.ccxt.fetch_order.reset_mock() | 2007 | self.m.ccxt.fetch_order.reset_mock() |
@@ -1990,7 +2009,7 @@ class OrderTest(WebMockTestCase): | |||
1990 | 2009 | ||
1991 | time_mock.return_value = time + 19 | 2010 | time_mock.return_value = time + 19 |
1992 | order.fetch() | 2011 | order.fetch() |
1993 | self.m.ccxt.fetch_order.assert_called_once() | 2012 | self.m.ccxt.fetch_order.assert_called_once_with(45, symbol="ETH") |
1994 | fetch_mouvements.assert_called_once() | 2013 | fetch_mouvements.assert_called_once() |
1995 | self.m.report.log_debug_action.assert_not_called() | 2014 | self.m.report.log_debug_action.assert_not_called() |
1996 | 2015 | ||
@@ -2586,6 +2605,119 @@ class ReportStoreTest(WebMockTestCase): | |||
2586 | 2605 | ||
2587 | @unittest.skipUnless("unit" in limits, "Unit skipped") | 2606 | @unittest.skipUnless("unit" in limits, "Unit skipped") |
2588 | class HelperTest(WebMockTestCase): | 2607 | class HelperTest(WebMockTestCase): |
2608 | def test_make_order(self): | ||
2609 | self.m.get_ticker.return_value = { | ||
2610 | "inverted": False, | ||
2611 | "average": D("0.1"), | ||
2612 | "bid": D("0.09"), | ||
2613 | "ask": D("0.11"), | ||
2614 | } | ||
2615 | |||
2616 | with self.subTest(description="nominal case"): | ||
2617 | helper.make_order(self.m, 10, "ETH") | ||
2618 | |||
2619 | self.m.report.log_stage.assert_has_calls([ | ||
2620 | mock.call("make_order_begin"), | ||
2621 | mock.call("make_order_end"), | ||
2622 | ]) | ||
2623 | self.m.balances.fetch_balances.assert_has_calls([ | ||
2624 | mock.call(tag="make_order_begin"), | ||
2625 | mock.call(tag="make_order_end"), | ||
2626 | ]) | ||
2627 | self.m.trades.all.append.assert_called_once() | ||
2628 | trade = self.m.trades.all.append.mock_calls[0][1][0] | ||
2629 | self.assertEqual(False, trade.orders[0].close_if_possible) | ||
2630 | self.assertEqual(0, trade.value_from) | ||
2631 | self.assertEqual("ETH", trade.currency) | ||
2632 | self.assertEqual("BTC", trade.base_currency) | ||
2633 | self.m.report.log_orders.assert_called_once_with([trade.orders[0]], None, "average") | ||
2634 | self.m.trades.run_orders.assert_called_once_with() | ||
2635 | self.m.follow_orders.assert_called_once_with() | ||
2636 | |||
2637 | order = trade.orders[0] | ||
2638 | self.assertEqual(D("0.10"), order.rate) | ||
2639 | |||
2640 | self.m.reset_mock() | ||
2641 | with self.subTest(compute_value="default"): | ||
2642 | helper.make_order(self.m, 10, "ETH", action="dispose", | ||
2643 | compute_value="ask") | ||
2644 | |||
2645 | trade = self.m.trades.all.append.mock_calls[0][1][0] | ||
2646 | order = trade.orders[0] | ||
2647 | self.assertEqual(D("0.11"), order.rate) | ||
2648 | |||
2649 | self.m.reset_mock() | ||
2650 | with self.subTest(follow=False): | ||
2651 | result = helper.make_order(self.m, 10, "ETH", follow=False) | ||
2652 | |||
2653 | self.m.report.log_stage.assert_has_calls([ | ||
2654 | mock.call("make_order_begin"), | ||
2655 | mock.call("make_order_end_not_followed"), | ||
2656 | ]) | ||
2657 | self.m.balances.fetch_balances.assert_called_once_with(tag="make_order_begin") | ||
2658 | |||
2659 | self.m.trades.all.append.assert_called_once() | ||
2660 | trade = self.m.trades.all.append.mock_calls[0][1][0] | ||
2661 | self.assertEqual(0, trade.value_from) | ||
2662 | self.assertEqual("ETH", trade.currency) | ||
2663 | self.assertEqual("BTC", trade.base_currency) | ||
2664 | self.m.report.log_orders.assert_called_once_with([trade.orders[0]], None, "average") | ||
2665 | self.m.trades.run_orders.assert_called_once_with() | ||
2666 | self.m.follow_orders.assert_not_called() | ||
2667 | self.assertEqual(trade.orders[0], result) | ||
2668 | |||
2669 | self.m.reset_mock() | ||
2670 | with self.subTest(base_currency="USDT"): | ||
2671 | helper.make_order(self.m, 1, "BTC", base_currency="USDT") | ||
2672 | |||
2673 | trade = self.m.trades.all.append.mock_calls[0][1][0] | ||
2674 | self.assertEqual("BTC", trade.currency) | ||
2675 | self.assertEqual("USDT", trade.base_currency) | ||
2676 | |||
2677 | self.m.reset_mock() | ||
2678 | with self.subTest(close_if_possible=True): | ||
2679 | helper.make_order(self.m, 10, "ETH", close_if_possible=True) | ||
2680 | |||
2681 | trade = self.m.trades.all.append.mock_calls[0][1][0] | ||
2682 | self.assertEqual(True, trade.orders[0].close_if_possible) | ||
2683 | |||
2684 | self.m.reset_mock() | ||
2685 | with self.subTest(action="dispose"): | ||
2686 | helper.make_order(self.m, 10, "ETH", action="dispose") | ||
2687 | |||
2688 | trade = self.m.trades.all.append.mock_calls[0][1][0] | ||
2689 | self.assertEqual(0, trade.value_to) | ||
2690 | self.assertEqual(1, trade.value_from.value) | ||
2691 | self.assertEqual("ETH", trade.currency) | ||
2692 | self.assertEqual("BTC", trade.base_currency) | ||
2693 | |||
2694 | self.m.reset_mock() | ||
2695 | with self.subTest(compute_value="default"): | ||
2696 | helper.make_order(self.m, 10, "ETH", action="dispose", | ||
2697 | compute_value="bid") | ||
2698 | |||
2699 | trade = self.m.trades.all.append.mock_calls[0][1][0] | ||
2700 | self.assertEqual(D("0.9"), trade.value_from.value) | ||
2701 | |||
2702 | def test_user_market(self): | ||
2703 | with mock.patch("helper.main_fetch_markets") as main_fetch_markets,\ | ||
2704 | mock.patch("helper.main_parse_config") as main_parse_config: | ||
2705 | with self.subTest(debug=False): | ||
2706 | main_parse_config.return_value = ["pg_config", "report_path"] | ||
2707 | main_fetch_markets.return_value = [({"key": "market_config"},)] | ||
2708 | m = helper.get_user_market("config_path.ini", 1) | ||
2709 | |||
2710 | self.assertIsInstance(m, market.Market) | ||
2711 | self.assertFalse(m.debug) | ||
2712 | |||
2713 | with self.subTest(debug=True): | ||
2714 | main_parse_config.return_value = ["pg_config", "report_path"] | ||
2715 | main_fetch_markets.return_value = [({"key": "market_config"},)] | ||
2716 | m = helper.get_user_market("config_path.ini", 1, debug=True) | ||
2717 | |||
2718 | self.assertIsInstance(m, market.Market) | ||
2719 | self.assertTrue(m.debug) | ||
2720 | |||
2589 | def test_main_store_report(self): | 2721 | def test_main_store_report(self): |
2590 | file_open = mock.mock_open() | 2722 | file_open = mock.mock_open() |
2591 | with self.subTest(file=None), mock.patch("__main__.open", file_open): | 2723 | with self.subTest(file=None), mock.patch("__main__.open", file_open): |