Files
lnbits/tests/integration/002_lnurl.spec.js
T
2026-07-16 10:40:28 +03:00

151 lines
4.1 KiB
JavaScript

const {
test,
expect,
setupIntegration,
apiKeyHeaders,
clearMirror,
createWallet,
getPayment,
jsonRequest,
lnurlScan,
pageStatus,
pollPayment,
pollWalletBalance,
newUserWithUi,
getAdminSession,
payLnurlViaUi,
withdrawLnurlViaUi,
ensureExtensionsInstalledViaUi,
enableExtensionViaUi,
createPayLink,
createWithdrawLink
} = require('./scenario-helpers')
setupIntegration()
test('002 lnurlp and withdraw scenarios', async ({browser}) => {
test.setTimeout(5 * 60 * 1000)
await clearMirror()
const admin = await getAdminSession(browser)
await ensureExtensionsInstalledViaUi(admin, ['lnurlp', 'withdraw'])
const user = await newUserWithUi(browser, 'lnurl')
await enableExtensionViaUi(user, 'lnurlp')
await pageStatus(user.context, '/lnurlp/')
const initialPayLinks = await jsonRequest(
user.context,
'get',
'/lnurlp/api/v1/links',
{
headers: apiKeyHeaders(user.inkey),
params: {all_wallets: true}
}
)
expect(initialPayLinks).toEqual([])
let userBalanceSats = 0
for (const index of [1, 2, 3]) {
const payLink = await createPayLink(user.context, user, index)
await pageStatus(user.context, `/lnurlp/link/${payLink.id}`)
const fetched = await jsonRequest(
user.context,
'get',
`/lnurlp/api/v1/links/${payLink.id}`,
{
headers: apiKeyHeaders(user.inkey),
params: {all_wallets: true}
}
)
expect(fetched.description).toBe(`receive payments ${index}`)
const lnurlResponse = await lnurlScan(
user.context,
fetched.lnurl,
user.adminkey
)
expect(lnurlResponse.tag).toBe('payRequest')
expect(lnurlResponse.commentAllowed).toBe(128)
for (let paymentIndex = 0; paymentIndex < 2; paymentIndex++) {
const payment = await payLnurlViaUi(
admin,
fetched.lnurl,
(10 + index) * 1000,
`receive payments ${index}`
)
expect(payment.payment_hash).toBeTruthy()
userBalanceSats += 10 + index
await pollWalletBalance(user.context, user.inkey, userBalanceSats * 1000)
const stored = await pollPayment(
user.context,
user.inkey,
payment.payment_hash,
result => Boolean(result?.details?.extra?.wh_response)
)
expect(stored.details.extra.wh_response).toContain('"b2":2')
expect(stored.details.extra.wh_response).toContain(payment.payment_hash)
}
}
await enableExtensionViaUi(user, 'withdraw')
await pageStatus(user.context, '/withdraw/')
const initialWithdrawLinks = await jsonRequest(
user.context,
'get',
'/withdraw/api/v1/links',
{
headers: apiKeyHeaders(user.inkey),
params: {all_wallets: true}
}
)
expect(initialWithdrawLinks.data ?? initialWithdrawLinks).toEqual([])
const receiveWallet = await createWallet(user.context, 'receive wallet')
for (const index of [1, 2, 3]) {
const withdrawLink = await createWithdrawLink(user.context, user, index)
await pageStatus(user.context, `/withdraw/${withdrawLink.id}`)
const fetched = await jsonRequest(
user.context,
'get',
`/withdraw/api/v1/links/${withdrawLink.id}`,
{
headers: apiKeyHeaders(user.inkey),
params: {all_wallets: true}
}
)
expect(fetched.title).toBe(`withdraw ${index}`)
const lnurlResponse = await lnurlScan(
user.context,
fetched.lnurl,
user.adminkey
)
expect(lnurlResponse.tag).toBe('withdrawRequest')
await user.page.waitForTimeout(2100)
for (let withdrawIndex = 0; withdrawIndex < 2; withdrawIndex++) {
const withdrawal = await withdrawLnurlViaUi(
user,
fetched.lnurl,
10,
`withdraw ${index}`,
receiveWallet.walletId
)
expect(withdrawal.payment_hash).toBeTruthy()
userBalanceSats -= 10
await pollWalletBalance(user.context, user.inkey, userBalanceSats * 1000)
await getPayment(
user.context,
receiveWallet.inkey,
withdrawal.payment_hash
)
if (withdrawIndex === 0) {
await user.page.waitForTimeout(1100)
}
}
}
await pollWalletBalance(user.context, receiveWallet.inkey, 60_000)
})