mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-04 13:05:49 +00:00
* 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
196 lines
5.7 KiB
TypeScript
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),
|
|
)
|
|
})
|
|
})
|