diff --git a/silkaj/money/balance.py b/silkaj/money/balance.py index 520b9a8f82af6dd9b563ce05d417d70e07002aae..8fff6ecfd0d8a3397be3f6f64b7eff1ab76f4e0a 100644 --- a/silkaj/money/balance.py +++ b/silkaj/money/balance.py @@ -92,15 +92,17 @@ def show_amount_from_pubkey(label: str, inputs_balance: List[int]) -> None: display.append(["User identifier", member["uid"]]) if totalAmountInput - balance != 0: - tui.display_amount(display, "Blockchain", balance, ud_value, currency_symbol) - tui.display_amount( + m_tools.display_amount( + display, "Blockchain", balance, ud_value, currency_symbol + ) + m_tools.display_amount( display, "Pending transaction", (totalAmountInput - balance), ud_value, currency_symbol, ) - tui.display_amount( + m_tools.display_amount( display, "Total amount", totalAmountInput, ud_value, currency_symbol ) display.append( diff --git a/silkaj/money/tools.py b/silkaj/money/tools.py index 2ec03b762763b31eb8075d1c3922a0a18ce1d2ff..2d5032e7faf3c62c063cb9a38a780d107253da35 100644 --- a/silkaj/money/tools.py +++ b/silkaj/money/tools.py @@ -16,10 +16,38 @@ import functools from typing import List, Tuple, Union -from duniterpy.api.bma import blockchain, tx +from duniterpy.api import bma from duniterpy.documents.transaction import InputSource, OutputSource +from silkaj import wot_tools from silkaj.network import client_instance +from silkaj.public_key import gen_pubkey_checksum + + +def display_amount( + tx: List, message: str, amount: float, ud_value: float, currency_symbol: str +) -> None: + """ + Displays an amount in unit and relative reference. + """ + UD_amount = str(round((amount / ud_value), 2)) + unit_amount = str(amount / 100) + tx.append( + [ + f"{message} (unit|relative)", + f"{unit_amount} {currency_symbol} | {UD_amount} UD {currency_symbol}", + ] + ) + + +def display_pubkey(tx: List, message: str, pubkey: str) -> None: + """ + Displays a pubkey and the eventually associated identity + """ + tx.append([f"{message} (pubkey:checksum)", gen_pubkey_checksum(pubkey)]) + idty = wot_tools.is_member(pubkey) + if idty: + tx.append([f"{message} (id)", idty["uid"]]) def get_amount_from_pubkey(pubkey: str) -> List[int]: @@ -34,7 +62,7 @@ def get_amount_from_pubkey(pubkey: str) -> List[int]: def get_sources(pubkey: str) -> Tuple[List[InputSource], int]: client = client_instance() # Sources written into the blockchain - sources = client(tx.sources, pubkey) + sources = client(bma.tx.sources, pubkey) listinput = [] amount = 0 @@ -52,7 +80,7 @@ def get_sources(pubkey: str) -> Tuple[List[InputSource], int]: amount += amount_in_current_base(listinput[-1]) # pending source - history = (client(tx.pending, pubkey))["history"] + history = (client(bma.tx.pending, pubkey))["history"] pendings = history["sending"] + history["receiving"] + history["pending"] # add pending output @@ -87,9 +115,9 @@ def get_sources(pubkey: str) -> Tuple[List[InputSource], int]: @functools.lru_cache(maxsize=1) def get_ud_value() -> int: client = client_instance() - blockswithud = client(blockchain.ud) + blockswithud = client(bma.blockchain.ud) NBlastUDblock = blockswithud["result"]["blocks"][-1] - lastUDblock = client(blockchain.block, NBlastUDblock) + lastUDblock = client(bma.blockchain.block, NBlastUDblock) return lastUDblock["dividend"] * 10 ** lastUDblock["unitbase"] diff --git a/silkaj/money/transfer.py b/silkaj/money/transfer.py index bc5d2a0dfd5358211d39364d48245124d1fe4ad1..c1b89059949c377e077fe3a18d702e38a66c2209 100644 --- a/silkaj/money/transfer.py +++ b/silkaj/money/transfer.py @@ -332,35 +332,35 @@ def gen_confirmation_table( total_tx_amount = sum(tx_amounts) tx = [] # type: List[List[str]] # display account situation - tui.display_amount( + m_tools.display_amount( tx, "Initial balance", pubkey_amount, ud_value, currency_symbol, ) - tui.display_amount( + m_tools.display_amount( tx, "Total transaction amount", total_tx_amount, ud_value, currency_symbol, ) - tui.display_amount( + m_tools.display_amount( tx, "Balance after transaction", (pubkey_amount - total_tx_amount), ud_value, currency_symbol, ) - tui.display_pubkey(tx, "From", issuer_pubkey) + m_tools.display_pubkey(tx, "From", issuer_pubkey) # display outputs and amounts for outputAddress, tx_amount in zip(outputAddresses, tx_amounts): - tui.display_pubkey(tx, "To", outputAddress) - tui.display_amount(tx, "Amount", tx_amount, ud_value, currency_symbol) + m_tools.display_pubkey(tx, "To", outputAddress) + m_tools.display_amount(tx, "Amount", tx_amount, ud_value, currency_symbol) # display last informations if outputBackChange: - tui.display_pubkey(tx, "Backchange", outputBackChange) + m_tools.display_pubkey(tx, "Backchange", outputBackChange) tx.append(["Comment", comment]) return tx diff --git a/silkaj/tui.py b/silkaj/tui.py index ed9543b8f26f9ec26d355116c98042539204cc47..850a83e40409467c1f40b99c0c56d947022062e4 100644 --- a/silkaj/tui.py +++ b/silkaj/tui.py @@ -21,38 +21,11 @@ from typing import Dict, List, Union import click from texttable import Texttable -from silkaj import constants, wot_tools -from silkaj.public_key import gen_pubkey_checksum +from silkaj import constants VERT_TABLE_CHARS = ["─", "│", "│", "â•"] -def display_amount( - tx: List, message: str, amount: float, ud_value: float, currency_symbol: str -) -> None: - """ - Displays an amount in unit and relative reference. - """ - UD_amount = str(round((amount / ud_value), 2)) - unit_amount = str(amount / 100) - tx.append( - [ - f"{message} (unit|relative)", - f"{unit_amount} {currency_symbol} | {UD_amount} UD {currency_symbol}", - ] - ) - - -def display_pubkey(tx: List, message: str, pubkey: str) -> None: - """ - Displays a pubkey and the eventually associated identity - """ - tx.append([f"{message} (pubkey:checksum)", gen_pubkey_checksum(pubkey)]) - idty = wot_tools.is_member(pubkey) - if idty: - tx.append([f"{message} (id)", idty["uid"]]) - - def send_doc_confirmation(document_name: str) -> None: if not click.confirm(f"Do you confirm sending this {document_name}?"): sys.exit(constants.SUCCESS_EXIT_STATUS) diff --git a/tests/money/test_tools.py b/tests/money/test_tools.py index d3e439200e28788cec160294f4bfbae972be4a23..756a953e5183e5e4687ff1b8b45cf1433f797202 100644 --- a/tests/money/test_tools.py +++ b/tests/money/test_tools.py @@ -14,12 +14,52 @@ # along with Silkaj. If not, see <https://www.gnu.org/licenses/>. import duniterpy.api.bma.tx as bma_tx +import pytest from click.testing import CliRunner +from silkaj import wot_tools from silkaj.cli import cli -from silkaj.constants import FAILURE_EXIT_STATUS -from silkaj.money.tools import get_sources +from silkaj.constants import FAILURE_EXIT_STATUS, G1_SYMBOL +from silkaj.money import tools as m_tools from silkaj.public_key import gen_pubkey_checksum +from tests.patched.test_constants import mock_ud_value +from tests.patched.wot import patched_is_member + + +# display_amount() +@pytest.mark.parametrize( + "message, amount, currency_symbol", [("Total", 1000, G1_SYMBOL)] +) +def test_display_amount(message, amount, currency_symbol): + amount_UD = round(amount / mock_ud_value, 2) + expected = [ + [ + f"{message} (unit|relative)", + f"{str(amount / 100)} {currency_symbol} | {str(amount_UD)} UD {currency_symbol}", + ] + ] + tx = [] + m_tools.display_amount(tx, message, amount, mock_ud_value, currency_symbol) + assert tx == expected + + +# display_pubkey() +@pytest.mark.parametrize( + "message, pubkey, uid", + [ + ("From", "CtM5RZHopnSRAAoWNgTWrUhDEmspcCAxn6fuCEWDWudp", "riri"), + ("To", "DBM6F5ChMJzpmkUdL5zD9UXKExmZGfQ1AgPDQy4MxSBw", ""), + ], +) +def test_display_pubkey(message, pubkey, uid, monkeypatch): + monkeypatch.setattr(wot_tools, "is_member", patched_is_member) + + expected = [[f"{message} (pubkey:checksum)", gen_pubkey_checksum(pubkey)]] + if uid: + expected.append([f"{message} (id)", uid]) + tx = [] + m_tools.display_pubkey(tx, message, pubkey) + assert tx == expected def test_get_sources(monkeypatch): @@ -99,7 +139,9 @@ yJDIx0UHON4jYkqVKeD77+nrOl8jVtonLt3ZYqd1fhi1Cw==" monkeypatch.setattr(bma_tx, "sources", patched_tx_sources) monkeypatch.setattr(bma_tx, "pending", patched_tx_pending) - listinput, balance = get_sources("AhRMHUxMPXSeG7qXZrE6qCdjwK9p2bu5Eqei7xAWVEDK") + listinput, balance = m_tools.get_sources( + "AhRMHUxMPXSeG7qXZrE6qCdjwK9p2bu5Eqei7xAWVEDK" + ) assert len(listinput) == 2 # test SIG() only source is used assert balance == 10000 # 10 in unitbase 3 diff --git a/tests/money/test_transfer.py b/tests/money/test_transfer.py index 07b3ab84effe8868c5969200f69c74042f3d7626..57d9316244ff49b6540c5f9868ac7f2ed1b9ec67 100644 --- a/tests/money/test_transfer.py +++ b/tests/money/test_transfer.py @@ -32,7 +32,6 @@ from silkaj.cli import cli from silkaj.constants import CENT_MULT_TO_UNIT, G1_SYMBOL from silkaj.money import tools as m_tools from silkaj.money import transfer -from silkaj.tui import display_amount, display_pubkey from tests.patched.auth import patched_auth_method from tests.patched.blockchain_tools import fake_block_id, patched_get_head_block from tests.patched.money import Counter, patched_get_sources, patched_get_ud_value @@ -120,35 +119,35 @@ def test_gen_confirmation_table( expected = [] total_tx_amount = sum(tx_amounts) # display account situation - display_amount( + m_tools.display_amount( expected, "Initial balance", pubkey_balance, mock_ud_value, G1_SYMBOL, ) - display_amount( + m_tools.display_amount( expected, "Total transaction amount", total_tx_amount, mock_ud_value, G1_SYMBOL, ) - display_amount( + m_tools.display_amount( expected, "Balance after transaction", (pubkey_balance - total_tx_amount), mock_ud_value, G1_SYMBOL, ) - display_pubkey(expected, "From", issuer_pubkey) + m_tools.display_pubkey(expected, "From", issuer_pubkey) # display recipients and amounts for outputAddress, tx_amount in zip(outputAddresses, tx_amounts): - display_pubkey(expected, "To", outputAddress) - display_amount(expected, "Amount", tx_amount, mock_ud_value, G1_SYMBOL) + m_tools.display_pubkey(expected, "To", outputAddress) + m_tools.display_amount(expected, "Amount", tx_amount, mock_ud_value, G1_SYMBOL) # display backchange and comment if outputBackChange: - display_pubkey(expected, "Backchange", outputBackChange) + m_tools.display_pubkey(expected, "Backchange", outputBackChange) expected.append(["Comment", comment]) # asserting diff --git a/tests/test_tui.py b/tests/test_tui.py index 9056380008028da0e84793ffcabde80594728dfd..7aaab65afb38cb3ab4cd51552e664b079236ce8f 100644 --- a/tests/test_tui.py +++ b/tests/test_tui.py @@ -19,47 +19,7 @@ from collections import OrderedDict import pytest from texttable import Texttable -from silkaj import tui, wot_tools -from silkaj.constants import G1_SYMBOL -from silkaj.public_key import gen_pubkey_checksum -from tests.patched.test_constants import mock_ud_value -from tests.patched.wot import patched_is_member - - -# display_amount() -@pytest.mark.parametrize( - "message, amount, currency_symbol", [("Total", 1000, G1_SYMBOL)] -) -def test_display_amount(message, amount, currency_symbol): - amount_UD = round(amount / mock_ud_value, 2) - expected = [ - [ - f"{message} (unit|relative)", - f"{str(amount / 100)} {currency_symbol} | {str(amount_UD)} UD {currency_symbol}", - ] - ] - tx = [] - tui.display_amount(tx, message, amount, mock_ud_value, currency_symbol) - assert tx == expected - - -# display_pubkey() -@pytest.mark.parametrize( - "message, pubkey, uid", - [ - ("From", "CtM5RZHopnSRAAoWNgTWrUhDEmspcCAxn6fuCEWDWudp", "riri"), - ("To", "DBM6F5ChMJzpmkUdL5zD9UXKExmZGfQ1AgPDQy4MxSBw", ""), - ], -) -def test_display_pubkey(message, pubkey, uid, monkeypatch): - monkeypatch.setattr(wot_tools, "is_member", patched_is_member) - - expected = [[f"{message} (pubkey:checksum)", gen_pubkey_checksum(pubkey)]] - if uid: - expected.append([f"{message} (id)", uid]) - tx = [] - tui.display_pubkey(tx, message, pubkey) - assert tx == expected +from silkaj import tui def test_create_table():