From ad9dc230d1121cb1b418a30e90d4d6dace467868 Mon Sep 17 00:00:00 2001 From: Holger Nahrstaedt <holger@nahrstaedt.de> Date: Mon, 23 Apr 2018 13:52:31 +0200 Subject: [PATCH] Add votes command to cli cli * add votes command to view outgoing/incoming votes of an account Unit tests * improve unit tess for account and vote * Add test_instance to check if set_shared_steem_instance, shared_steem_instance is working * Add new command to test_cli --- beem/cli.py | 25 ++++++++ tests/beem/test_account.py | 22 +++---- tests/beem/test_cli.py | 7 +++ tests/beem/test_instance.py | 112 ++++++++++++++++++++++++++++++++++++ tests/beem/test_vote.py | 2 + 5 files changed, 154 insertions(+), 14 deletions(-) create mode 100644 tests/beem/test_instance.py diff --git a/beem/cli.py b/beem/cli.py index 86d365f8..4de008cb 100644 --- a/beem/cli.py +++ b/beem/cli.py @@ -16,6 +16,7 @@ from beem.profile import Profile from beem.witness import Witness, WitnessesRankedByVote, WitnessesVotedByAccount from beem.blockchain import Blockchain from beem.utils import formatTimeString +from beem.vote import AccountVotes, ActiveVotes from beem import exceptions from beem.version import version as __version__ from datetime import datetime, timedelta @@ -1215,6 +1216,30 @@ def witnesses(account, limit): witnesses.printAsTable() +@cli.command() +@click.argument('account', nargs=1, required=False) +@click.option('--direction', default="in", help="in or out (default: in)") +@click.option('--days', default=2, help="Limit shown vote history by this amount of days (default: 2)") +def votes(account, direction, days): + """ List outgoing/incoming account votes + """ + stm = shared_steem_instance() + if not account: + account = stm.config["default_account"] + utc = pytz.timezone('UTC') + limit_time = utc.localize(datetime.utcnow()) - timedelta(days=days) + if direction == "out": + votes = AccountVotes(account, steem_instance=stm) + votes.printAsTable(start=limit_time) + else: + account = Account(account, steem_instance=stm) + votes_list = [] + for v in account.history(start=limit_time, only_ops=["vote"]): + votes_list.append(v) + votes = ActiveVotes(votes_list, steem_instance=stm) + votes.printAsTable(votee=account["name"]) + + @cli.command() @click.argument('account', nargs=1, required=False) @click.option('--reward_steem', help='Amount of STEEM you would like to claim', default="0 STEEM") diff --git a/tests/beem/test_account.py b/tests/beem/test_account.py index 9ef30df0..2c0faa1e 100644 --- a/tests/beem/test_account.py +++ b/tests/beem/test_account.py @@ -200,31 +200,28 @@ class Testcases(unittest.TestCase): account = Account("gtg", steem_instance=stm) h_list = [] max_index = account.virtual_op_count() - for h in account.history(start=max_index - 4, use_block_num=False, batch_size=2, raw_output=False): + for h in account.history(start=max_index - 4, stop=max_index, use_block_num=False, batch_size=2, raw_output=False): h_list.append(h) self.assertEqual(len(h_list), 5) for i in range(1, 5): self.assertEqual(h_list[i]["index"] - h_list[i - 1]["index"], 1) h_list = [] - max_index = account.virtual_op_count() - for h in account.history(start=max_index - 4, use_block_num=False, batch_size=6, raw_output=False): + for h in account.history(start=max_index - 4, stop=max_index, use_block_num=False, batch_size=6, raw_output=False): h_list.append(h) self.assertEqual(len(h_list), 5) for i in range(1, 5): self.assertEqual(h_list[i]["index"] - h_list[i - 1]["index"], 1) h_list = [] - max_index = account.virtual_op_count() - for h in account.history(start=max_index - 4, use_block_num=False, batch_size=2, raw_output=True): + for h in account.history(start=max_index - 4, stop=max_index, use_block_num=False, batch_size=2, raw_output=True): h_list.append(h) self.assertEqual(len(h_list), 5) for i in range(1, 5): self.assertEqual(h_list[i][0] - h_list[i - 1][0], 1) h_list = [] - max_index = account.virtual_op_count() - for h in account.history(start=max_index - 4, use_block_num=False, batch_size=6, raw_output=True): + for h in account.history(start=max_index - 4, stop=max_index, use_block_num=False, batch_size=6, raw_output=True): h_list.append(h) self.assertEqual(len(h_list), 5) for i in range(1, 5): @@ -242,31 +239,28 @@ class Testcases(unittest.TestCase): account = Account("gtg", steem_instance=stm) h_list = [] max_index = account.virtual_op_count() - for h in account.history_reverse(stop=max_index - 4, use_block_num=False, batch_size=2, raw_output=False): + for h in account.history_reverse(start=max_index, stop=max_index - 4, use_block_num=False, batch_size=2, raw_output=False): h_list.append(h) self.assertEqual(len(h_list), 5) for i in range(1, 5): self.assertEqual(h_list[i]["index"] - h_list[i - 1]["index"], -1) h_list = [] - max_index = account.virtual_op_count() - for h in account.history_reverse(stop=max_index - 4, use_block_num=False, batch_size=6, raw_output=False): + for h in account.history_reverse(start=max_index, stop=max_index - 4, use_block_num=False, batch_size=6, raw_output=False): h_list.append(h) self.assertEqual(len(h_list), 5) for i in range(1, 5): self.assertEqual(h_list[i]["index"] - h_list[i - 1]["index"], -1) h_list = [] - max_index = account.virtual_op_count() - for h in account.history_reverse(stop=max_index - 4, use_block_num=False, batch_size=6, raw_output=True): + for h in account.history_reverse(start=max_index, stop=max_index - 4, use_block_num=False, batch_size=6, raw_output=True): h_list.append(h) self.assertEqual(len(h_list), 5) for i in range(1, 5): self.assertEqual(h_list[i][0] - h_list[i - 1][0], -1) h_list = [] - max_index = account.virtual_op_count() - for h in account.history_reverse(stop=max_index - 4, use_block_num=False, batch_size=2, raw_output=True): + for h in account.history_reverse(start=max_index, stop=max_index - 4, use_block_num=False, batch_size=2, raw_output=True): h_list.append(h) self.assertEqual(len(h_list), 5) for i in range(1, 5): diff --git a/tests/beem/test_cli.py b/tests/beem/test_cli.py index c17313ad..a31b6add 100644 --- a/tests/beem/test_cli.py +++ b/tests/beem/test_cli.py @@ -217,6 +217,13 @@ class Testcases(unittest.TestCase): result = runner.invoke(cli, ['witnesses']) self.assertEqual(result.exit_code, 0) + def test_votes(self): + runner = CliRunner() + result = runner.invoke(cli, ['votes', '--direction', 'out']) + self.assertEqual(result.exit_code, 0) + result = runner.invoke(cli, ['votes', '--direction', 'in']) + self.assertEqual(result.exit_code, 0) + def test_approvewitness(self): runner = CliRunner() result = runner.invoke(cli, ['-o', 'approvewitness', 'beem1'], input="test\n") diff --git a/tests/beem/test_instance.py b/tests/beem/test_instance.py new file mode 100644 index 00000000..ce1f3830 --- /dev/null +++ b/tests/beem/test_instance.py @@ -0,0 +1,112 @@ +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals +from builtins import range +from builtins import super +import mock +import string +import unittest +import random +from pprint import pprint +from beem import Steem +from beem.amount import Amount +from beem.witness import Witness +from beem.account import Account +from beem.instance import set_shared_steem_instance, shared_steem_instance, set_shared_config +from beem.blockchain import Blockchain +from beem.block import Block +from beem.market import Market +from beem.price import Price +from beem.comment import Comment +from beem.vote import Vote +from beem.wallet import Wallet +from beem.transactionbuilder import TransactionBuilder +from beembase.operations import Transfer +from beemgraphenebase.account import PasswordKey, PrivateKey, PublicKey +from beem.utils import parse_time, formatTimedelta +from beemgrapheneapi.rpcutils import NumRetriesReached + +# Py3 compatibility +import sys + +core_unit = "STM" + + +class Testcases(unittest.TestCase): + @classmethod + def setUpClass(cls): + stm = shared_steem_instance() + stm.config.refreshBackup() + stm.set_default_nodes("") + del stm + cls.url = "https://api.steemitdev.com" + bts = Steem( + node=[cls.url], + nobroadcast=True, + num_retries=10 + ) + set_shared_steem_instance(bts) + + @classmethod + def tearDownClass(cls): + stm = shared_steem_instance() + stm.config.recover_with_latest_backup() + + def test_account(self): + acc = Account("test") + self.assertEqual(acc.steem.rpc.url, self.url) + self.assertEqual(acc["balance"].steem.rpc.url, self.url) + + def test_amount(self): + o = Amount("1 SBD") + self.assertEqual(o.steem.rpc.url, self.url) + + def test_block(self): + o = Block(1) + self.assertEqual(o.steem.rpc.url, self.url) + + def test_blockchain(self): + o = Blockchain() + self.assertEqual(o.steem.rpc.url, self.url) + + def test_comment(self): + o = Comment("@gtg/witness-gtg-log") + self.assertEqual(o.steem.rpc.url, self.url) + + def test_market(self): + o = Market() + self.assertEqual(o.steem.rpc.url, self.url) + + def test_price(self): + o = Price(10.0, "STEEM/SBD") + self.assertEqual(o.steem.rpc.url, self.url) + + def test_vote(self): + o = Vote("@gtg/ffdhu-gtg-witness-log|gandalf") + self.assertEqual(o.steem.rpc.url, self.url) + + def test_wallet(self): + o = Wallet() + self.assertEqual(o.steem.rpc.url, self.url) + + def test_witness(self): + o = Witness("gtg") + self.assertEqual(o.steem.rpc.url, self.url) + + def test_transactionbuilder(self): + o = TransactionBuilder() + self.assertEqual(o.steem.rpc.url, self.url) + + def test_steem(self): + stm = shared_steem_instance() + stm = Steem() + del stm + o = shared_steem_instance() + self.assertEqual(o.rpc.url, self.url) + + def test_config(self): + set_shared_config({"node": [self.url]}) + set_shared_steem_instance(None) + o = shared_steem_instance() + self.assertEqual(o.rpc.url, self.url) diff --git a/tests/beem/test_vote.py b/tests/beem/test_vote.py index c93c1cdd..df7b611b 100644 --- a/tests/beem/test_vote.py +++ b/tests/beem/test_vote.py @@ -120,6 +120,8 @@ class Testcases(unittest.TestCase): bts = self.appbase votes = ActiveVotes(self.authorperm, steem_instance=bts) votes.printAsTable() + vote_list = votes.get_list() + self.assertTrue(isinstance(vote_list, list)) @parameterized.expand([ ("non_appbase"), -- GitLab