151 lines
4.1 KiB
JavaScript
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)
|
|
})
|