feat: create TaskManager singleton class (#3775)
Co-authored-by: dadofsambonzuki <dadofsambonzuki@users.noreply.github.com>
This commit is contained in:
@@ -12,15 +12,12 @@ from lnbits.core.crud import create_wallet, get_standalone_payment, get_wallet
|
||||
from lnbits.core.crud.payments import get_payment, get_payments_paginated
|
||||
from lnbits.core.models import PaymentState, Wallet
|
||||
from lnbits.core.services import create_invoice, create_user_account, pay_invoice
|
||||
from lnbits.core.services.payments import update_wallet_balance
|
||||
from lnbits.core.services.payments import (
|
||||
update_wallet_balance,
|
||||
)
|
||||
from lnbits.exceptions import InvoiceError, PaymentError
|
||||
from lnbits.settings import Settings
|
||||
from lnbits.tasks import (
|
||||
create_task,
|
||||
internal_invoice_listener,
|
||||
internal_invoice_queue,
|
||||
wait_for_paid_invoices,
|
||||
)
|
||||
from lnbits.task_manager import task_manager
|
||||
from lnbits.wallets.base import PaymentResponse
|
||||
from lnbits.wallets.fake import FakeWallet
|
||||
|
||||
@@ -237,24 +234,30 @@ async def test_notification_for_internal_payment(
|
||||
test_name = "test_notification_for_internal_payment"
|
||||
|
||||
# Drain stale items left by session-scoped fixtures (e.g. update_wallet_balance)
|
||||
while not internal_invoice_queue.empty():
|
||||
while not task_manager.internal_invoice_queue.empty():
|
||||
try:
|
||||
internal_invoice_queue.get_nowait()
|
||||
task_manager.internal_invoice_queue.get_nowait()
|
||||
except asyncio.QueueEmpty:
|
||||
break
|
||||
|
||||
on_paid_mock = mocker.AsyncMock()
|
||||
create_task(internal_invoice_listener())
|
||||
create_task(wait_for_paid_invoices(test_name, on_paid_mock)())
|
||||
# create_task(internal_invoice_listener())
|
||||
|
||||
task_manager.register_invoice_listener(on_paid_mock, test_name)
|
||||
|
||||
payment = await create_invoice(
|
||||
wallet_id=to_wallet.id,
|
||||
amount=123,
|
||||
memo=test_name,
|
||||
webhook="http://test.404.lnbits.com",
|
||||
)
|
||||
await pay_invoice(
|
||||
paid_payment = await pay_invoice(
|
||||
wallet_id=to_wallet.id, payment_request=payment.bolt11, extra={"tag": "lnurlp"}
|
||||
)
|
||||
assert paid_payment.status == PaymentState.SUCCESS.value
|
||||
assert paid_payment.bolt11 == payment.bolt11
|
||||
assert paid_payment.amount == -123_000
|
||||
|
||||
await asyncio.sleep(1)
|
||||
|
||||
assert on_paid_mock.call_count == 1
|
||||
@@ -264,6 +267,8 @@ async def test_notification_for_internal_payment(
|
||||
assert _payment.status == PaymentState.SUCCESS.value
|
||||
assert _payment.bolt11 == payment.bolt11
|
||||
assert _payment.amount == 123_000
|
||||
assert _payment.checking_id == payment.checking_id
|
||||
|
||||
updated_payment = await get_payment(_payment.checking_id)
|
||||
assert (
|
||||
updated_payment.webhook_status is not None
|
||||
|
||||
Reference in New Issue
Block a user