import pytest

from lnbits.core.models import PaymentState
from lnbits.core.services import (
    pay_invoice,
)
from lnbits.exceptions import PaymentError

description = "test pay invoice"


@pytest.mark.anyio
async def test_services_pay_invoice(to_wallet, real_invoice):
    payment = await pay_invoice(
        wallet_id=to_wallet.id,
        payment_request=real_invoice.get("bolt11"),
        description=description,
    )
    assert payment
    assert payment.status == PaymentState.SUCCESS
    assert payment.memo == description


@pytest.mark.anyio
async def test_services_pay_invoice_0_amount_invoice(
    to_wallet, real_amountless_invoice
):
    with pytest.raises(PaymentError):
        await pay_invoice(
            wallet_id=to_wallet.id,
            payment_request=real_amountless_invoice,
        )
