Files
lnbits/tests/unit/test_wasm_extension_host_wallet.py
T
Arc 8edbd2b894 Revert "make simpler"
This reverts commit 0c60ad4f3b.
2026-07-13 13:29:17 +01:00

101 lines
3.0 KiB
Python

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",
max_sat=None,
description="",
)
)
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",
max_sat=None,
description="",
)
)