,
+ Asset: (
+
+ ),
Asset2: (
- // @ts-expect-error - MPT is not being supported for AMM transactions until https://github.com/XRPLF/rippled/pull/5285 is merged
-
+
),
}}
/>
diff --git a/src/containers/shared/components/Transaction/AMMDelete/Simple.tsx b/src/containers/shared/components/Transaction/AMMDelete/Simple.tsx
index 6faaede28..26b74e2ce 100644
--- a/src/containers/shared/components/Transaction/AMMDelete/Simple.tsx
+++ b/src/containers/shared/components/Transaction/AMMDelete/Simple.tsx
@@ -4,20 +4,29 @@ import { type AMMDelete } from 'xrpl'
import { SimpleRow } from '../SimpleRow'
import { TransactionSimpleProps } from '../types'
import Currency from '../../Currency'
+import { formatAsset } from '../../../../../rippled/lib/txSummary/formatAmount'
export const Simple = ({ data }: TransactionSimpleProps
) => {
const { t } = useTranslation()
const { Asset, Asset2 } = data.instructions
+ const asset1 = formatAsset(Asset)
+ const asset2 = formatAsset(Asset2)
return (
<>
- {/* @ts-expect-error - MPT is not being supported for AMM transactions until https://github.com/XRPLF/rippled/pull/5285 is merged */}
-
+
- {/* @ts-expect-error - MPT is not being supported for AMM transactions until https://github.com/XRPLF/rippled/pull/5285 is merged */}
-
+
>
)
diff --git a/src/containers/shared/components/Transaction/AMMDelete/TableDetail.tsx b/src/containers/shared/components/Transaction/AMMDelete/TableDetail.tsx
index fcebb71a0..379e13011 100644
--- a/src/containers/shared/components/Transaction/AMMDelete/TableDetail.tsx
+++ b/src/containers/shared/components/Transaction/AMMDelete/TableDetail.tsx
@@ -2,24 +2,33 @@ import { useTranslation } from 'react-i18next'
import { type AMMDelete } from 'xrpl'
import { TransactionTableDetailProps } from '../types'
import Currency from '../../Currency'
+import { formatAsset } from '../../../../../rippled/lib/txSummary/formatAmount'
export const TableDetail = ({
instructions,
}: TransactionTableDetailProps) => {
const { t } = useTranslation()
const { Asset, Asset2 } = instructions
+ const asset1 = formatAsset(Asset)
+ const asset2 = formatAsset(Asset2)
return (
{t('asset1')}
- {/* @ts-expect-error - MPT is not being supported for AMM transactions until https://github.com/XRPLF/rippled/pull/5285 is merged */}
-
+
{t('asset2')}
- {/* @ts-expect-error - MPT is not being supported for AMM transactions until https://github.com/XRPLF/rippled/pull/5285 is merged */}
-
+
)
diff --git a/src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteDescription.test.tsx b/src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteDescription.test.tsx
index 9292b7c39..10fa7cf2d 100644
--- a/src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteDescription.test.tsx
+++ b/src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteDescription.test.tsx
@@ -1,11 +1,22 @@
import i18n from '../../../../../../i18n/testConfigEnglish'
import mockAMMDelete from './mock_data/AMMDelete.json'
+import mockAMMDeleteMPT from './mock_data/AMMDeleteMPT.json'
import { Description } from '../Description'
import { createDescriptionRenderFactory } from '../../test'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
+
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
+}))
const renderComponent = createDescriptionRenderFactory(Description, i18n)
describe('AMMDelete: Description', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders description for AMMDelete transaction', () => {
const { container, unmount } = renderComponent(mockAMMDelete)
@@ -21,4 +32,35 @@ describe('AMMDelete: Description', () => {
unmount()
})
+
+ it('renders with MPT asset (no ticker - displays mpt_issuance_id)', () => {
+ const { container, unmount } = renderComponent(mockAMMDeleteMPT)
+
+ expect(
+ container.querySelector('[data-testid="amm-delete-description"]'),
+ ).toHaveTextContent(
+ 'Attempted to delete the AMM for \uE900 XRP and 000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F.',
+ )
+ expect(container.querySelector('a')).toHaveAttribute(
+ 'href',
+ '/mpt/000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F',
+ )
+ unmount()
+ })
+
+ it('renders with MPT asset (with ticker - displays ticker symbol)', () => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
+ data: { parsedMPTMetadata: { ticker: 'XMPT' } },
+ })
+ const { container, unmount } = renderComponent(mockAMMDeleteMPT)
+
+ expect(
+ container.querySelector('[data-testid="amm-delete-description"]'),
+ ).toHaveTextContent('Attempted to delete the AMM for \uE900 XRP and XMPT.')
+ expect(container.querySelector('a')).toHaveAttribute(
+ 'href',
+ '/mpt/000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F',
+ )
+ unmount()
+ })
})
diff --git a/src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteSimple.test.tsx b/src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteSimple.test.tsx
index 95a08d3f7..15fa5b212 100644
--- a/src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteSimple.test.tsx
+++ b/src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteSimple.test.tsx
@@ -4,12 +4,23 @@ import { expectSimpleRowText } from '../../test'
import { createSimpleRenderFactory } from '../../test/createWrapperFactory'
import { Simple } from '../Simple'
import mockAMMDelete from './mock_data/AMMDelete.json'
+import mockAMMDeleteMPT from './mock_data/AMMDeleteMPT.json'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
+
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
+}))
const renderComponent = createSimpleRenderFactory(Simple, i18n)
describe('AMMDelete: Simple', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders', () => {
- const { container, unmount } = renderComponent(mockAMMDelete) // TOOD: - Make this look up asset 1 / asset 2 currency codes
+ const { container, unmount } = renderComponent(mockAMMDelete)
expectSimpleRowText(container, 'asset1', '\uE900 XRP')
expectSimpleRowText(
container,
@@ -18,4 +29,25 @@ describe('AMMDelete: Simple', () => {
)
unmount()
})
+
+ it('renders with MPT asset (no ticker - displays mpt_issuance_id)', () => {
+ const { container, unmount } = renderComponent(mockAMMDeleteMPT)
+ expectSimpleRowText(container, 'asset1', '\uE900 XRP')
+ expectSimpleRowText(
+ container,
+ 'asset2',
+ '000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F',
+ )
+ unmount()
+ })
+
+ it('renders with MPT asset (with ticker - displays ticker symbol)', () => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
+ data: { parsedMPTMetadata: { ticker: 'XMPT' } },
+ })
+ const { container, unmount } = renderComponent(mockAMMDeleteMPT)
+ expectSimpleRowText(container, 'asset1', '\uE900 XRP')
+ expectSimpleRowText(container, 'asset2', 'XMPT')
+ unmount()
+ })
})
diff --git a/src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteTableDetail.test.tsx b/src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteTableDetail.test.tsx
index 5eecff873..fe2501edd 100644
--- a/src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteTableDetail.test.tsx
+++ b/src/containers/shared/components/Transaction/AMMDelete/test/AMMDeleteTableDetail.test.tsx
@@ -1,11 +1,22 @@
import { TableDetail } from '../TableDetail'
import mockAMMDelete from './mock_data/AMMDelete.json'
+import mockAMMDeleteMPT from './mock_data/AMMDeleteMPT.json'
import { createTableDetailRenderFactory } from '../../test'
import i18n from '../../../../../../i18n/testConfigEnglish'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
+
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
+}))
const renderComponent = createTableDetailRenderFactory(TableDetail, i18n)
describe('AMMDelete: TableDetail', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders with an expiration and offer', () => {
const { container, unmount } = renderComponent(mockAMMDelete)
@@ -17,4 +28,35 @@ describe('AMMDelete: TableDetail', () => {
)
unmount()
})
+
+ it('renders with MPT asset (no ticker - displays mpt_issuance_id)', () => {
+ const { container, unmount } = renderComponent(mockAMMDeleteMPT)
+
+ expect(container.querySelector('[data-testid="asset"]')).toHaveTextContent(
+ 'Asset 1\uE900 XRP',
+ )
+ expect(container.querySelector('[data-testid="asset2"]')).toHaveTextContent(
+ 'Asset 2000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F',
+ )
+ unmount()
+ })
+
+ it('renders with MPT asset (with ticker - displays ticker symbol)', () => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
+ data: { parsedMPTMetadata: { ticker: 'XMPT' } },
+ })
+ const { container, unmount } = renderComponent(mockAMMDeleteMPT)
+
+ expect(container.querySelector('[data-testid="asset"]')).toHaveTextContent(
+ 'Asset 1\uE900 XRP',
+ )
+ expect(container.querySelector('[data-testid="asset2"]')).toHaveTextContent(
+ 'Asset 2XMPT',
+ )
+ expect(container.querySelector('[data-testid="asset2"] a')).toHaveAttribute(
+ 'href',
+ '/mpt/000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F',
+ )
+ unmount()
+ })
})
diff --git a/src/containers/shared/components/Transaction/AMMDelete/test/mock_data/AMMDeleteMPT.json b/src/containers/shared/components/Transaction/AMMDelete/test/mock_data/AMMDeleteMPT.json
new file mode 100644
index 000000000..b2e3717a5
--- /dev/null
+++ b/src/containers/shared/components/Transaction/AMMDelete/test/mock_data/AMMDeleteMPT.json
@@ -0,0 +1,47 @@
+{
+ "tx": {
+ "Account": "rm5c42Crqpdch5fbuCdHmSMV1wrL9arV9",
+ "Asset": {
+ "currency": "XRP"
+ },
+ "Asset2": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Fee": "12",
+ "Flags": 0,
+ "LastLedgerSequence": 372572,
+ "Sequence": 372548,
+ "SigningPubKey": "ED6784394D134E202BCCD957A1A3C5A66647092F3929D388A878A16D1910875435",
+ "TransactionType": "AMMDelete",
+ "TxnSignature": "F9AA459D8CE593E6E2E69BB6A6F723A4822FD5F40314F642FA9EC5187F7FD937FBD3E8A214119D04C74358A3478DCB6EAABE02EFAC1E6E125E15310E18A36D0D",
+ "date": 1693268101000
+ },
+ "meta": {
+ "AffectedNodes": [
+ {
+ "ModifiedNode": {
+ "FinalFields": {
+ "Account": "rm5c42Crqpdch5fbuCdHmSMV1wrL9arV9",
+ "Balance": "9997998976",
+ "Flags": 8388608,
+ "OwnerCount": 1,
+ "Sequence": 372549
+ },
+ "LedgerEntryType": "AccountRoot",
+ "LedgerIndex": "84CA74ECFDB34F014142013B4CD2FBE3942C7BA9BA7E1FC5A1CB1EF719173812",
+ "PreviousFields": {
+ "Balance": "9997998988",
+ "Sequence": 372548
+ },
+ "PreviousTxnID": "E5051DA09F143A719521D6ABBB3856EA3E2CA38EF1CFF0E7DF9FE1C31DD73B6D",
+ "PreviousTxnLgrSeq": 372552
+ }
+ }
+ ],
+ "TransactionIndex": 0,
+ "TransactionResult": "tecAMM_NOT_EMPTY"
+ },
+ "hash": "D159883D456646562F51F3E5A2754F7D880D39A6372EDF679A43A7DDB77F735C",
+ "ledger_index": 372554,
+ "date": 1693268101000
+}
diff --git a/src/containers/shared/components/Transaction/AMMDeposit/test/AMMDeposit.test.tsx b/src/containers/shared/components/Transaction/AMMDeposit/test/AMMDeposit.test.tsx
index 3a811f4bc..50b0ea73d 100644
--- a/src/containers/shared/components/Transaction/AMMDeposit/test/AMMDeposit.test.tsx
+++ b/src/containers/shared/components/Transaction/AMMDeposit/test/AMMDeposit.test.tsx
@@ -11,10 +11,22 @@ import depositEprice from './mock_data/deposit_eprice.json'
import depositNonXRP from './mock_data/deposit_nonxrp.json'
import depositFail from './mock_data/deposit_fail.json'
import depositLPToken from './mock_data/deposit_lptoken.json'
+import depositMPT from './mock_data/deposit_mpt.json'
+import depositBothMPT from './mock_data/deposit_both_mpt.json'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
+
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
+}))
describe('AMM Deposit Tests', () => {
const renderComponent = createSimpleRenderFactory(Simple)
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders with both assets', () => {
const { container, unmount } = renderComponent(depositBothAssets)
expectSimpleRowText(container, 'asset1', '\uE90010,997.290462 XRP')
@@ -112,4 +124,73 @@ describe('AMM Deposit Tests', () => {
expectSimpleRowText(container, 'lp_tokens', '4,279,342.4')
unmount()
})
+
+ it('renders with MPT asset (no ticker - displays mpt_issuance_id)', () => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
+ data: { assetScale: 0 },
+ })
+ const { container, unmount } = renderComponent(depositMPT)
+ expectSimpleRowText(container, 'asset1', '\uE9001,000.00 XRP')
+ expectSimpleRowText(
+ container,
+ 'asset2',
+ '10,000 000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F',
+ )
+ expectSimpleRowText(
+ container,
+ 'account_id',
+ 'rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W',
+ )
+ unmount()
+ })
+
+ it('renders with MPT asset (with ticker - displays ticker symbol)', () => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
+ data: { assetScale: 0, parsedMPTMetadata: { ticker: 'XMPT' } },
+ })
+ const { container, unmount } = renderComponent(depositMPT)
+ expectSimpleRowText(container, 'asset1', '\uE9001,000.00 XRP')
+ expectSimpleRowText(container, 'asset2', '10,000 XMPT')
+ expectSimpleRowText(
+ container,
+ 'account_id',
+ 'rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W',
+ )
+ unmount()
+ })
+
+ it('renders with both assets as MPT (no ticker)', () => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
+ data: { assetScale: 0 },
+ })
+ const { container, unmount } = renderComponent(depositBothMPT)
+ expectSimpleRowText(
+ container,
+ 'asset1',
+ '5,000 000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F',
+ )
+ expectSimpleRowText(
+ container,
+ 'asset2',
+ '2,000 00000ABC2E631B9DFA58324DC38CDF18934FAFFFCDF69D5F',
+ )
+ unmount()
+ })
+
+ it('renders with both assets as MPT (with ticker)', () => {
+ ;(useMPTIssuance as jest.Mock).mockImplementation((mptID: string) => {
+ if (mptID === '000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F') {
+ return {
+ data: { assetScale: 0, parsedMPTMetadata: { ticker: 'XGLD' } },
+ }
+ }
+ return {
+ data: { assetScale: 0, parsedMPTMetadata: { ticker: 'XUSD' } },
+ }
+ })
+ const { container, unmount } = renderComponent(depositBothMPT)
+ expectSimpleRowText(container, 'asset1', '5,000 XGLD')
+ expectSimpleRowText(container, 'asset2', '2,000 XUSD')
+ unmount()
+ })
})
diff --git a/src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_both_mpt.json b/src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_both_mpt.json
new file mode 100644
index 000000000..1cb5885d3
--- /dev/null
+++ b/src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_both_mpt.json
@@ -0,0 +1,93 @@
+{
+ "meta": {
+ "AffectedNodes": [
+ {
+ "ModifiedNode": {
+ "LedgerEntryType": "MPToken",
+ "LedgerIndex": "AABB00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDD",
+ "FinalFields": {
+ "Account": "rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9",
+ "MPTokenIssuanceID": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F",
+ "MPTAmount": "495000"
+ },
+ "PreviousFields": {
+ "MPTAmount": "500000"
+ },
+ "PreviousTxnID": "98D314D1EC81BE9342EDA1C04BCEFA8F327B0EFE12839F1EAB52065492B20E82",
+ "PreviousTxnLgrSeq": 114138
+ }
+ },
+ {
+ "ModifiedNode": {
+ "LedgerEntryType": "MPToken",
+ "LedgerIndex": "CCDD00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDD",
+ "FinalFields": {
+ "Account": "rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9",
+ "MPTokenIssuanceID": "00000ABC2E631B9DFA58324DC38CDF18934FAFFFCDF69D5F",
+ "MPTAmount": "248000"
+ },
+ "PreviousFields": {
+ "MPTAmount": "250000"
+ },
+ "PreviousTxnID": "88D314D1EC81BE9342EDA1C04BCEFA8F327B0EFE12839F1EAB52065492B20E82",
+ "PreviousTxnLgrSeq": 114139
+ }
+ },
+ {
+ "ModifiedNode": {
+ "FinalFields": {
+ "Account": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "Asset": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Asset2": {
+ "mpt_issuance_id": "00000ABC2E631B9DFA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Flags": 0,
+ "LPTokenBalance": {
+ "currency": "03930D02208264E2E40EC1B0C09E4DB96EE197B1",
+ "issuer": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "value": "10515288.25827238"
+ },
+ "TradingFee": 0
+ },
+ "LedgerEntryType": "AMM",
+ "LedgerIndex": "C7FD06649235AF4CABD8FA6D8BB0CAF6C6EA5038A74D0DDD5025290683636D02",
+ "PreviousFields": {
+ "LPTokenBalance": {
+ "currency": "03930D02208264E2E40EC1B0C09E4DB96EE197B1",
+ "issuer": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "value": "10027169"
+ }
+ }
+ }
+ }
+ ],
+ "TransactionIndex": 0,
+ "TransactionResult": "tesSUCCESS"
+ },
+ "tx": {
+ "Account": "rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9",
+ "Amount": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F",
+ "value": "5000"
+ },
+ "Amount2": {
+ "mpt_issuance_id": "00000ABC2E631B9DFA58324DC38CDF18934FAFFFCDF69D5F",
+ "value": "2000"
+ },
+ "Asset": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Asset2": {
+ "mpt_issuance_id": "00000ABC2E631B9DFA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Fee": "10",
+ "Flags": 1048576,
+ "Sequence": 7,
+ "SigningPubKey": "023CFED4018084296285DD8A321C099134B9CF6DCD8D91DC067BABCFF0E3F2BE1A",
+ "TransactionType": "AMMDeposit",
+ "TxnSignature": "3045022100D1363F0A6D7252690820657B6ACCB35245E65D8DCDB48199578C213ED9D3E24B0220697D4DC057ECCD942BC59B0242411839C125696CD9DE9A3EFE45367EE0D1D29D",
+ "date": "2022-11-26T00:55:02Z"
+ }
+}
diff --git a/src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_mpt.json b/src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_mpt.json
new file mode 100644
index 000000000..55d25f56b
--- /dev/null
+++ b/src/containers/shared/components/Transaction/AMMDeposit/test/mock_data/deposit_mpt.json
@@ -0,0 +1,111 @@
+{
+ "meta": {
+ "AffectedNodes": [
+ {
+ "ModifiedNode": {
+ "LedgerEntryType": "MPToken",
+ "LedgerIndex": "AABB00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDD",
+ "FinalFields": {
+ "Account": "rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9",
+ "MPTokenIssuanceID": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F",
+ "MPTAmount": "990000"
+ },
+ "PreviousFields": {
+ "MPTAmount": "1000000"
+ },
+ "PreviousTxnID": "98D314D1EC81BE9342EDA1C04BCEFA8F327B0EFE12839F1EAB52065492B20E82",
+ "PreviousTxnLgrSeq": 114138
+ }
+ },
+ {
+ "ModifiedNode": {
+ "FinalFields": {
+ "Account": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "Balance": "11027169000",
+ "Flags": 59768832,
+ "OwnerCount": 1,
+ "Sequence": 1
+ },
+ "LedgerEntryType": "AccountRoot",
+ "LedgerIndex": "471AC5276FBA4916D53017D7073D44C5F4780CC73954B1715DC8A65365E8ACAC",
+ "PreviousFields": {
+ "Balance": "10027169000"
+ },
+ "PreviousTxnID": "209B17403B42271F2D50DEC0F808AE07EC04B8B9605FF52B1093BFF31676AD2C",
+ "PreviousTxnLgrSeq": 233852
+ }
+ },
+ {
+ "ModifiedNode": {
+ "FinalFields": {
+ "Account": "rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9",
+ "Balance": "998972830930",
+ "Flags": 8388608,
+ "OwnerCount": 2,
+ "Sequence": 8
+ },
+ "LedgerEntryType": "AccountRoot",
+ "LedgerIndex": "53383A918D45DEF78DED23CE5141C0FAB44661D602465F5FCFC487792448F1E2",
+ "PreviousFields": {
+ "Balance": "999972830940",
+ "Sequence": 7
+ },
+ "PreviousTxnID": "209B17403B42271F2D50DEC0F808AE07EC04B8B9605FF52B1093BFF31676AD2C",
+ "PreviousTxnLgrSeq": 233852
+ }
+ },
+ {
+ "ModifiedNode": {
+ "FinalFields": {
+ "Account": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "Asset": {
+ "currency": "XRP"
+ },
+ "Asset2": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Flags": 0,
+ "LPTokenBalance": {
+ "currency": "03930D02208264E2E40EC1B0C09E4DB96EE197B1",
+ "issuer": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "value": "10515288.25827238"
+ },
+ "TradingFee": 0
+ },
+ "LedgerEntryType": "AMM",
+ "LedgerIndex": "C7FD06649235AF4CABD8FA6D8BB0CAF6C6EA5038A74D0DDD5025290683636D02",
+ "PreviousFields": {
+ "LPTokenBalance": {
+ "currency": "03930D02208264E2E40EC1B0C09E4DB96EE197B1",
+ "issuer": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "value": "10027169"
+ }
+ }
+ }
+ }
+ ],
+ "TransactionIndex": 0,
+ "TransactionResult": "tesSUCCESS"
+ },
+ "tx": {
+ "Account": "rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9",
+ "Amount": "1000000000",
+ "Amount2": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F",
+ "value": "10000"
+ },
+ "Asset": {
+ "currency": "XRP"
+ },
+ "Asset2": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Fee": "10",
+ "Flags": 1048576,
+ "Sequence": 7,
+ "SigningPubKey": "023CFED4018084296285DD8A321C099134B9CF6DCD8D91DC067BABCFF0E3F2BE1A",
+ "TransactionType": "AMMDeposit",
+ "TxnSignature": "3045022100D1363F0A6D7252690820657B6ACCB35245E65D8DCDB48199578C213ED9D3E24B0220697D4DC057ECCD942BC59B0242411839C125696CD9DE9A3EFE45367EE0D1D29D",
+ "date": "2022-11-26T00:55:02Z"
+ }
+}
diff --git a/src/containers/shared/components/Transaction/AMMWithdraw/test/AMMWithdraw.test.tsx b/src/containers/shared/components/Transaction/AMMWithdraw/test/AMMWithdraw.test.tsx
index 3b7d6b635..1b1a450be 100644
--- a/src/containers/shared/components/Transaction/AMMWithdraw/test/AMMWithdraw.test.tsx
+++ b/src/containers/shared/components/Transaction/AMMWithdraw/test/AMMWithdraw.test.tsx
@@ -9,10 +9,22 @@ import withdrawUSDMock from './mock_data/withdraw_usd.json'
import withdrawXRPMock from './mock_data/withdraw_xrp.json'
import withdrawEpriceMock from './mock_data/withdraw_eprice.json'
import withdrawAll from './mock_data/withdraw_all.json'
+import withdrawMPT from './mock_data/withdraw_mpt.json'
+import withdrawBothMPT from './mock_data/withdraw_both_mpt.json'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
+
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
+}))
describe('AMM Withdraw Tests', () => {
const renderComponent = createSimpleRenderFactory(Simple)
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders from transaction', () => {
const { container, unmount } = renderComponent(withdrawMock)
expectSimpleRowText(container, 'asset1', '\uE9003,666.580862 XRP')
@@ -84,4 +96,63 @@ describe('AMM Withdraw Tests', () => {
expectSimpleRowText(container, 'asset1', '\uE9000.000005 XRP')
unmount()
})
+
+ it('renders with XRP + MPT withdraw (no ticker)', () => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
+ data: { assetScale: 0 },
+ })
+ const { container, unmount } = renderComponent(withdrawMPT)
+ expectSimpleRowText(container, 'asset1', '\uE900999.99998 XRP')
+ expectSimpleRowText(
+ container,
+ 'asset2',
+ '5,000 000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F',
+ )
+ unmount()
+ })
+
+ it('renders with XRP + MPT withdraw (with ticker)', () => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
+ data: { assetScale: 0, parsedMPTMetadata: { ticker: 'XGLD' } },
+ })
+ const { container, unmount } = renderComponent(withdrawMPT)
+ expectSimpleRowText(container, 'asset1', '\uE900999.99998 XRP')
+ expectSimpleRowText(container, 'asset2', '5,000 XGLD')
+ unmount()
+ })
+
+ it('renders with both MPT assets withdraw (no ticker)', () => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
+ data: { assetScale: 0 },
+ })
+ const { container, unmount } = renderComponent(withdrawBothMPT)
+ expectSimpleRowText(
+ container,
+ 'asset1',
+ '3,000 000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F',
+ )
+ expectSimpleRowText(
+ container,
+ 'asset2',
+ '1,500 00000ABC2E631B9DFA58324DC38CDF18934FAFFFCDF69D5F',
+ )
+ unmount()
+ })
+
+ it('renders with both MPT assets withdraw (with ticker)', () => {
+ ;(useMPTIssuance as jest.Mock).mockImplementation((mptID: string) => {
+ if (mptID === '000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F') {
+ return {
+ data: { assetScale: 0, parsedMPTMetadata: { ticker: 'XGLD' } },
+ }
+ }
+ return {
+ data: { assetScale: 0, parsedMPTMetadata: { ticker: 'XUSD' } },
+ }
+ })
+ const { container, unmount } = renderComponent(withdrawBothMPT)
+ expectSimpleRowText(container, 'asset1', '3,000 XGLD')
+ expectSimpleRowText(container, 'asset2', '1,500 XUSD')
+ unmount()
+ })
})
diff --git a/src/containers/shared/components/Transaction/AMMWithdraw/test/mock_data/withdraw_both_mpt.json b/src/containers/shared/components/Transaction/AMMWithdraw/test/mock_data/withdraw_both_mpt.json
new file mode 100644
index 000000000..91605e2c8
--- /dev/null
+++ b/src/containers/shared/components/Transaction/AMMWithdraw/test/mock_data/withdraw_both_mpt.json
@@ -0,0 +1,93 @@
+{
+ "meta": {
+ "AffectedNodes": [
+ {
+ "ModifiedNode": {
+ "LedgerEntryType": "MPToken",
+ "LedgerIndex": "AABB00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDD",
+ "FinalFields": {
+ "Account": "rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9",
+ "MPTokenIssuanceID": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F",
+ "MPTAmount": "503000"
+ },
+ "PreviousFields": {
+ "MPTAmount": "500000"
+ },
+ "PreviousTxnID": "98D314D1EC81BE9342EDA1C04BCEFA8F327B0EFE12839F1EAB52065492B20E82",
+ "PreviousTxnLgrSeq": 114138
+ }
+ },
+ {
+ "ModifiedNode": {
+ "LedgerEntryType": "MPToken",
+ "LedgerIndex": "CCDD00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDD",
+ "FinalFields": {
+ "Account": "rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9",
+ "MPTokenIssuanceID": "00000ABC2E631B9DFA58324DC38CDF18934FAFFFCDF69D5F",
+ "MPTAmount": "251500"
+ },
+ "PreviousFields": {
+ "MPTAmount": "250000"
+ },
+ "PreviousTxnID": "88D314D1EC81BE9342EDA1C04BCEFA8F327B0EFE12839F1EAB52065492B20E82",
+ "PreviousTxnLgrSeq": 114139
+ }
+ },
+ {
+ "ModifiedNode": {
+ "FinalFields": {
+ "Account": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "Asset": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Asset2": {
+ "mpt_issuance_id": "00000ABC2E631B9DFA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Flags": 0,
+ "LPTokenBalance": {
+ "currency": "03930D02208264E2E40EC1B0C09E4DB96EE197B1",
+ "issuer": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "value": "9515288.25827238"
+ },
+ "TradingFee": 0
+ },
+ "LedgerEntryType": "AMM",
+ "LedgerIndex": "C7FD06649235AF4CABD8FA6D8BB0CAF6C6EA5038A74D0DDD5025290683636D02",
+ "PreviousFields": {
+ "LPTokenBalance": {
+ "currency": "03930D02208264E2E40EC1B0C09E4DB96EE197B1",
+ "issuer": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "value": "10027169"
+ }
+ }
+ }
+ }
+ ],
+ "TransactionIndex": 0,
+ "TransactionResult": "tesSUCCESS"
+ },
+ "tx": {
+ "Account": "rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9",
+ "Amount": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F",
+ "value": "3000"
+ },
+ "Amount2": {
+ "mpt_issuance_id": "00000ABC2E631B9DFA58324DC38CDF18934FAFFFCDF69D5F",
+ "value": "1500"
+ },
+ "Asset": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Asset2": {
+ "mpt_issuance_id": "00000ABC2E631B9DFA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Fee": "10",
+ "Flags": 1048576,
+ "Sequence": 7,
+ "SigningPubKey": "023CFED4018084296285DD8A321C099134B9CF6DCD8D91DC067BABCFF0E3F2BE1A",
+ "TransactionType": "AMMWithdraw",
+ "TxnSignature": "3045022100D1363F0A6D7252690820657B6ACCB35245E65D8DCDB48199578C213ED9D3E24B0220697D4DC057ECCD942BC59B0242411839C125696CD9DE9A3EFE45367EE0D1D29D",
+ "date": "2022-11-26T00:55:02Z"
+ }
+}
diff --git a/src/containers/shared/components/Transaction/AMMWithdraw/test/mock_data/withdraw_mpt.json b/src/containers/shared/components/Transaction/AMMWithdraw/test/mock_data/withdraw_mpt.json
new file mode 100644
index 000000000..dce212470
--- /dev/null
+++ b/src/containers/shared/components/Transaction/AMMWithdraw/test/mock_data/withdraw_mpt.json
@@ -0,0 +1,111 @@
+{
+ "meta": {
+ "AffectedNodes": [
+ {
+ "ModifiedNode": {
+ "LedgerEntryType": "MPToken",
+ "LedgerIndex": "AABB00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDD",
+ "FinalFields": {
+ "Account": "rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9",
+ "MPTokenIssuanceID": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F",
+ "MPTAmount": "1005000"
+ },
+ "PreviousFields": {
+ "MPTAmount": "1000000"
+ },
+ "PreviousTxnID": "98D314D1EC81BE9342EDA1C04BCEFA8F327B0EFE12839F1EAB52065492B20E82",
+ "PreviousTxnLgrSeq": 114138
+ }
+ },
+ {
+ "ModifiedNode": {
+ "FinalFields": {
+ "Account": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "Balance": "9027169000",
+ "Flags": 59768832,
+ "OwnerCount": 1,
+ "Sequence": 1
+ },
+ "LedgerEntryType": "AccountRoot",
+ "LedgerIndex": "471AC5276FBA4916D53017D7073D44C5F4780CC73954B1715DC8A65365E8ACAC",
+ "PreviousFields": {
+ "Balance": "10027169000"
+ },
+ "PreviousTxnID": "209B17403B42271F2D50DEC0F808AE07EC04B8B9605FF52B1093BFF31676AD2C",
+ "PreviousTxnLgrSeq": 233852
+ }
+ },
+ {
+ "ModifiedNode": {
+ "FinalFields": {
+ "Account": "rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9",
+ "Balance": "1000972830930",
+ "Flags": 8388608,
+ "OwnerCount": 2,
+ "Sequence": 8
+ },
+ "LedgerEntryType": "AccountRoot",
+ "LedgerIndex": "53383A918D45DEF78DED23CE5141C0FAB44661D602465F5FCFC487792448F1E2",
+ "PreviousFields": {
+ "Balance": "999972830940",
+ "Sequence": 7
+ },
+ "PreviousTxnID": "209B17403B42271F2D50DEC0F808AE07EC04B8B9605FF52B1093BFF31676AD2C",
+ "PreviousTxnLgrSeq": 233852
+ }
+ },
+ {
+ "ModifiedNode": {
+ "FinalFields": {
+ "Account": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "Asset": {
+ "currency": "XRP"
+ },
+ "Asset2": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Flags": 0,
+ "LPTokenBalance": {
+ "currency": "03930D02208264E2E40EC1B0C09E4DB96EE197B1",
+ "issuer": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "value": "9515288.25827238"
+ },
+ "TradingFee": 0
+ },
+ "LedgerEntryType": "AMM",
+ "LedgerIndex": "C7FD06649235AF4CABD8FA6D8BB0CAF6C6EA5038A74D0DDD5025290683636D02",
+ "PreviousFields": {
+ "LPTokenBalance": {
+ "currency": "03930D02208264E2E40EC1B0C09E4DB96EE197B1",
+ "issuer": "rMEdVzU8mtEArzjrN9avm3kA675GX7ez8W",
+ "value": "10027169"
+ }
+ }
+ }
+ }
+ ],
+ "TransactionIndex": 0,
+ "TransactionResult": "tesSUCCESS"
+ },
+ "tx": {
+ "Account": "rUwaiErsYE5kibUUtaPczXZVVd73VNy4R9",
+ "Amount": "1000000000",
+ "Amount2": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F",
+ "value": "5000"
+ },
+ "Asset": {
+ "currency": "XRP"
+ },
+ "Asset2": {
+ "mpt_issuance_id": "000003C31D321B7DDA58324DC38CDF18934FAFFFCDF69D5F"
+ },
+ "Fee": "10",
+ "Flags": 1048576,
+ "Sequence": 7,
+ "SigningPubKey": "023CFED4018084296285DD8A321C099134B9CF6DCD8D91DC067BABCFF0E3F2BE1A",
+ "TransactionType": "AMMWithdraw",
+ "TxnSignature": "3045022100D1363F0A6D7252690820657B6ACCB35245E65D8DCDB48199578C213ED9D3E24B0220697D4DC057ECCD942BC59B0242411839C125696CD9DE9A3EFE45367EE0D1D29D",
+ "date": "2022-11-26T00:55:02Z"
+ }
+}
diff --git a/src/containers/shared/components/Transaction/Clawback/test/ClawbackSimple.test.tsx b/src/containers/shared/components/Transaction/Clawback/test/ClawbackSimple.test.tsx
index 95a7d056b..065fdac0e 100644
--- a/src/containers/shared/components/Transaction/Clawback/test/ClawbackSimple.test.tsx
+++ b/src/containers/shared/components/Transaction/Clawback/test/ClawbackSimple.test.tsx
@@ -1,19 +1,23 @@
-import { useQuery } from 'react-query'
import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'
import { Simple } from '../Simple'
import transaction from './mock_data/Clawback.json'
import transactionFailure from './mock_data/Clawback_Failure.json'
import transactionMPT from './mock_data/ClawbackMPT.json'
import transactionMPTFailure from './mock_data/ClawbackMPT_Failure.json'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
-jest.mock('react-query', () => ({
- ...jest.requireActual('react-query'),
- useQuery: jest.fn(),
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
}))
const renderComponent = createSimpleRenderFactory(Simple)
describe('Clawback', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('handles Clawback simple view ', () => {
const { container, unmount } = renderComponent(transaction)
expectSimpleRowText(
@@ -34,10 +38,9 @@ describe('Clawback', () => {
assetScale: 3,
}
- // @ts-ignore
- useQuery.mockImplementation(() => ({
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
data,
- }))
+ })
const { container, unmount } = renderComponent(transactionMPT)
expectSimpleRowText(
container,
@@ -73,10 +76,9 @@ describe('Clawback', () => {
assetScale: 3,
}
- // @ts-ignore
- useQuery.mockImplementation(() => ({
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
data,
- }))
+ })
const { container, unmount } = renderComponent(transactionMPTFailure)
expectSimpleRowText(
diff --git a/src/containers/shared/components/Transaction/DefaultSimple.tsx b/src/containers/shared/components/Transaction/DefaultSimple.tsx
index 481616688..a1d3d21ea 100644
--- a/src/containers/shared/components/Transaction/DefaultSimple.tsx
+++ b/src/containers/shared/components/Transaction/DefaultSimple.tsx
@@ -27,18 +27,35 @@ const DEFAULT_TX_ELEMENTS = [
'warnings',
]
+// Currency objects have at most 2 keys: `currency` and optionally `issuer`
+const MAX_CURRENCY_OBJECT_KEYS = 2
+// Amount objects have exactly 3 keys: `currency`, `issuer`, and `value`
+const AMOUNT_OBJECT_KEY_COUNT = 3
+
const displayKey = (key: string) => key.replace(/([a-z])([A-Z])/g, '$1 $2')
-const isCurrency = (value: any) =>
+export const isMPTAsset = (value: any) =>
+ typeof value === 'object' &&
+ typeof value.mpt_issuance_id === 'string' &&
+ !value.value
+
+export const isMPTAmount = (value: any) =>
typeof value === 'object' &&
- Object.keys(value).length <= 2 &&
- (value.issuer == null || typeof value.issuer === 'string') &&
- typeof value.currency === 'string'
+ typeof value.mpt_issuance_id === 'string' &&
+ typeof value.value === 'string'
+
+const isCurrency = (value: any) =>
+ isMPTAsset(value) ||
+ (typeof value === 'object' &&
+ Object.keys(value).length <= MAX_CURRENCY_OBJECT_KEYS &&
+ (value.issuer == null || typeof value.issuer === 'string') &&
+ typeof value.currency === 'string')
const isAmount = (amount: any, key: any = null) =>
key === 'Amount' ||
+ isMPTAmount(amount) ||
(typeof amount === 'object' &&
- Object.keys(amount).length === 3 &&
+ Object.keys(amount).length === AMOUNT_OBJECT_KEY_COUNT &&
typeof amount.issuer === 'string' &&
typeof amount.currency === 'string' &&
typeof amount.value === 'string')
@@ -111,7 +128,11 @@ const getRowNested = (key: any, value: any, uniqueKey: string = '') => {
label={displayKey(key)}
data-testid={key}
>
-
+
)
}
diff --git a/src/containers/shared/components/Transaction/EscrowCancel/test/EscrowCancelDescription.test.tsx b/src/containers/shared/components/Transaction/EscrowCancel/test/EscrowCancelDescription.test.tsx
index a6a5714bb..dedbb6438 100644
--- a/src/containers/shared/components/Transaction/EscrowCancel/test/EscrowCancelDescription.test.tsx
+++ b/src/containers/shared/components/Transaction/EscrowCancel/test/EscrowCancelDescription.test.tsx
@@ -1,21 +1,25 @@
-import { useQuery } from 'react-query'
import mockEscrowCancel from './mock_data/EscrowCancel.json'
import { Description } from '../Description'
import { createDescriptionRenderFactory } from '../../test'
import i18n from '../../../../../../i18n/testConfigEnglish'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
-const renderComponent = createDescriptionRenderFactory(Description, i18n)
-
-jest.mock('react-query', () => ({
- ...jest.requireActual('react-query'),
- useQuery: jest.fn(),
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
}))
+const renderComponent = createDescriptionRenderFactory(Description, i18n)
+
function getTestByName(name: string) {
return mockEscrowCancel[name]
}
describe('EscrowCancelDescription', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders description for EscrowCancel', () => {
const { container, unmount } = renderComponent(
getTestByName('EscrowCancel having XRP escrowed'),
@@ -56,10 +60,9 @@ describe('EscrowCancelDescription', () => {
assetScale: 4,
}
- // @ts-ignore
- useQuery.mockImplementation(() => ({
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
data,
- }))
+ })
const { container, unmount } = renderComponent(
getTestByName('EscrowCancel having MPT escrowed'),
diff --git a/src/containers/shared/components/Transaction/EscrowCancel/test/EscrowCancelSimple.test.tsx b/src/containers/shared/components/Transaction/EscrowCancel/test/EscrowCancelSimple.test.tsx
index 41402b2c1..8a0716a65 100644
--- a/src/containers/shared/components/Transaction/EscrowCancel/test/EscrowCancelSimple.test.tsx
+++ b/src/containers/shared/components/Transaction/EscrowCancel/test/EscrowCancelSimple.test.tsx
@@ -1,20 +1,24 @@
-import { useQuery } from 'react-query'
import { createSimpleRenderFactory } from '../../test/createWrapperFactory'
import { Simple } from '../Simple'
import mockEscrowCancel from './mock_data/EscrowCancel.json'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
-const renderComponent = createSimpleRenderFactory(Simple)
-
-jest.mock('react-query', () => ({
- ...jest.requireActual('react-query'),
- useQuery: jest.fn(),
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
}))
+const renderComponent = createSimpleRenderFactory(Simple)
+
function getTestByName(name: string) {
return mockEscrowCancel[name]
}
describe('EscrowCancelSimple', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders with an expiration and offer', () => {
const { container, unmount } = renderComponent(
getTestByName('EscrowCancel having XRP escrowed'),
@@ -59,10 +63,9 @@ describe('EscrowCancelSimple', () => {
assetScale: 4,
}
- // @ts-ignore
- useQuery.mockImplementation(() => ({
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
data,
- }))
+ })
const { container, unmount } = renderComponent(
getTestByName('EscrowCancel having MPT escrowed'),
diff --git a/src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateDescription.test.tsx b/src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateDescription.test.tsx
index d61a7e63e..b7d178c1a 100644
--- a/src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateDescription.test.tsx
+++ b/src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateDescription.test.tsx
@@ -1,12 +1,12 @@
-import { useQuery } from 'react-query'
import i18n from '../../../../../../i18n/testConfigEnglish'
import mockEscrowCreateTests from './mock_data/EscrowCreate.json'
import { Description } from '../Description'
import { createDescriptionRenderFactory } from '../../test'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
-jest.mock('react-query', () => ({
- ...jest.requireActual('react-query'),
- useQuery: jest.fn(),
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
}))
const renderComponent = createDescriptionRenderFactory(Description, i18n)
@@ -16,6 +16,10 @@ function getTestByName(name: string) {
}
describe('EscrowCreateDescription', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders description for EscrowCreate', () => {
const { container, unmount } = renderComponent(
getTestByName('renders EscrowCreate'),
@@ -55,10 +59,9 @@ describe('EscrowCreateDescription', () => {
assetScale: 4,
}
- // @ts-ignore
- useQuery.mockImplementation(() => ({
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
data,
- }))
+ })
const { container, unmount } = renderComponent(
getTestByName('test MPT amount'),
diff --git a/src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateSimple.test.tsx b/src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateSimple.test.tsx
index 30c9a8d39..901512c14 100644
--- a/src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateSimple.test.tsx
+++ b/src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateSimple.test.tsx
@@ -1,12 +1,12 @@
-import { useQuery } from 'react-query'
import { Simple } from '../Simple'
import mockEscrowCreateTests from './mock_data/EscrowCreate.json'
import mockEscrowCreateFinishFunction from './mock_data/EscrowCreateFinishFunction.json'
import { createSimpleRenderFactory } from '../../test/createWrapperFactory'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
-jest.mock('react-query', () => ({
- ...jest.requireActual('react-query'),
- useQuery: jest.fn(),
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
}))
const renderComponent = createSimpleRenderFactory(Simple)
@@ -16,6 +16,10 @@ function getTestByName(name: string) {
}
describe('EscrowCreateSimple', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders with an expiration and offer', () => {
const { container, unmount } = renderComponent(
getTestByName('renders EscrowCreate'),
@@ -87,10 +91,9 @@ describe('EscrowCreateSimple', () => {
assetScale: 4,
}
- // @ts-ignore
- useQuery.mockImplementation(() => ({
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
data,
- }))
+ })
const { container, unmount } = renderComponent(
getTestByName('test MPT amount'),
diff --git a/src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateTableDetail.test.tsx b/src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateTableDetail.test.tsx
index ccb318cc0..70a4a587d 100644
--- a/src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateTableDetail.test.tsx
+++ b/src/containers/shared/components/Transaction/EscrowCreate/test/EscrowCreateTableDetail.test.tsx
@@ -1,21 +1,25 @@
-import { useQuery } from 'react-query'
import { createTableDetailRenderFactory } from '../../test'
import { TableDetail } from '../TableDetail'
import i18n from '../../../../../../i18n/testConfigEnglish'
import mockEscrowCreate from './mock_data/EscrowCreate.json'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
-const renderComponent = createTableDetailRenderFactory(TableDetail, i18n)
-
-jest.mock('react-query', () => ({
- ...jest.requireActual('react-query'),
- useQuery: jest.fn(),
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
}))
+const renderComponent = createTableDetailRenderFactory(TableDetail, i18n)
+
function getTestByName(name: string) {
return mockEscrowCreate[name]
}
describe('EscrowCreateTableDetail', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders EscrowCreate without crashing', () => {
const { container, unmount } = renderComponent(
getTestByName('renders EscrowCreate'),
@@ -68,10 +72,9 @@ describe('EscrowCreateTableDetail', () => {
assetScale: 4,
}
- // @ts-ignore
- useQuery.mockImplementation(() => ({
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
data,
- }))
+ })
const { container, unmount } = renderComponent(
getTestByName('test MPT amount'),
diff --git a/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishDescription.test.tsx b/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishDescription.test.tsx
index 3be5151d0..1d6b277dc 100644
--- a/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishDescription.test.tsx
+++ b/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishDescription.test.tsx
@@ -1,21 +1,25 @@
-import { useQuery } from 'react-query'
import mockEscrowFinish from './mock_data/EscrowFinish.json'
import { Description } from '../Description'
import i18n from '../../../../../../i18n/testConfigEnglish'
import { createDescriptionRenderFactory } from '../../test'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
-const renderComponent = createDescriptionRenderFactory(Description, i18n)
-
-jest.mock('react-query', () => ({
- ...jest.requireActual('react-query'),
- useQuery: jest.fn(),
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
}))
+const renderComponent = createDescriptionRenderFactory(Description, i18n)
+
function getTestByName(name: string) {
return mockEscrowFinish[name]
}
describe('EscrowFinishDescription', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders description for EscrowFinish', () => {
const { container, unmount } = renderComponent(
getTestByName('EscrowFinish having XRP escrowed'),
@@ -56,10 +60,9 @@ describe('EscrowFinishDescription', () => {
assetScale: 4,
}
- // @ts-ignore
- useQuery.mockImplementation(() => ({
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
data,
- }))
+ })
const { container, unmount } = renderComponent(
getTestByName('EscrowFinish having MPT escrowed'),
diff --git a/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx b/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx
index 797319ec9..bb15a1ac1 100644
--- a/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx
+++ b/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishSimple.test.tsx
@@ -1,22 +1,26 @@
-import { useQuery } from 'react-query'
import { createSimpleRenderFactory } from '../../test/createWrapperFactory'
import { Simple } from '../Simple'
import mockEscrowFinish from './mock_data/EscrowFinish.json'
import mockEscrowFinishCompAllow from './mock_data/EscrowFinishComputationAllowance.json'
import mockEscrowFinishCredentialIDs from './mock_data/EscrowFinishWithCredentialIDs.json'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
-const renderComponent = createSimpleRenderFactory(Simple)
-
-jest.mock('react-query', () => ({
- ...jest.requireActual('react-query'),
- useQuery: jest.fn(),
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
}))
+const renderComponent = createSimpleRenderFactory(Simple)
+
function getTestByName(name: string) {
return mockEscrowFinish[name]
}
describe('EscrowFinishSimple', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders with an expiration and offer', () => {
const { container, unmount } = renderComponent(
getTestByName('EscrowFinish having XRP escrowed'),
@@ -74,10 +78,9 @@ describe('EscrowFinishSimple', () => {
assetScale: 4,
}
- // @ts-ignore
- useQuery.mockImplementation(() => ({
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
data,
- }))
+ })
const { container, unmount } = renderComponent(
getTestByName('EscrowFinish having MPT escrowed'),
diff --git a/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishTableDetail.test.tsx b/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishTableDetail.test.tsx
index f43c97b96..71045a98c 100644
--- a/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishTableDetail.test.tsx
+++ b/src/containers/shared/components/Transaction/EscrowFinish/test/EscrowFinishTableDetail.test.tsx
@@ -1,21 +1,25 @@
-import { useQuery } from 'react-query'
import { createTableDetailRenderFactory } from '../../test'
import { TableDetail } from '../TableDetail'
import mockEscrowFinish from './mock_data/EscrowFinish.json'
import i18n from '../../../../../../i18n/testConfigEnglish'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
-const renderComponent = createTableDetailRenderFactory(TableDetail, i18n)
-
-jest.mock('react-query', () => ({
- ...jest.requireActual('react-query'),
- useQuery: jest.fn(),
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
}))
+const renderComponent = createTableDetailRenderFactory(TableDetail, i18n)
+
function getTestByName(name: string) {
return mockEscrowFinish[name]
}
describe('EscrowFinishTableDetail', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders EscrowFinish without crashing', () => {
const { container, unmount } = renderComponent(
getTestByName('EscrowFinish having XRP escrowed'),
@@ -59,10 +63,9 @@ describe('EscrowFinishTableDetail', () => {
assetScale: 4,
}
- // @ts-ignore
- useQuery.mockImplementation(() => ({
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
data,
- }))
+ })
const { container, unmount } = renderComponent(
getTestByName('EscrowFinish having MPT escrowed'),
diff --git a/src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/LoanBrokerCoverClawbackSimple.test.tsx b/src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/LoanBrokerCoverClawbackSimple.test.tsx
index d245bd31d..3781fe749 100644
--- a/src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/LoanBrokerCoverClawbackSimple.test.tsx
+++ b/src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/LoanBrokerCoverClawbackSimple.test.tsx
@@ -1,19 +1,23 @@
-import { useQuery } from 'react-query'
import { createSimpleRenderFactory, expectSimpleRowText } from '../../test'
import { Simple } from '../Simple'
import LoanBrokerCoverClawback from './mock_data/LoanBrokerCoverClawback.json'
import LoanBrokerCoverClawbackZeroAmount from './mock_data/LoanBrokerCoverClawbackZeroAmount.json'
import LoanBrokerCoverClawbackNoAmount from './mock_data/LoanBrokerCoverClawbackNoAmount.json'
import LoanBrokerCoverClawbackMPT from './mock_data/LoanBrokerCoverClawbackMPT.json'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
-jest.mock('react-query', () => ({
- ...jest.requireActual('react-query'),
- useQuery: jest.fn(),
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
}))
const renderComponent = createSimpleRenderFactory(Simple)
describe('LoanBrokerCoverClawback: Simple', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders with explicit amount', () => {
const { container, unmount } = renderComponent(LoanBrokerCoverClawback)
expectSimpleRowText(
@@ -64,11 +68,11 @@ describe('LoanBrokerCoverClawback: Simple', () => {
})
it('renders with calculated MPT amount when Amount is undefined', () => {
- ;(useQuery as jest.Mock).mockImplementation(() => ({
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
data: {
assetScale: 2,
},
- }))
+ })
const { container, unmount } = renderComponent(LoanBrokerCoverClawbackMPT)
expectSimpleRowText(
diff --git a/src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/LoanBrokerCoverClawbackTableDetail.test.tsx b/src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/LoanBrokerCoverClawbackTableDetail.test.tsx
index a404a71de..c4f2186f7 100644
--- a/src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/LoanBrokerCoverClawbackTableDetail.test.tsx
+++ b/src/containers/shared/components/Transaction/LoanBrokerCoverClawback/test/LoanBrokerCoverClawbackTableDetail.test.tsx
@@ -1,4 +1,3 @@
-import { useQuery } from 'react-query'
import i18n from '../../../../../../i18n/testConfigEnglish'
import { createTableDetailRenderFactory } from '../../test'
import { TableDetail } from '../TableDetail'
@@ -6,15 +5,20 @@ import LoanBrokerCoverClawback from './mock_data/LoanBrokerCoverClawback.json'
import LoanBrokerCoverClawbackZeroAmount from './mock_data/LoanBrokerCoverClawbackZeroAmount.json'
import LoanBrokerCoverClawbackNoAmount from './mock_data/LoanBrokerCoverClawbackNoAmount.json'
import LoanBrokerCoverClawbackMPT from './mock_data/LoanBrokerCoverClawbackMPT.json'
+import { useMPTIssuance } from '../../../../hooks/useMPTIssuance'
-jest.mock('react-query', () => ({
- ...jest.requireActual('react-query'),
- useQuery: jest.fn(),
+jest.mock('../../../../hooks/useMPTIssuance', () => ({
+ ...jest.requireActual('../../../../hooks/useMPTIssuance'),
+ useMPTIssuance: jest.fn(),
}))
const renderComponent = createTableDetailRenderFactory(TableDetail, i18n)
describe('LoanBrokerCoverClawbackTableDetail', () => {
+ beforeEach(() => {
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({ data: undefined })
+ })
+
it('renders with explicit amount', () => {
const { container, unmount } = renderComponent(LoanBrokerCoverClawback)
@@ -56,12 +60,11 @@ describe('LoanBrokerCoverClawbackTableDetail', () => {
})
it('renders with calculated MPT amount when Amount is undefined', () => {
- // Mock MPT issuance data for scaling
- ;(useQuery as jest.Mock).mockImplementation(() => ({
+ ;(useMPTIssuance as jest.Mock).mockReturnValue({
data: {
assetScale: 2,
},
- }))
+ })
const { container, unmount } = renderComponent(LoanBrokerCoverClawbackMPT)
diff --git a/src/containers/shared/components/Transaction/OfferCreate/Description.tsx b/src/containers/shared/components/Transaction/OfferCreate/Description.tsx
index eb3b463ee..1aace8c6e 100644
--- a/src/containers/shared/components/Transaction/OfferCreate/Description.tsx
+++ b/src/containers/shared/components/Transaction/OfferCreate/Description.tsx
@@ -13,9 +13,16 @@ import {
import { convertRippleDate } from '../../../../../rippled/lib/utils'
import Currency from '../../Currency'
import { Amount } from '../../Amount'
-import { formatAmount } from '../../../../../rippled/lib/txSummary/formatAmount'
+import {
+ formatAmount,
+ formatAsset,
+ isMPTAmount,
+} from '../../../../../rippled/lib/txSummary/formatAmount'
-const normalize = (amount: any) => amount.value || amount / XRP_BASE
+const normalize = (amount: any) => {
+ if (isMPTAmount(amount)) return Number(amount.value)
+ return amount.value ? Number(amount.value) : amount / XRP_BASE
+}
const Description: TransactionDescriptionComponent = (
props: TransactionDescriptionProps,
@@ -23,8 +30,10 @@ const Description: TransactionDescriptionComponent = (
const { t, i18n } = useTranslation()
const language = i18n.resolvedLanguage
const { data } = props
- const paysCurrency = data.tx.TakerPays.currency || 'XRP'
- const getsCurrency = data.tx.TakerGets.currency || 'XRP'
+ const paysAsset = formatAsset(data.tx.TakerPays)
+ const getsAsset = formatAsset(data.tx.TakerGets)
+ const paysCurrency = paysAsset.currency
+ const getsCurrency = getsAsset.currency
const paysValue = normalize(data.tx.TakerPays)
const getsValue = normalize(data.tx.TakerGets)
const invert =
@@ -38,14 +47,16 @@ const Description: TransactionDescriptionComponent = (
pair = (
/
@@ -54,14 +65,16 @@ const Description: TransactionDescriptionComponent = (
pair = (
/
diff --git a/src/containers/shared/components/Transaction/OfferCreate/Simple.tsx b/src/containers/shared/components/Transaction/OfferCreate/Simple.tsx
index ad079a9d2..26ef3096a 100644
--- a/src/containers/shared/components/Transaction/OfferCreate/Simple.tsx
+++ b/src/containers/shared/components/Transaction/OfferCreate/Simple.tsx
@@ -19,12 +19,14 @@ const Simple: TransactionSimpleComponent = (props: TransactionSimpleProps) => {
/
diff --git a/src/containers/shared/components/Transaction/OfferCreate/TableDetail.tsx b/src/containers/shared/components/Transaction/OfferCreate/TableDetail.tsx
index f084829c3..f905a75af 100644
--- a/src/containers/shared/components/Transaction/OfferCreate/TableDetail.tsx
+++ b/src/containers/shared/components/Transaction/OfferCreate/TableDetail.tsx
@@ -18,12 +18,14 @@ export const TableDetail = (props: any) => {