diff --git a/silkaj/membership.py b/silkaj/membership.py index ea3ea1a01e4d0e89f7022b01125cb8c94d5f458e..b23a7f6aff26d69ae77ab49fa8ed02a2fb3599d2 100644 --- a/silkaj/membership.py +++ b/silkaj/membership.py @@ -25,13 +25,12 @@ from tabulate import tabulate from duniterpy.api import bma from duniterpy.documents import BlockUID, block_uid, Membership -from silkaj import auth, wot +from silkaj import auth, wot, tui from silkaj.tools import coroutine from silkaj.network_tools import ClientInstance from silkaj.blockchain_tools import BlockchainParams, HeadBlock from silkaj.license import license_approval from silkaj.constants import SUCCESS_EXIT_STATUS -from silkaj.tui import display_pubkey_and_checksum @click.command( @@ -39,14 +38,9 @@ from silkaj.tui import display_pubkey_and_checksum help="Send and sign membership document: \n\ for first emission and for renewal", ) -@click.option( - "--dry-run", - is_flag=True, - help="By-pass licence, confirmation. \ -Do not send the document, but display it instead", -) +@click.pass_context @coroutine -async def send_membership(dry_run): +async def send_membership(ctx): # Authentication key = auth.auth_method() @@ -60,18 +54,13 @@ async def send_membership(dry_run): # Display license and ask for confirmation currency = head_block["currency"] - if not dry_run: - license_approval(currency) + license_approval(currency) # Confirmation client = ClientInstance().client await display_confirmation_table(identity_uid, key.pubkey, identity_timestamp) - if not dry_run: - if not click.confirm( - "Do you confirm sending a membership document for this identity?" - ): - await client.close() - sys.exit(SUCCESS_EXIT_STATUS) + if not ctx.obj["DISPLAY_DOCUMENT"]: + await tui.send_doc_confirmation("membership document for this identity") membership = generate_membership_document( currency, @@ -86,10 +75,9 @@ async def send_membership(dry_run): logging.debug(membership.signed_raw()) - if dry_run: - await client.close() + if ctx.obj["DISPLAY_DOCUMENT"]: click.echo(membership.signed_raw()) - sys.exit(SUCCESS_EXIT_STATUS) + await tui.send_doc_confirmation("membership document for this identity") # Send the membership signed raw document to the node response = await client(bma.blockchain.membership, membership.signed_raw()) @@ -137,7 +125,7 @@ async def display_confirmation_table(identity_uid, pubkey, identity_timestamp): table.append(["Pending membership documents will expire", expiration]) table.append(["User Identifier (UID)", identity_uid]) - table.append(["Public Key", display_pubkey_and_checksum(pubkey)]) + table.append(["Public Key", tui.display_pubkey_and_checksum(pubkey)]) table.append(["Block Identity", str(identity_timestamp)[:45] + "…"]) diff --git a/tests/test_membership.py b/tests/test_membership.py index 7ff1eb56fc6398b23c7815198c63e9df54e130f0..292b6f892dcd83c4757150f05df8575d9e25780b 100644 --- a/tests/test_membership.py +++ b/tests/test_membership.py @@ -79,14 +79,14 @@ async def patched_choose_identity(pubkey): @pytest.mark.parametrize( - "dry_run, confirmation, exit_code", + "display, confirmation, exit_code", [ - (True, True, SUCCESS_EXIT_STATUS), + (True, True, FAILURE_EXIT_STATUS), (False, False, SUCCESS_EXIT_STATUS), (False, True, FAILURE_EXIT_STATUS), ], ) -def test_membership_cmd(dry_run, confirmation, exit_code, monkeypatch): +def test_membership_cmd(display, confirmation, exit_code, monkeypatch): # Monkeypatch and Mock monkeypatch.setattr(auth, "auth_method", patched_auth_method) monkeypatch.setattr(HeadBlock, "get_head", patched_head_block) @@ -98,7 +98,7 @@ def test_membership_cmd(dry_run, confirmation, exit_code, monkeypatch): "display_confirmation_table", patched_display_confirmation_table, ) - if not dry_run: + if not display: patched_generate_membership_document = Mock() monkeypatch.setattr( membership, @@ -107,9 +107,8 @@ def test_membership_cmd(dry_run, confirmation, exit_code, monkeypatch): ) # Run membership command - command = ["membership"] - if dry_run: - command += ["--dry-run"] + command = ["--display"] if display else [] + command += ["membership"] confirmations = "No\nYes\nYes" if confirmation else "No\nYes\nNo" result = CliRunner().invoke(cli, args=command, input=confirmations) @@ -119,7 +118,7 @@ def test_membership_cmd(dry_run, confirmation, exit_code, monkeypatch): pubkey, identity_timestamp, ) - if not dry_run and confirmation: + if not display and confirmation: patched_generate_membership_document.assert_called_with( currency, pubkey, @@ -127,7 +126,7 @@ def test_membership_cmd(dry_run, confirmation, exit_code, monkeypatch): identity_uid, identity_timestamp, ) - if dry_run: + if display: assert "Type: Membership" in result.output assert result.exit_code == exit_code