feat: adds lnaddress support to payments in host
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
from types import SimpleNamespace
|
||||
|
||||
import pytest
|
||||
|
||||
from lnbits.core.wasm_ext.api.host import ExtensionHostAPI
|
||||
from lnbits.core.wasm_ext.api.models import PayInvoiceRequest
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_wasm_wallet_pay_invoice_resolves_ln_address(mocker):
|
||||
calls = {}
|
||||
|
||||
async def get_wallet(wallet_id: str):
|
||||
calls["get_wallet"] = wallet_id
|
||||
return SimpleNamespace(user="user1")
|
||||
|
||||
async def get_pr_from_lnurl(lnurl: str, amount_msat: int, comment: str | None):
|
||||
calls["lnurl"] = (lnurl, amount_msat, comment)
|
||||
return "lnbc1resolved"
|
||||
|
||||
async def pay_invoice(**kwargs):
|
||||
calls["pay_invoice"] = kwargs
|
||||
return SimpleNamespace(
|
||||
checking_id="checking",
|
||||
payment_hash="hash",
|
||||
status="success",
|
||||
amount=-21_000,
|
||||
fee=-10,
|
||||
pending=False,
|
||||
success=True,
|
||||
)
|
||||
|
||||
mocker.patch("lnbits.core.crud.wallets.get_wallet", get_wallet)
|
||||
mocker.patch("lnbits.core.services.lnurl.get_pr_from_lnurl", get_pr_from_lnurl)
|
||||
mocker.patch("lnbits.core.services.payments.pay_invoice", pay_invoice)
|
||||
|
||||
api = ExtensionHostAPI("demoext", ["wallet.pay_invoice"], user_id="user1")
|
||||
response = await api.wallet_pay_invoice(
|
||||
PayInvoiceRequest(
|
||||
wallet_id="wallet1",
|
||||
payment_request="alice@example.com",
|
||||
max_sat=21,
|
||||
description="winner",
|
||||
)
|
||||
)
|
||||
|
||||
assert response.ok is True
|
||||
assert response.checking_id == "checking"
|
||||
assert calls["get_wallet"] == "wallet1"
|
||||
assert calls["lnurl"] == ("alice@example.com", 21_000, "winner")
|
||||
assert calls["pay_invoice"]["payment_request"] == "lnbc1resolved"
|
||||
assert calls["pay_invoice"]["max_sat"] == 21
|
||||
|
||||
|
||||
@pytest.mark.anyio
|
||||
async def test_wasm_wallet_pay_invoice_allows_event_wallet_only(mocker):
|
||||
async def get_wallet(wallet_id: str):
|
||||
return SimpleNamespace(user="other-user")
|
||||
|
||||
async def pay_invoice(**kwargs):
|
||||
return SimpleNamespace(
|
||||
checking_id="checking",
|
||||
payment_hash="hash",
|
||||
status="success",
|
||||
amount=-1_000,
|
||||
fee=0,
|
||||
pending=False,
|
||||
success=True,
|
||||
)
|
||||
|
||||
mocker.patch("lnbits.core.crud.wallets.get_wallet", get_wallet)
|
||||
mocker.patch("lnbits.core.services.payments.pay_invoice", pay_invoice)
|
||||
|
||||
api = ExtensionHostAPI(
|
||||
"demoext",
|
||||
["wallet.pay_invoice"],
|
||||
context="event",
|
||||
owner_id="owner",
|
||||
wallet_id="wallet1",
|
||||
)
|
||||
allowed = await api.wallet_pay_invoice(
|
||||
PayInvoiceRequest(wallet_id="wallet1", payment_request="lnbc1invoice")
|
||||
)
|
||||
|
||||
assert allowed.ok is True
|
||||
|
||||
with pytest.raises(PermissionError, match="authenticated user context"):
|
||||
await api.wallet_pay_invoice(
|
||||
PayInvoiceRequest(wallet_id="wallet2", payment_request="lnbc1invoice")
|
||||
)
|
||||
Reference in New Issue
Block a user