From 1b04f2559bbac1b12909d78d2bc6def19927290d 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     | 30 ++++++++++++++++++------------
 tests/test_tx_history.py | 34 +++++++++++++++++++++++++++++++++-
 2 files changed, 51 insertions(+), 13 deletions(-)

diff --git a/silkaj/tx_history.py b/silkaj/tx_history.py
index 3613b8f2..aa5b409c 100644
--- a/silkaj/tx_history.py
+++ b/silkaj/tx_history.py
@@ -35,8 +35,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)
 
@@ -49,7 +50,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)
@@ -102,7 +103,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
@@ -112,8 +113,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 = [
@@ -129,7 +132,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
@@ -149,7 +154,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)
@@ -158,7 +163,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
@@ -198,7 +203,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)
@@ -243,12 +248,13 @@ 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(
-                identity["uid"], display_pubkey_and_checksum(pubkey, True)
+                identity["uid"],
+                display_pubkey_and_checksum(pubkey, short=not full_pubkey),
             )
     return idty
 
diff --git a/tests/test_tx_history.py b/tests/test_tx_history.py
index 13f1f744..06c42fcd 100644
--- a/tests/test_tx_history.py
+++ b/tests/test_tx_history.py
@@ -14,7 +14,6 @@ GNU Affero General Public License for more details.
 You should have received a copy of the GNU Affero General Public License
 along with Silkaj. If not, see <https://www.gnu.org/licenses/>.
 """
-
 import pytest
 from duniterpy.api.client import Client
 
@@ -41,6 +40,7 @@ async def test_tx_history_generate_table(monkeypatch):
     received_txs, sent_txs = list(), list()
     await patched_get_transactions_history(client, pubkey, received_txs, sent_txs)
 
+    # simple table
     txs_list = await tx_history.generate_table(
         received_txs,
         sent_txs,
@@ -48,12 +48,14 @@ async def test_tx_history_generate_table(monkeypatch):
         ud_value,
         currency,
         uids=False,
+        full_pubkey=False,
     )
     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
 
+    # with uids
     txs_list_uids = await tx_history.generate_table(
         received_txs,
         sent_txs,
@@ -61,6 +63,7 @@ async def test_tx_history_generate_table(monkeypatch):
         ud_value,
         currency,
         uids=True,
+        full_pubkey=False,
     )
     uid_tested = False
     for tx_list in txs_list_uids:
@@ -77,6 +80,35 @@ async def test_tx_history_generate_table(monkeypatch):
     else:
         assert len(txs_list_uids[1][1]) >= 17
 
+    # with full pubkeys
+    txs_list_full = await tx_history.generate_table(
+        received_txs, sent_txs, pubkey, ud_value, currency, uids=False, full_pubkey=True
+    )
+    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
+
+    # with full pubkeys and uids
+    txs_list_uids_full = await tx_history.generate_table(
+        received_txs, sent_txs, pubkey, ud_value, currency, uids=True, full_pubkey=True
+    )
+    uid_tested = False
+    assert not "…:" in txs_list_uids_full[1][1]
+    assert ":" in txs_list_uids_full[1][1]
+    for tx_list in txs_list_uids_full:
+        if " - " in tx_list[1]:
+            uid_tested = True
+            break
+    if not uid_tested:
+        # uids are not displayed, or display has changed.
+        assert False
+    # tested str length are not true for multisig txs, which are very unlikely for now.
+    if not " - " in txs_list_uids_full[1][1]:
+        assert len(txs_list_uids_full[1][1]) == 47 or len(txs_list_full[1][1]) == 48
+    else:
+        assert len(txs_list_uids_full[1][1]) >= 51 or len(txs_list_full[1][1]) >= 52
+
 
 @pytest.mark.parametrize(
     "tx_addresses, outputs, occurence, return_value",
-- 
GitLab