From dba56f742c7dde6b1d1c38e8df38f22eed1c4a62 Mon Sep 17 00:00:00 2001
From: matograine <tom.ngr@zaclys.net>
Date: Thu, 12 Nov 2020 19:11:51 +0100
Subject: [PATCH] [enh] #218 add option "full-pubkey" to command `history`   *
 modify related test.

---
 silkaj/tx_history.py     | 27 ++++++++++++++++-----------
 tests/test_tx_history.py | 19 +++++++++++++++++--
 2 files changed, 33 insertions(+), 13 deletions(-)

diff --git a/silkaj/tx_history.py b/silkaj/tx_history.py
index 2dba83d8..4ad4bcba 100644
--- a/silkaj/tx_history.py
+++ b/silkaj/tx_history.py
@@ -33,8 +33,9 @@ from silkaj.tools import CurrencySymbol
 @command("history", help="Display transaction history")
 @argument("pubkey")
 @option("--uids", "-u", is_flag=True, help="Display uids")
+@option("--full-pubkey", "-f", is_flag=True, help="Display full-length pubkeys")
 @coroutine
-async def transaction_history(pubkey, uids):
+async def transaction_history(pubkey, uids, full_pubkey):
     if check_pubkey_format(pubkey):
         pubkey = validate_checksum(pubkey)
 
@@ -47,7 +48,7 @@ async def transaction_history(pubkey, uids):
     await get_transactions_history(client, pubkey, received_txs, sent_txs)
     remove_duplicate_txs(received_txs, sent_txs)
     txs_list = await generate_table(
-        received_txs, sent_txs, pubkey, ud_value, currency_symbol, uids
+        received_txs, sent_txs, pubkey, ud_value, currency_symbol, uids, full_pubkey
     )
     table = Texttable(max_width=get_terminal_size()[0])
     table.add_rows(txs_list)
@@ -100,7 +101,7 @@ def remove_duplicate_txs(received_txs, sent_txs):
 
 
 async def generate_table(
-    received_txs, sent_txs, pubkey, ud_value, currency_symbol, uids
+    received_txs, sent_txs, pubkey, ud_value, currency_symbol, uids, full_pubkey
 ):
     """
     Generate information in a list of lists for texttabe
@@ -110,8 +111,10 @@ async def generate_table(
     """
 
     received_txs_table, sent_txs_table = list(), list()
-    await parse_received_tx(received_txs_table, received_txs, pubkey, ud_value, uids)
-    await parse_sent_tx(sent_txs_table, sent_txs, pubkey, ud_value, uids)
+    await parse_received_tx(
+        received_txs_table, received_txs, pubkey, ud_value, uids, full_pubkey
+    )
+    await parse_sent_tx(sent_txs_table, sent_txs, pubkey, ud_value, uids, full_pubkey)
     txs_table = received_txs_table + sent_txs_table
 
     table_titles = [
@@ -127,7 +130,9 @@ async def generate_table(
     return txs_table
 
 
-async def parse_received_tx(received_txs_table, received_txs, pubkey, ud_value, uids):
+async def parse_received_tx(
+    received_txs_table, received_txs, pubkey, ud_value, uids, full_pubkey
+):
     """
     Extract issuers’ pubkeys
     Get identities from pubkeys
@@ -147,7 +152,7 @@ async def parse_received_tx(received_txs_table, received_txs, pubkey, ud_value,
         tx_list.append(str())
         for i, issuer in enumerate(received_tx.issuers):
             tx_list[1] += prefix(None, None, i) + assign_idty_from_pubkey(
-                issuer, identities
+                issuer, identities, full_pubkey
             )
         amounts = tx_amount(received_tx, pubkey, received_func)[0]
         tx_list.append(amounts / 100)
@@ -156,7 +161,7 @@ async def parse_received_tx(received_txs_table, received_txs, pubkey, ud_value,
         received_txs_table.append(tx_list)
 
 
-async def parse_sent_tx(sent_txs_table, sent_txs, pubkey, ud_value, uids):
+async def parse_sent_tx(sent_txs_table, sent_txs, pubkey, ud_value, uids, full_pubkey):
     """
     Extract recipients’ pubkeys from outputs
     Get identities from pubkeys
@@ -196,7 +201,7 @@ async def parse_sent_tx(sent_txs_table, sent_txs, pubkey, ud_value, uids):
                     round(neg(amount_in_current_base(output)) / ud_value, 2)
                 )
                 tx_list[1] += prefix(tx_list[1], outputs, 0) + assign_idty_from_pubkey(
-                    output.condition.left.pubkey, identities
+                    output.condition.left.pubkey, identities, full_pubkey
                 )
         tx_list.append(amounts)
         tx_list.append(amounts_ud)
@@ -241,8 +246,8 @@ def output_available(condition, comparison, value):
         return False
 
 
-def assign_idty_from_pubkey(pubkey, identities):
-    idty = display_pubkey_and_checksum(pubkey, True)
+def assign_idty_from_pubkey(pubkey, identities, full_pubkey):
+    idty = display_pubkey_and_checksum(pubkey, short=not full_pubkey)
     for identity in identities:
         if pubkey == identity["pubkey"]:
             idty = "{0} - {1}".format(
diff --git a/tests/test_tx_history.py b/tests/test_tx_history.py
index 3f9e5949..15677a12 100644
--- a/tests/test_tx_history.py
+++ b/tests/test_tx_history.py
@@ -32,16 +32,31 @@ async def test_tx_history_generate_table():
     pubkey = "78ZwwgpgdH5uLZLbThUQH7LKwPgjMunYfLiCfUCySkM8"
 
     received_txs, sent_txs = list(), list()
-    await tx_history.get_transactions_history(client, pubkey, received_txs, sent_txs)
+    await tx_history.get_transactions_history(
+        client,
+        pubkey,
+        received_txs,
+        sent_txs,
+    )
 
     tx_history.remove_duplicate_txs(received_txs, sent_txs)
     txs_list = await tx_history.generate_table(
-        received_txs, sent_txs, pubkey, ud_value, currency, uids
+        received_txs, sent_txs, pubkey, ud_value, currency, uids, full_pubkey=False
+    )
+    txs_list_full = await tx_history.generate_table(
+        received_txs, sent_txs, pubkey, ud_value, currency, uids, full_pubkey=True
     )
     await client.close()
 
     for tx_list in txs_list:
         assert len(tx_list) == table_columns
+    assert "…:" in txs_list[1][1]
+    assert len(txs_list[1][1]) == 13
+
+    assert not "…:" in txs_list_full[1][1]
+    assert ":" in txs_list_full[1][1]
+    # this length is not true for multisig txs, which are very unlikely for now.
+    assert len(txs_list_full[1][1]) == 47 or len(txs_list_full[1][1]) == 48
 
 
 @pytest.mark.parametrize(
-- 
GitLab