From 6ecbb8eb3fb766eb10b40c0a795e66f54664714d Mon Sep 17 00:00:00 2001 From: Sander van Grieken Date: Mon, 19 Feb 2024 11:54:32 +0100 Subject: [PATCH] tests: add test for payment_identifier.invoice_from_payment_identifier() --- tests/test_payment_identifier.py | 41 +++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/tests/test_payment_identifier.py b/tests/test_payment_identifier.py index a5a64c85c..479509066 100644 --- a/tests/test_payment_identifier.py +++ b/tests/test_payment_identifier.py @@ -1,6 +1,10 @@ +import os + from electrum import SimpleConfig +from electrum.invoices import Invoice from electrum.payment_identifier import (maybe_extract_lightning_payment_identifier, PaymentIdentifier, - PaymentIdentifierType) + PaymentIdentifierType, invoice_from_payment_identifier) +from electrum.wallet import restore_wallet_from_text from . import ElectrumTestCase from electrum.transaction import PartialTxOutput @@ -20,6 +24,12 @@ class TestPaymentIdentifier(ElectrumTestCase): super().setUp() self.wallet = WalletMock(self.electrum_path) + self.config = SimpleConfig({ + 'electrum_path': self.electrum_path, + 'decimal_point': 5 + }) + self.wallet2_path = os.path.join(self.electrum_path, "somewallet2") + def test_maybe_extract_lightning_payment_identifier(self): bolt11 = "lnbc1ps9zprzpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqsp5zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zygsdqq9qypqszpyrpe4tym8d3q87d43cgdhhlsrt78epu7u99mkzttmt2wtsx0304rrw50addkryfrd3vn3zy467vxwlmf4uz7yvntuwjr2hqjl9lw5cqwtp2dy" lnurl = "lnurl1dp68gurn8ghj7um9wfmxjcm99e5k7telwy7nxenrxvmrgdtzxsenjcm98pjnwxq96s9" @@ -251,3 +261,32 @@ class TestPaymentIdentifier(ElectrumTestCase): self.assertTrue(pi.need_resolve()) # TODO resolve mock + + async def test_invoice_from_payment_identifier(self): + # amount, expired, message, lightning w matching amount + bip21 = 'bitcoin:1RustyRX2oai4EYYDpQGWvEL62BBGqN9T?amount=0.02&message=unit_test&time=1707382023&exp=3600&lightning=lnbc20m1pvjluezpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqhp58yjmdan79s6qqdhdzgynm4zwqd5d7xmw5fk98klysy043l2ahrqsfpp3qjmp7lwpagxun9pygexvgpjdc4jdj85fr9yq20q82gphp2nflc7jtzrcazrra7wwgzxqc8u7754cdlpfrmccae92qgzqvzq2ps8pqqqqqqpqqqqq9qqqvpeuqafqxu92d8lr6fvg0r5gv0heeeqgcrqlnm6jhphu9y00rrhy4grqszsvpcgpy9qqqqqqgqqqqq7qqzqj9n4evl6mr5aj9f58zp6fyjzup6ywn3x6sk8akg5v4tgn2q8g4fhx05wf6juaxu9760yp46454gpg5mtzgerlzezqcqvjnhjh8z3g2qqdhhwkj' + + pi = PaymentIdentifier(None, bip21) + invoice = invoice_from_payment_identifier(pi, None, None) + self.assertTrue(isinstance(invoice, Invoice)) + self.assertTrue(invoice.is_lightning()) + self.assertEqual(2_000_000_000, invoice.amount_msat) + + text = 'bitter grass shiver impose acquire brush forget axis eager alone wine silver' + d = restore_wallet_from_text(text, path=self.wallet2_path, gap_limit=2, config=self.config) + wallet2 = d['wallet'] # type: Standard_Wallet + + # no amount bip21+lightning, MAX amount passed + bip21 = 'bitcoin:1RustyRX2oai4EYYDpQGWvEL62BBGqN9T?message=unit_test&time=1707382023&exp=3600&lightning=lnbc1ps9zprzpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqsp5zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zygsdqq9qypqszpyrpe4tym8d3q87d43cgdhhlsrt78epu7u99mkzttmt2wtsx0304rrw50addkryfrd3vn3zy467vxwlmf4uz7yvntuwjr2hqjl9lw5cqwtp2dy' + pi = PaymentIdentifier(None, bip21) + invoice = invoice_from_payment_identifier(pi, wallet2, '!') + self.assertTrue(isinstance(invoice, Invoice)) + self.assertFalse(invoice.is_lightning()) + + # no amount lightning, MAX amount passed -> expect raise + bolt11 = 'lightning:lnbc1ps9zprzpp5qqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqqqsyqcyq5rqwzqfqypqsp5zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zyg3zygsdqq9qypqszpyrpe4tym8d3q87d43cgdhhlsrt78epu7u99mkzttmt2wtsx0304rrw50addkryfrd3vn3zy467vxwlmf4uz7yvntuwjr2hqjl9lw5cqwtp2dy' + pi = PaymentIdentifier(None, bolt11) + with self.assertRaises(AssertionError): + invoice_from_payment_identifier(pi, wallet2, '!') + invoice = invoice_from_payment_identifier(pi, wallet2, 1) + self.assertEqual(1000, invoice.amount_msat)