234 lines
6.3 KiB
JavaScript
234 lines
6.3 KiB
JavaScript
const {
|
|
test,
|
|
expect,
|
|
setupIntegration,
|
|
apiKeyHeaders,
|
|
clearMirror,
|
|
getPayments,
|
|
jsonRequest,
|
|
mirrorUrl,
|
|
pageStatus,
|
|
pollWalletBalance,
|
|
newUserWithUi,
|
|
getAdminSession,
|
|
payInvoiceViaUi,
|
|
ensureExtensionsInstalledViaUi,
|
|
enableExtensionViaUi
|
|
} = require('./scenario-helpers')
|
|
|
|
setupIntegration()
|
|
|
|
test('006 watchonly, satspay, and tipjar scenario', async ({browser}) => {
|
|
test.setTimeout(7 * 60 * 1000)
|
|
await clearMirror()
|
|
|
|
const admin = await getAdminSession(browser)
|
|
await ensureExtensionsInstalledViaUi(admin, [
|
|
'watchonly',
|
|
'satspay',
|
|
'tipjar'
|
|
])
|
|
const user = await newUserWithUi(browser, 'watchonly-satspay-tipjar')
|
|
await enableExtensionViaUi(user, 'watchonly')
|
|
await pageStatus(user.context, `/watchonly/?usr=${user.userId}`)
|
|
await jsonRequest(user.context, 'get', '/watchonly/api/v1/config', {
|
|
headers: apiKeyHeaders(user.inkey)
|
|
})
|
|
await jsonRequest(user.context, 'get', '/watchonly/api/v1/wallet', {
|
|
headers: apiKeyHeaders(user.inkey),
|
|
params: {network: 'Mainnet'}
|
|
})
|
|
const onchain = await jsonRequest(
|
|
user.context,
|
|
'post',
|
|
'/watchonly/api/v1/wallet',
|
|
{
|
|
headers: apiKeyHeaders(user.adminkey),
|
|
data: {
|
|
title: 'segwit',
|
|
masterpub:
|
|
'zpub6rsRjqj6BTbD9DjqrY4p14tUx5kdA8ZGCTJD99wZTxD5wfvCkyXKrK3s7M3B1eFN6NbRhmbDDRDC8LF3Bn5gmxxN9rF8mDpZsGC6isGrK1g',
|
|
network: 'Mainnet',
|
|
meta: '{"accountPath":"m/84\'/0\'/0\'"}'
|
|
},
|
|
expected: [200, 201]
|
|
}
|
|
)
|
|
expect(onchain.id).toBeTruthy()
|
|
await jsonRequest(
|
|
user.context,
|
|
'get',
|
|
`/watchonly/api/v1/addresses/${onchain.id}`,
|
|
{
|
|
headers: apiKeyHeaders(user.inkey)
|
|
}
|
|
)
|
|
await jsonRequest(
|
|
user.context,
|
|
'get',
|
|
`/watchonly/api/v1/address/${onchain.id}`,
|
|
{
|
|
headers: apiKeyHeaders(user.inkey)
|
|
}
|
|
)
|
|
|
|
await enableExtensionViaUi(user, 'satspay')
|
|
await pageStatus(user.context, '/satspay/')
|
|
await jsonRequest(user.context, 'get', '/satspay/api/v1/charges', {
|
|
headers: apiKeyHeaders(user.adminkey)
|
|
})
|
|
const onchainCharge = await jsonRequest(
|
|
user.context,
|
|
'post',
|
|
'/satspay/api/v1/charge',
|
|
{
|
|
headers: apiKeyHeaders(user.adminkey),
|
|
data: {
|
|
onchain: true,
|
|
onchainwallet: onchain.id,
|
|
lnbits: false,
|
|
description: 'Onchain Charge',
|
|
time: 1111,
|
|
amount: 1111,
|
|
lnbitswallet: null
|
|
},
|
|
expected: [200, 201]
|
|
}
|
|
)
|
|
expect(onchainCharge.id).toBeTruthy()
|
|
|
|
await jsonRequest(user.context, 'post', '/satspay/api/v1/charge', {
|
|
headers: apiKeyHeaders(user.adminkey),
|
|
data: {
|
|
onchain: false,
|
|
onchainwallet: null,
|
|
lnbits: true,
|
|
description: 'lightning charge - to expire',
|
|
time: 1,
|
|
amount: 10,
|
|
lnbitswallet: user.walletId,
|
|
webhook: 'https://google.com',
|
|
completelink: 'https://twitter.com',
|
|
completelinktext: 'Have Fun'
|
|
},
|
|
expected: [200, 201]
|
|
})
|
|
|
|
let expectedBalanceSats = 0
|
|
for (let index = 1; index <= 5; index++) {
|
|
const amount = 9 + index
|
|
const charge = await jsonRequest(
|
|
user.context,
|
|
'post',
|
|
'/satspay/api/v1/charge',
|
|
{
|
|
headers: apiKeyHeaders(user.adminkey),
|
|
data: {
|
|
onchain: false,
|
|
onchainwallet: null,
|
|
lnbits: true,
|
|
description: `lightning charge [${index}]`,
|
|
time: 1220,
|
|
amount,
|
|
lnbitswallet: user.walletId,
|
|
webhook: mirrorUrl(),
|
|
completelink: 'https://twitter.com',
|
|
completelinktext: 'Have Fun'
|
|
},
|
|
expected: [200, 201]
|
|
}
|
|
)
|
|
expect(charge.payment_request).toBeTruthy()
|
|
await pageStatus(user.context, `/satspay/${charge.id}`)
|
|
await jsonRequest(
|
|
user.context,
|
|
'get',
|
|
`/satspay/api/v1/charge/balance/${charge.id}`,
|
|
{
|
|
headers: apiKeyHeaders(user.inkey)
|
|
}
|
|
)
|
|
await payInvoiceViaUi(admin, charge.payment_request)
|
|
await expect
|
|
.poll(async () => {
|
|
const updatedCharge = await jsonRequest(
|
|
user.context,
|
|
'get',
|
|
`/satspay/api/v1/charge/${charge.id}`,
|
|
{
|
|
headers: apiKeyHeaders(user.inkey)
|
|
}
|
|
)
|
|
return Boolean(updatedCharge.paid || updatedCharge.lnbitswallet)
|
|
})
|
|
.toBeTruthy()
|
|
expectedBalanceSats += amount
|
|
}
|
|
|
|
await pollWalletBalance(user.context, user.inkey, expectedBalanceSats * 1000)
|
|
const charges = await jsonRequest(
|
|
user.context,
|
|
'get',
|
|
'/satspay/api/v1/charges',
|
|
{
|
|
headers: apiKeyHeaders(user.adminkey)
|
|
}
|
|
)
|
|
expect(charges.length).toBeGreaterThanOrEqual(7)
|
|
const payments = await getPayments(user.context, user.inkey)
|
|
expect(payments.length).toBeGreaterThanOrEqual(6)
|
|
|
|
await enableExtensionViaUi(user, 'tipjar')
|
|
await pageStatus(user.context, `/tipjar/?usr=${user.userId}`)
|
|
await jsonRequest(user.context, 'get', '/tipjar/api/v1/tipjars', {
|
|
headers: apiKeyHeaders(user.inkey)
|
|
})
|
|
const tipjar = await jsonRequest(
|
|
user.context,
|
|
'post',
|
|
'/tipjar/api/v1/tipjars',
|
|
{
|
|
headers: apiKeyHeaders(user.adminkey),
|
|
data: {wallet: user.walletId, name: 'Nakamoto', webhook: mirrorUrl()},
|
|
expected: [200, 201]
|
|
}
|
|
)
|
|
expect(tipjar.id).toBeTruthy()
|
|
await pageStatus(user.context, `/tipjar/${tipjar.id}`)
|
|
|
|
for (let index = 1; index <= 5; index++) {
|
|
const tip = await jsonRequest(user.context, 'post', '/tipjar/api/v1/tips', {
|
|
headers: apiKeyHeaders(user.adminkey),
|
|
data: {
|
|
tipjar: tipjar.id,
|
|
name: 'Hal',
|
|
sats: 21,
|
|
message: `Let's go ...${index}!`
|
|
},
|
|
expected: [200, 201]
|
|
})
|
|
expect(tip.redirect_url).toBeTruthy()
|
|
const tipChargeId = tip.redirect_url.split('/').filter(Boolean).at(-1)
|
|
const charge = await jsonRequest(
|
|
user.context,
|
|
'get',
|
|
`/satspay/api/v1/charge/${tipChargeId}`,
|
|
{
|
|
headers: apiKeyHeaders(user.inkey)
|
|
}
|
|
)
|
|
expect(charge.description).toBe(`Let's go ...${index}!`)
|
|
const tips = await jsonRequest(user.context, 'get', '/tipjar/api/v1/tips', {
|
|
headers: apiKeyHeaders(user.inkey)
|
|
})
|
|
expect(tips.length).toBe(index)
|
|
await payInvoiceViaUi(admin, tip.payment_request || charge.payment_request)
|
|
expectedBalanceSats += 21
|
|
await pollWalletBalance(
|
|
user.context,
|
|
user.inkey,
|
|
expectedBalanceSats * 1000
|
|
)
|
|
}
|
|
})
|