mirror of
https://github.com/aljazceru/nutshell.git
synced 2025-12-20 10:34:20 +01:00
* init flake8 * exclude nostr client, and add ds_store to gitignore * fix flake8 F811 issue, redefinition of unused variables * add flake8 to workflow * F401 unused imports * F541 f-string is missing placeholders * E501 line too long > 150 characters * E722 no bare except * E402 module level import not at top of file * F405 no star imports * E712 comparison to False should be 'if cond is False:' * F841 local variable is assigned to but never used * E266 too many leading '#' for block comment * E265, E261 * E713 test for membership should be 'not in' * E711, E741 E741 ambiguous variable name 'l' E711 comparison to None should be 'if cond is None:' * flake config * isort * refactor makefile flake8 usage * reflaking the rebase * black * fix tests? * black * fix line lenght it test_cli * sort out makefile * fix strings * reintroduce black-check * reflake and mypy * isort * Update cashu/wallet/wallet.py Co-authored-by: Angus Pearson <angus@toaster.cc> * Update cashu/mint/ledger.py Co-authored-by: Angus Pearson <angus@toaster.cc> --------- Co-authored-by: Angus Pearson <angus@toaster.cc>
86 lines
4.0 KiB
Python
86 lines
4.0 KiB
Python
import pytest
|
|
|
|
from cashu.core.base import TokenV3
|
|
from cashu.core.helpers import calculate_number_of_blank_outputs
|
|
from cashu.core.split import amount_split
|
|
|
|
|
|
def test_get_output_split():
|
|
assert amount_split(13) == [1, 4, 8]
|
|
|
|
|
|
def test_tokenv3_get_amount():
|
|
token_str = (
|
|
"cashuAeyJ0b2tlbiI6IFt7InByb29mcyI6IFt7ImlkIjogIkplaFpMVTZuQ3BSZCIsICJhbW91bnQiOiAyLCAic2VjcmV0IjogIjBFN2lDazRkVmxSZjVQRjFnNFpWMnci"
|
|
"LCAiQyI6ICIwM2FiNTgwYWQ5NTc3OGVkNTI5NmY4YmVlNjU1ZGJkN2Q2NDJmNWQzMmRlOGUyNDg0NzdlMGI0ZDZhYTg2M2ZjZDUifSwgeyJpZCI6ICJKZWhaTFU2bkNwUmQiLCAiYW"
|
|
"1vdW50IjogOCwgInNlY3JldCI6ICJzNklwZXh3SGNxcXVLZDZYbW9qTDJnIiwgIkMiOiAiMDIyZDAwNGY5ZWMxNmE1OGFkOTAxNGMyNTliNmQ2MTRlZDM2ODgyOWYwMmMzODc3M2M0"
|
|
"NzIyMWY0OTYxY2UzZjIzIn1dLCAibWludCI6ICJodHRwOi8vbG9jYWxob3N0OjMzMzgifV19"
|
|
)
|
|
token = TokenV3.deserialize(token_str)
|
|
assert token.get_amount() == 10
|
|
|
|
|
|
def test_tokenv3_get_proofs():
|
|
token_str = (
|
|
"cashuAeyJ0b2tlbiI6IFt7InByb29mcyI6IFt7ImlkIjogIkplaFpMVTZuQ3BSZCIsICJhbW91bnQiOiAyLCAic2VjcmV0IjogIjBFN2lDazRkVmxSZjVQRjFnNFpWMnci"
|
|
"LCAiQyI6ICIwM2FiNTgwYWQ5NTc3OGVkNTI5NmY4YmVlNjU1ZGJkN2Q2NDJmNWQzMmRlOGUyNDg0NzdlMGI0ZDZhYTg2M2ZjZDUifSwgeyJpZCI6ICJKZWhaTFU2bkNwUmQiLCAiYW"
|
|
"1vdW50IjogOCwgInNlY3JldCI6ICJzNklwZXh3SGNxcXVLZDZYbW9qTDJnIiwgIkMiOiAiMDIyZDAwNGY5ZWMxNmE1OGFkOTAxNGMyNTliNmQ2MTRlZDM2ODgyOWYwMmMzODc3M2M0"
|
|
"NzIyMWY0OTYxY2UzZjIzIn1dLCAibWludCI6ICJodHRwOi8vbG9jYWxob3N0OjMzMzgifV19"
|
|
)
|
|
token = TokenV3.deserialize(token_str)
|
|
assert len(token.get_proofs()) == 2
|
|
|
|
|
|
def test_tokenv3_deserialize_serialize():
|
|
token_str = (
|
|
"cashuAeyJ0b2tlbiI6IFt7InByb29mcyI6IFt7ImlkIjogIkplaFpMVTZuQ3BSZCIsICJhbW91bnQiOiAyLCAic2VjcmV0IjogIjBFN2lDazRkVmxSZjVQRjFnNFpWMnci"
|
|
"LCAiQyI6ICIwM2FiNTgwYWQ5NTc3OGVkNTI5NmY4YmVlNjU1ZGJkN2Q2NDJmNWQzMmRlOGUyNDg0NzdlMGI0ZDZhYTg2M2ZjZDUifSwgeyJpZCI6ICJKZWhaTFU2bkNwUmQiLCAiYW"
|
|
"1vdW50IjogOCwgInNlY3JldCI6ICJzNklwZXh3SGNxcXVLZDZYbW9qTDJnIiwgIkMiOiAiMDIyZDAwNGY5ZWMxNmE1OGFkOTAxNGMyNTliNmQ2MTRlZDM2ODgyOWYwMmMzODc3M2M0"
|
|
"NzIyMWY0OTYxY2UzZjIzIn1dLCAibWludCI6ICJodHRwOi8vbG9jYWxob3N0OjMzMzgifV19"
|
|
)
|
|
token = TokenV3.deserialize(token_str)
|
|
assert token.serialize() == token_str
|
|
|
|
|
|
def test_tokenv3_deserialize_with_memo():
|
|
token_str = (
|
|
"cashuAeyJ0b2tlbiI6IFt7InByb29mcyI6IFt7ImlkIjogIkplaFpMVTZuQ3BSZCIsICJhbW91bnQiOiAyLCAic2VjcmV0IjogIjBFN2lDazRkVmxSZjV"
|
|
"QRjFnNFpWMnciLCAiQyI6ICIwM2FiNTgwYWQ5NTc3OGVkNTI5NmY4YmVlNjU1ZGJkN2Q2NDJmNWQzMmRlOGUyNDg0NzdlMGI0ZDZhYTg2M2ZjZDUifSwg"
|
|
"eyJpZCI6ICJKZWhaTFU2bkNwUmQiLCAiYW1vdW50IjogOCwgInNlY3JldCI6ICJzNklwZXh3SGNxcXVLZDZYbW9qTDJnIiwgIkMiOiAiMDIyZDAwNGY5Z"
|
|
"WMxNmE1OGFkOTAxNGMyNTliNmQ2MTRlZDM2ODgyOWYwMmMzODc3M2M0NzIyMWY0OTYxY2UzZjIzIn1dLCAibWludCI6ICJodHRwOi8vbG9jYWxob3N0Oj"
|
|
"MzMzgifV0sICJtZW1vIjogIlRlc3QgbWVtbyJ9"
|
|
)
|
|
token = TokenV3.deserialize(token_str)
|
|
assert token.serialize() == token_str
|
|
assert token.memo == "Test memo"
|
|
|
|
|
|
def test_calculate_number_of_blank_outputs():
|
|
# Example from NUT-08 specification.
|
|
fee_reserve_sat = 1000
|
|
expected_n_blank_outputs = 10
|
|
n_blank_outputs = calculate_number_of_blank_outputs(fee_reserve_sat)
|
|
assert n_blank_outputs == expected_n_blank_outputs
|
|
|
|
|
|
def test_calculate_number_of_blank_outputs_for_small_fee_reserve():
|
|
# There should always be at least one blank output.
|
|
fee_reserve_sat = 1
|
|
expected_n_blank_outputs = 1
|
|
n_blank_outputs = calculate_number_of_blank_outputs(fee_reserve_sat)
|
|
assert n_blank_outputs == expected_n_blank_outputs
|
|
|
|
|
|
def test_calculate_number_of_blank_outputs_for_zero_fee_reserve():
|
|
# Negative fee reserve is not supported.
|
|
fee_reserve_sat = 0
|
|
n_blank_outputs = calculate_number_of_blank_outputs(fee_reserve_sat)
|
|
assert n_blank_outputs == 0
|
|
|
|
|
|
def test_calculate_number_of_blank_outputs_fails_for_negative_fee_reserve():
|
|
# Negative fee reserve is not supported.
|
|
fee_reserve_sat = -1
|
|
with pytest.raises(AssertionError):
|
|
_ = calculate_number_of_blank_outputs(fee_reserve_sat)
|