mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-04 21:15:47 +00:00
fix: fix error handling in generateFaucetWallet (#1671)
* fix: handle error correctly in generateFaucetWallet * test: Adds generateFaucetWallet integration + browser tests
This commit is contained in:
committed by
Mayukha Vadari
parent
edcdd3a0fc
commit
9e3654d7d6
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "xrpl",
|
"name": "xrpl",
|
||||||
"version": "2.0.0-beta.0",
|
"version": "2.0.0-beta.1",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "xrpl",
|
"name": "xrpl",
|
||||||
"version": "2.0.0-beta.0",
|
"version": "2.0.0-beta.1",
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/lodash": "^4.14.136",
|
"@types/lodash": "^4.14.136",
|
||||||
|
|||||||
@@ -54,10 +54,15 @@ async function generateFaucetWallet(
|
|||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
// Retrieve the existing account balance
|
// Retrieve the existing account balance
|
||||||
const addressToFundBalance = await getAddressXrpBalance(
|
let addressToFundBalance: undefined | string
|
||||||
this,
|
try {
|
||||||
fundWallet.classicAddress,
|
addressToFundBalance = await getAddressXrpBalance(
|
||||||
)
|
this,
|
||||||
|
fundWallet.classicAddress,
|
||||||
|
)
|
||||||
|
} catch {
|
||||||
|
/* addressToFundBalance remains undefined */
|
||||||
|
}
|
||||||
|
|
||||||
// Check the address balance is not undefined and is a number
|
// Check the address balance is not undefined and is a number
|
||||||
const startingBalance =
|
const startingBalance =
|
||||||
@@ -212,13 +217,12 @@ async function getAddressXrpBalance(
|
|||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
// Get all the account balances
|
// Get all the account balances
|
||||||
try {
|
try {
|
||||||
const balances = await client.getBalances(address)
|
const balances = await client.request({
|
||||||
|
command: 'account_info',
|
||||||
|
account: address,
|
||||||
|
})
|
||||||
|
|
||||||
// Retrieve the XRP balance
|
return balances.result.account_data.Balance
|
||||||
const xrpBalance = balances.filter(
|
|
||||||
(balance) => balance.currency.toUpperCase() === 'XRP',
|
|
||||||
)
|
|
||||||
return xrpBalance[0].value
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err instanceof Error) {
|
if (err instanceof Error) {
|
||||||
throw new XRPLFaucetError(
|
throw new XRPLFaucetError(
|
||||||
@@ -254,7 +258,13 @@ async function hasAddressBalanceIncreased(
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const newBalance = Number(await getAddressXrpBalance(client, address))
|
let newBalance
|
||||||
|
try {
|
||||||
|
newBalance = Number(await getAddressXrpBalance(client, address))
|
||||||
|
} catch {
|
||||||
|
/* newBalance remains undefined */
|
||||||
|
}
|
||||||
|
|
||||||
if (newBalance > originalBalance) {
|
if (newBalance > originalBalance) {
|
||||||
clearInterval(interval)
|
clearInterval(interval)
|
||||||
resolve(true)
|
resolve(true)
|
||||||
@@ -279,6 +289,7 @@ async function hasAddressBalanceIncreased(
|
|||||||
*
|
*
|
||||||
* @param client - Client.
|
* @param client - Client.
|
||||||
* @returns A {@link FaucetNetwork}.
|
* @returns A {@link FaucetNetwork}.
|
||||||
|
* @throws When the client url is not on altnet or devnet.
|
||||||
*/
|
*/
|
||||||
function getFaucetUrl(client: Client): FaucetNetwork | undefined {
|
function getFaucetUrl(client: Client): FaucetNetwork | undefined {
|
||||||
const connectionUrl = client.connection.getUrl()
|
const connectionUrl = client.connection.getUrl()
|
||||||
@@ -292,7 +303,7 @@ function getFaucetUrl(client: Client): FaucetNetwork | undefined {
|
|||||||
return FaucetNetwork.Devnet
|
return FaucetNetwork.Devnet
|
||||||
}
|
}
|
||||||
|
|
||||||
return undefined
|
throw new XRPLFaucetError('Faucet URL is not defined or inferrable.')
|
||||||
}
|
}
|
||||||
|
|
||||||
export default generateFaucetWallet
|
export default generateFaucetWallet
|
||||||
|
|||||||
@@ -3,17 +3,23 @@ import path from 'path'
|
|||||||
import { expect, assert } from 'chai'
|
import { expect, assert } from 'chai'
|
||||||
import puppeteer from 'puppeteer'
|
import puppeteer from 'puppeteer'
|
||||||
|
|
||||||
|
const TIMEOUT = 60000
|
||||||
describe('Browser Tests', function () {
|
describe('Browser Tests', function () {
|
||||||
|
this.timeout(TIMEOUT)
|
||||||
|
|
||||||
it('Integration Tests', async function () {
|
it('Integration Tests', async function () {
|
||||||
const browser = await puppeteer.launch({ headless: true })
|
const browser = await puppeteer.launch({ headless: true })
|
||||||
try {
|
try {
|
||||||
const page = await browser.newPage().catch()
|
const page = await browser.newPage().catch()
|
||||||
|
page.setDefaultNavigationTimeout(0)
|
||||||
|
|
||||||
await page.goto(
|
await page.goto(
|
||||||
path.join('file:///', __dirname, '../localIntegrationRunner.html'),
|
path.join('file:///', __dirname, '../localIntegrationRunner.html'),
|
||||||
)
|
)
|
||||||
|
|
||||||
await page.waitForFunction(
|
await page.waitForFunction(
|
||||||
'document.querySelector("body").innerText.includes("submit multisigned transaction")',
|
'document.querySelector("body").innerText.includes("submit multisigned transaction")',
|
||||||
|
{ timeout: TIMEOUT },
|
||||||
)
|
)
|
||||||
|
|
||||||
const fails = await page.evaluate(() => {
|
const fails = await page.evaluate(() => {
|
||||||
|
|||||||
64
test/integration/generateFaucetWallet.ts
Normal file
64
test/integration/generateFaucetWallet.ts
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
import assert from 'assert'
|
||||||
|
|
||||||
|
import _ from 'lodash'
|
||||||
|
|
||||||
|
import { Client, isValidClassicAddress, isValidXAddress } from 'xrpl-local'
|
||||||
|
// how long before each test case times out
|
||||||
|
const TIMEOUT = 60000
|
||||||
|
// This test is reliant on external networks, and as such may be flaky.
|
||||||
|
describe('generateFaucetWallet', function () {
|
||||||
|
this.timeout(TIMEOUT)
|
||||||
|
|
||||||
|
it('submit generates a testnet wallet', async function () {
|
||||||
|
const api = new Client('wss://s.altnet.rippletest.net:51233')
|
||||||
|
|
||||||
|
await api.connect()
|
||||||
|
const wallet = await api.generateFaucetWallet()
|
||||||
|
|
||||||
|
assert.notEqual(wallet, undefined)
|
||||||
|
assert(isValidClassicAddress(wallet?.classicAddress ?? ''))
|
||||||
|
assert(isValidXAddress(wallet?.getXAddress() ?? ''))
|
||||||
|
|
||||||
|
const info = await api.request({
|
||||||
|
command: 'account_info',
|
||||||
|
account: wallet?.classicAddress ?? '',
|
||||||
|
})
|
||||||
|
assert.equal(info.result.account_data.Balance, '1000000000')
|
||||||
|
|
||||||
|
await api.generateFaucetWallet(wallet)
|
||||||
|
|
||||||
|
const afterSent = await api.request({
|
||||||
|
command: 'account_info',
|
||||||
|
account: wallet?.classicAddress ?? '',
|
||||||
|
})
|
||||||
|
assert.equal(afterSent.result.account_data.Balance, '2000000000')
|
||||||
|
|
||||||
|
await api.disconnect()
|
||||||
|
})
|
||||||
|
it('submit generates a devnet wallet', async function () {
|
||||||
|
const api = new Client('wss://s.devnet.rippletest.net:51233')
|
||||||
|
|
||||||
|
await api.connect()
|
||||||
|
const wallet = await api.generateFaucetWallet()
|
||||||
|
|
||||||
|
assert.notEqual(wallet, undefined)
|
||||||
|
assert(isValidClassicAddress(wallet?.classicAddress ?? ''))
|
||||||
|
assert(isValidXAddress(wallet?.getXAddress() ?? ''))
|
||||||
|
|
||||||
|
const info = await api.request({
|
||||||
|
command: 'account_info',
|
||||||
|
account: wallet?.classicAddress ?? '',
|
||||||
|
})
|
||||||
|
assert.equal(info.result.account_data.Balance, '1000000000')
|
||||||
|
|
||||||
|
await api.generateFaucetWallet(wallet)
|
||||||
|
|
||||||
|
const afterSent = await api.request({
|
||||||
|
command: 'account_info',
|
||||||
|
account: wallet?.classicAddress ?? '',
|
||||||
|
})
|
||||||
|
assert.equal(afterSent.result.account_data.Balance, '2000000000')
|
||||||
|
|
||||||
|
await api.disconnect()
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -36,4 +36,6 @@ export * from './requests/ripplePathFind'
|
|||||||
export * from './requests/submit'
|
export * from './requests/submit'
|
||||||
export * from './requests/tx'
|
export * from './requests/tx'
|
||||||
export * from './requests/utility'
|
export * from './requests/utility'
|
||||||
|
|
||||||
|
export * from './generateFaucetWallet'
|
||||||
export * from './integration'
|
export * from './integration'
|
||||||
|
|||||||
@@ -32,6 +32,6 @@ describe('Get Faucet URL', function () {
|
|||||||
|
|
||||||
it('returns undefined if not a Testnet or Devnet server URL', function () {
|
it('returns undefined if not a Testnet or Devnet server URL', function () {
|
||||||
// Info: setupClient.setup creates a connection to 'localhost'
|
// Info: setupClient.setup creates a connection to 'localhost'
|
||||||
assert.strictEqual(getFaucetUrl(this.client), undefined)
|
assert.throws(() => getFaucetUrl(this.client))
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user