mirror of
https://github.com/lnbits/lnbits-legend.git
synced 2025-03-10 09:19:42 +01:00
TEST: add hold invoices to test helpers and a basic test (#1838)
* add hold invoices and basic test * run request in parallel * create_task * dont cancel it --------- Co-authored-by: callebtc <93376500+callebtc@users.noreply.github.com>
This commit is contained in:
parent
dda6c1b3c1
commit
7f0c7138af
3 changed files with 60 additions and 2 deletions
|
@ -11,7 +11,12 @@ from lnbits.core.crud import create_account, create_wallet
|
||||||
from lnbits.core.views.api import CreateInvoiceData, api_payments_create_invoice
|
from lnbits.core.views.api import CreateInvoiceData, api_payments_create_invoice
|
||||||
from lnbits.db import Database
|
from lnbits.db import Database
|
||||||
from lnbits.settings import settings
|
from lnbits.settings import settings
|
||||||
from tests.helpers import credit_wallet, get_random_invoice_data, get_real_invoice
|
from tests.helpers import (
|
||||||
|
credit_wallet,
|
||||||
|
get_hold_invoice,
|
||||||
|
get_random_invoice_data,
|
||||||
|
get_real_invoice,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@pytest_asyncio.fixture(scope="session")
|
@pytest_asyncio.fixture(scope="session")
|
||||||
|
@ -149,3 +154,10 @@ async def real_invoice():
|
||||||
invoice = get_real_invoice(100)
|
invoice = get_real_invoice(100)
|
||||||
yield {"bolt11": invoice["payment_request"]}
|
yield {"bolt11": invoice["payment_request"]}
|
||||||
del invoice
|
del invoice
|
||||||
|
|
||||||
|
|
||||||
|
@pytest_asyncio.fixture(scope="function")
|
||||||
|
async def hold_invoice():
|
||||||
|
invoice = get_hold_invoice(100)
|
||||||
|
yield invoice
|
||||||
|
del invoice
|
||||||
|
|
|
@ -13,7 +13,12 @@ from lnbits.db import DB_TYPE, SQLITE
|
||||||
from lnbits.wallets import get_wallet_class
|
from lnbits.wallets import get_wallet_class
|
||||||
from tests.conftest import CreateInvoiceData, api_payments_create_invoice
|
from tests.conftest import CreateInvoiceData, api_payments_create_invoice
|
||||||
|
|
||||||
from ...helpers import get_random_invoice_data, is_fake, pay_real_invoice
|
from ...helpers import (
|
||||||
|
get_random_invoice_data,
|
||||||
|
is_fake,
|
||||||
|
pay_real_invoice,
|
||||||
|
settle_invoice,
|
||||||
|
)
|
||||||
|
|
||||||
WALLET = get_wallet_class()
|
WALLET = get_wallet_class()
|
||||||
|
|
||||||
|
@ -459,6 +464,30 @@ async def test_pay_real_invoice_set_pending_and_check_state(
|
||||||
assert payment_not_pending.pending is False
|
assert payment_not_pending.pending is False
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
@pytest.mark.skipif(is_fake, reason="this only works in regtest")
|
||||||
|
async def test_pay_hold_invoice(client, hold_invoice, adminkey_headers_from):
|
||||||
|
preimage, invoice = hold_invoice
|
||||||
|
task = asyncio.create_task(
|
||||||
|
client.post(
|
||||||
|
"/api/v1/payments",
|
||||||
|
json={"bolt11": invoice["payment_request"]},
|
||||||
|
headers=adminkey_headers_from,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
await asyncio.sleep(1)
|
||||||
|
|
||||||
|
# TODO: Proper test calle :)
|
||||||
|
# settle hold invoice
|
||||||
|
settle_invoice(preimage)
|
||||||
|
|
||||||
|
response = await task
|
||||||
|
assert response.status_code < 300
|
||||||
|
# check if paid
|
||||||
|
# randomly cancel invoice
|
||||||
|
# cancel_invoice(invoice["payment_hash"])
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
@pytest.mark.skipif(is_fake, reason="this only works in regtest")
|
@pytest.mark.skipif(is_fake, reason="this only works in regtest")
|
||||||
async def test_receive_real_invoice_set_pending_and_check_state(
|
async def test_receive_real_invoice_set_pending_and_check_state(
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
|
import os
|
||||||
import random
|
import random
|
||||||
import secrets
|
import secrets
|
||||||
import string
|
import string
|
||||||
from subprocess import PIPE, Popen, run
|
from subprocess import PIPE, Popen, run
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
from lnbits.core.crud import create_payment
|
from lnbits.core.crud import create_payment
|
||||||
from lnbits.wallets import get_wallet_class, set_wallet_class
|
from lnbits.wallets import get_wallet_class, set_wallet_class
|
||||||
|
@ -62,6 +64,21 @@ def run_cmd_json(cmd: str) -> dict:
|
||||||
return json.loads(run_cmd(cmd))
|
return json.loads(run_cmd(cmd))
|
||||||
|
|
||||||
|
|
||||||
|
def get_hold_invoice(sats: int) -> Tuple[str, dict]:
|
||||||
|
preimage = os.urandom(32)
|
||||||
|
preimage_hash = hashlib.sha256(preimage).hexdigest()
|
||||||
|
json = run_cmd_json(f"{docker_lightning_cli} addholdinvoice {preimage_hash} {sats}")
|
||||||
|
return preimage.hex(), json
|
||||||
|
|
||||||
|
|
||||||
|
def settle_invoice(preimage: str) -> dict:
|
||||||
|
return run_cmd_json(f"{docker_lightning_cli} settleinvoice {preimage}")
|
||||||
|
|
||||||
|
|
||||||
|
def cancel_invoice(preimage_hash: str) -> dict:
|
||||||
|
return run_cmd_json(f"{docker_lightning_cli} cancelinvoice {preimage_hash}")
|
||||||
|
|
||||||
|
|
||||||
def get_real_invoice(sats: int) -> dict:
|
def get_real_invoice(sats: int) -> dict:
|
||||||
return run_cmd_json(f"{docker_lightning_cli} addinvoice {sats}")
|
return run_cmd_json(f"{docker_lightning_cli} addinvoice {sats}")
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue