mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-20 04:05:52 +00:00
refactor: define DepositPreauth transaction model (#1545)
- Defines a TypeScript type for DepositPreauth - Provides an optional function to users for verifying a DepositPreauth instance at runtime: verifyDepositPreauth() - Adds tests for verifyDepositPreauth()
This commit is contained in:
committed by
Mayukha Vadari
parent
1010183d2e
commit
f7b93c54ff
46
src/models/transactions/depositPreauth.ts
Normal file
46
src/models/transactions/depositPreauth.ts
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
import { ValidationError } from '../../common/errors'
|
||||||
|
import { BaseTransaction, verifyBaseTransaction } from './common'
|
||||||
|
|
||||||
|
export interface DepositPreauth extends BaseTransaction {
|
||||||
|
TransactionType: 'DepositPreauth'
|
||||||
|
Authorize?: string
|
||||||
|
Unauthorize?: string
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {DepositPreauth} tx A DepositPreauth Transaction.
|
||||||
|
* @returns {void}
|
||||||
|
* @throws {ValidationError} When the DepositPreauth is malformed.
|
||||||
|
*/
|
||||||
|
export function verifyDepositPreauth(tx: DepositPreauth): void {
|
||||||
|
verifyBaseTransaction(tx)
|
||||||
|
|
||||||
|
if (tx.Authorize !== undefined && tx.Unauthorize !== undefined) {
|
||||||
|
throw new ValidationError("DepositPreauth: can't provide both Authorize and Unauthorize fields")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tx.Authorize === undefined && tx.Unauthorize === undefined) {
|
||||||
|
throw new ValidationError('DepositPreauth: must provide either Authorize or Unauthorize field')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tx.Authorize !== undefined) {
|
||||||
|
if (typeof tx.Authorize !== 'string') {
|
||||||
|
throw new ValidationError('DepositPreauth: Authorize must be a string')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tx.Account === tx.Authorize) {
|
||||||
|
throw new ValidationError("DepositPreauth: Account can't preauthorize its own address")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tx.Unauthorize !== undefined) {
|
||||||
|
if (typeof tx.Unauthorize !== 'string') {
|
||||||
|
throw new ValidationError("DepositPreauth: Unauthorize must be a string")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tx.Account === tx.Unauthorize) {
|
||||||
|
throw new ValidationError("DepositPreauth: Account can't unauthorize its own address")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,4 +7,5 @@ export * from './checkCash'
|
|||||||
export * from './checkCancel'
|
export * from './checkCancel'
|
||||||
export * from './accountDelete'
|
export * from './accountDelete'
|
||||||
export * from './signerListSet'
|
export * from './signerListSet'
|
||||||
|
export * from './depositPreauth'
|
||||||
export * from './paymentTransaction'
|
export * from './paymentTransaction'
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import { AccountSet } from "./accountSet"
|
|||||||
import { CheckCancel } from "./checkCancel"
|
import { CheckCancel } from "./checkCancel"
|
||||||
import { CheckCash } from "./checkCash"
|
import { CheckCash } from "./checkCash"
|
||||||
import { CheckCreate } from "./checkCreate"
|
import { CheckCreate } from "./checkCreate"
|
||||||
|
import { DepositPreauth } from "./depositPreauth"
|
||||||
import { OfferCancel } from "./offerCancel"
|
import { OfferCancel } from "./offerCancel"
|
||||||
import { OfferCreate } from "./offerCreate"
|
import { OfferCreate } from "./offerCreate"
|
||||||
import { PaymentTransaction } from "./paymentTransaction"
|
import { PaymentTransaction } from "./paymentTransaction"
|
||||||
@@ -15,7 +16,7 @@ export type Transaction =
|
|||||||
| CheckCancel
|
| CheckCancel
|
||||||
| CheckCash
|
| CheckCash
|
||||||
| CheckCreate
|
| CheckCreate
|
||||||
// | DepositPreauth
|
| DepositPreauth
|
||||||
// | EscrowCancel
|
// | EscrowCancel
|
||||||
// | EscrowCreate
|
// | EscrowCreate
|
||||||
// | EscrowFinish
|
// | EscrowFinish
|
||||||
|
|||||||
83
test/models/depositPreauth.ts
Normal file
83
test/models/depositPreauth.ts
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
import { ValidationError } from 'xrpl-local/common/errors'
|
||||||
|
import { verifyDepositPreauth } from './../../src/models/transactions/depositPreauth'
|
||||||
|
import { assert } from 'chai'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DepositPreauth Transaction Verification Testing
|
||||||
|
*
|
||||||
|
* Providing runtime verification testing for each specific transaction type
|
||||||
|
*/
|
||||||
|
describe('DepositPreauth Transaction Verification', () => {
|
||||||
|
let depositPreauth
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
depositPreauth = {
|
||||||
|
TransactionType: 'DepositPreauth',
|
||||||
|
Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo',
|
||||||
|
} as any
|
||||||
|
})
|
||||||
|
|
||||||
|
it ('verifies valid DepositPreauth when only Authorize is provided', () => {
|
||||||
|
depositPreauth.Authorize = 'rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW'
|
||||||
|
assert.doesNotThrow(() => verifyDepositPreauth(depositPreauth))
|
||||||
|
})
|
||||||
|
|
||||||
|
it ('verifies valid DepositPreauth when only Unauthorize is provided', () => {
|
||||||
|
depositPreauth.Unauthorize = 'raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n'
|
||||||
|
assert.doesNotThrow(() => verifyDepositPreauth(depositPreauth))
|
||||||
|
})
|
||||||
|
|
||||||
|
it ('throws when both Authorize and Unauthorize are provided', () => {
|
||||||
|
depositPreauth.Authorize = 'rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW'
|
||||||
|
depositPreauth.Unauthorize = 'raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n'
|
||||||
|
assert.throws(
|
||||||
|
() => verifyDepositPreauth(depositPreauth),
|
||||||
|
ValidationError,
|
||||||
|
"DepositPreauth: can't provide both Authorize and Unauthorize fields"
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it ('throws when neither Authorize nor Unauthorize are provided', () => {
|
||||||
|
assert.throws(
|
||||||
|
() => verifyDepositPreauth(depositPreauth),
|
||||||
|
ValidationError,
|
||||||
|
'DepositPreauth: must provide either Authorize or Unauthorize field'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it ('throws when Authorize is not a string', () => {
|
||||||
|
depositPreauth.Authorize = 1234
|
||||||
|
assert.throws(
|
||||||
|
() => verifyDepositPreauth(depositPreauth),
|
||||||
|
ValidationError,
|
||||||
|
'DepositPreauth: Authorize must be a string'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it ('throws when an Account attempts to preauthorize its own address', () => {
|
||||||
|
depositPreauth.Authorize = depositPreauth.Account
|
||||||
|
assert.throws(
|
||||||
|
() => verifyDepositPreauth(depositPreauth),
|
||||||
|
ValidationError,
|
||||||
|
"DepositPreauth: Account can't preauthorize its own address"
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it ('throws when Unauthorize is not a string', () => {
|
||||||
|
depositPreauth.Unauthorize = 1234
|
||||||
|
assert.throws(
|
||||||
|
() => verifyDepositPreauth(depositPreauth),
|
||||||
|
ValidationError,
|
||||||
|
'DepositPreauth: Unauthorize must be a string'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it ('throws when an Account attempts to unauthorize its own address', () => {
|
||||||
|
depositPreauth.Unauthorize = depositPreauth.Account
|
||||||
|
assert.throws(
|
||||||
|
() => verifyDepositPreauth(depositPreauth),
|
||||||
|
ValidationError,
|
||||||
|
"DepositPreauth: Account can't unauthorize its own address"
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user