Files
xahau.js/packages/xrpl/test/client/partialPayments.test.ts
Omar Khan 8e2aba3b78 feat: add rippled API v2 support and use as default (#2656)
* add apiVersion support to requests and AccountInfoResponse v1/v2 types

* fix submitAndWait signature

* update docker container README

* update tests

* fix apiVersion param in wrong position of Client.request

* add integ tests

* update HISTORY.md

* fix request.api_version

* update RIPPLED_DOCKER_IMAGE to use v2.1.0

* refactor Client.request signature

* update rippled docker image

* fix Client.requestAll

* update rippled docker image to use v2.1.1

* update README

* use import type

* fix faucet; unrelated to PR

* add api_version v2 support and set as default while providing support for v1

* refactor: add apiVersion to Client

* resolve errors

* use DeliverMax for isPartialPayment check

* update fixtures

* resolve lint errors

* add API v1 support for isPartialPayment

* update CONTRIBUTING

* update accountTx JSDoc

* revert deleted JSDoc comments in accountTx

* update JSDoc for account_info response

* only use client.apiVersion in Client.request()

* add ledger_hash

* remove API v1 comment from v2 model

* update meta_blob JSDoc

* delete second AccountTxRequest matching

* add close_time_iso

* set close_time_iso as optional field

* add meta_blob to BaseResponse

* Revert "add meta_blob to BaseResponse"

This reverts commit 89794c629dc515915e28752d7c2552bfeab266a3.

* use DEFAULT_API_VERSION throughout call stack

* improve JSDoc explanation of ledger_index

* remove this.apiVersion from getLedgerIndex

* refactor Client.request()

* refactor RequestManger.resolve()

* add TODO to fix TxResponse type assertion

* use @category ResponsesV1 for API v1 types

* refactor accountTxHasPartialPayment()

* remove TODO
2024-06-28 08:26:21 -04:00

196 lines
5.7 KiB
TypeScript

import { expect } from 'chai'
import cloneDeep from 'lodash/cloneDeep'
import rippled from '../fixtures/rippled'
import {
setupClient,
teardownClient,
type XrplTestContext,
} from '../setupClient'
const partialPaymentIOU = rippled.partial_payments.iou
const partialPaymentXRP = rippled.partial_payments.xrp
describe('client handling of tfPartialPayments', function () {
let testContext: XrplTestContext
beforeEach(async () => {
testContext = await setupClient()
})
afterEach(async () => teardownClient(testContext))
it('Tx with no tfPartialPayment', async function () {
testContext.mockRippled!.addResponse('tx', rippled.tx.Payment)
const resp = await testContext.client.request({
command: 'tx',
transaction: rippled.tx.Payment.result.tx_json.hash,
})
expect(resp.warnings).to.equal(undefined)
})
it('Tx with IOU tfPartialPayment', async function () {
const mockResponse = { ...rippled.tx.Payment, result: partialPaymentIOU }
testContext.mockRippled!.addResponse('tx', mockResponse)
const resp = await testContext.client.request({
command: 'tx',
transaction: mockResponse.result.tx_json.hash,
})
expect(resp.warnings).to.deep.equal([
{
id: 2001,
message: 'This response contains a Partial Payment',
},
])
})
it('Tx with XRP tfPartialPayment', async function () {
const mockResponse = { ...rippled.tx.Payment, result: partialPaymentXRP }
testContext.mockRippled!.addResponse('tx', mockResponse)
const resp = await testContext.client.request({
command: 'tx',
transaction: mockResponse.result.tx_json.hash,
})
expect(resp.warnings).to.deep.equal([
{
id: 2001,
message: 'This response contains a Partial Payment',
},
])
})
it('account_tx with no tfPartialPayment', async function () {
testContext.mockRippled!.addResponse(
'account_tx',
rippled.account_tx.normal,
)
const resp = await testContext.client.request({
command: 'account_tx',
account: rippled.account_tx.normal.result.account,
})
expect(resp.warnings).to.equal(undefined)
})
it('account_tx with IOU tfPartialPayment', async function () {
const partial = {
...rippled.tx.Payment,
result: partialPaymentIOU,
}
const mockResponse = rippled.account_tx.normal
mockResponse.result.transactions.push({
tx_json: partial.result.tx_json,
meta: partial.result.meta,
validated: true,
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- we are mocking the response
} as any)
testContext.mockRippled!.addResponse('account_tx', mockResponse)
const resp = await testContext.client.request({
command: 'account_tx',
account: mockResponse.result.account,
})
expect(resp.warnings).to.deep.equal([
{
id: 2001,
message: 'This response contains a Partial Payment',
},
])
})
it('account_tx with XRP tfPartialPayment', async function () {
// TODO: Create fixtues with partial payments instead of using ...
const partial = { ...rippled.tx.Payment, result: partialPaymentXRP }
const mockResponse = rippled.account_tx.normal
mockResponse.result.transactions.push({
tx_json: partial.result.tx_json,
meta: partial.result.meta,
validated: true,
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- we are mocking the response
} as any)
testContext.mockRippled!.addResponse('account_tx', mockResponse)
const resp = await testContext.client.request({
command: 'account_tx',
account: mockResponse.result.account,
})
expect(resp.warnings).to.deep.equal([
{
id: 2001,
message: 'This response contains a Partial Payment',
},
])
})
it('transaction_entry with no tfPartialPayment', async function () {
testContext.mockRippled!.addResponse(
'transaction_entry',
rippled.transaction_entry,
)
const resp = await testContext.client.request({
command: 'transaction_entry',
tx_hash: rippled.transaction_entry.result.tx_json.hash,
})
expect(resp.warnings).to.equal(undefined)
})
it('transaction_entry with XRP tfPartialPayment', async function () {
const mockResponse = cloneDeep(rippled.transaction_entry)
mockResponse.result.tx_json.DeliverMax = '1000'
testContext.mockRippled!.addResponse('transaction_entry', mockResponse)
const resp = await testContext.client.request({
command: 'transaction_entry',
tx_hash: mockResponse.result.tx_json.hash,
})
expect(resp.warnings).to.deep.equal([
{
id: 2001,
message: 'This response contains a Partial Payment',
},
])
})
it('Transactions stream with no tfPartialPayment', (done) => {
testContext.mockRippled!.addResponse(
'transaction_entry',
rippled.transaction_entry,
)
testContext.client.on('transaction', (tx) => {
expect(tx.warnings).to.equal(undefined)
done()
})
// @ts-expect-error Using private method for testing
testContext.client.connection.onMessage(
JSON.stringify(rippled.streams.transaction),
)
})
it('Transactions stream with XRP tfPartialPayment', (done) => {
testContext.mockRippled!.addResponse(
'transaction_entry',
rippled.transaction_entry,
)
testContext.client.on('transaction', (tx) => {
expect(tx.warnings).to.deep.equal([
{
id: 2001,
message: 'This response contains a Partial Payment',
},
])
done()
})
// @ts-expect-error Using private method for testing
testContext.client.connection.onMessage(
JSON.stringify(rippled.streams.partialPaymentTransaction),
)
})
})