From c7d0025b4f05436cc3f562000cd2e18260c1dcc3 Mon Sep 17 00:00:00 2001 From: Edd Date: Tue, 24 Oct 2023 16:48:17 +0100 Subject: [PATCH] feat(explorer): add determinsitic id to transfer tx (#5112) --- .../components/txs/details/tx-transfer.tsx | 15 +++- .../app/components/txs/tx-transfer.spec.tsx | 78 ++++++++++++++++++- 2 files changed, 88 insertions(+), 5 deletions(-) diff --git a/apps/explorer/src/app/components/txs/details/tx-transfer.tsx b/apps/explorer/src/app/components/txs/details/tx-transfer.tsx index 85790687d..feb3ecf0a 100644 --- a/apps/explorer/src/app/components/txs/details/tx-transfer.tsx +++ b/apps/explorer/src/app/components/txs/details/tx-transfer.tsx @@ -12,6 +12,7 @@ import { SPECIAL_CASE_NETWORK, SPECIAL_CASE_NETWORK_ID, } from '../../links/party-link/party-link'; +import { txSignatureToDeterministicId } from '../lib/deterministic-ids'; type Transfer = components['schemas']['commandsv1Transfer']; @@ -63,10 +64,16 @@ export const TxDetailsTransfer = ({ return ( <> - + {t('Type')} {getTypeLabelForTransfer(transfer)} + + {t('Transfer ID')} + + {txSignatureToDeterministicId(txData.signature.value)} + + {from ? ( - + {t('From')} @@ -82,7 +89,7 @@ export const TxDetailsTransfer = ({ ) : null} {transfer.to ? ( - + {t('To')} @@ -90,7 +97,7 @@ export const TxDetailsTransfer = ({ ) : null} {transfer.asset && transfer.amount ? ( - + {t('Amount')} diff --git a/apps/explorer/src/app/components/txs/tx-transfer.spec.tsx b/apps/explorer/src/app/components/txs/tx-transfer.spec.tsx index 7dfc972c6..1d8ad8413 100644 --- a/apps/explorer/src/app/components/txs/tx-transfer.spec.tsx +++ b/apps/explorer/src/app/components/txs/tx-transfer.spec.tsx @@ -1,6 +1,15 @@ -import { getTypeLabelForTransfer } from './details/tx-transfer'; +import type { BlockExplorerTransactionResult } from '../../routes/types/block-explorer-response'; +import type { TendermintBlocksResponse } from '../../routes/blocks/tendermint-blocks-response'; import type { components } from '../../../types/explorer'; +import { + TxDetailsTransfer, + getTypeLabelForTransfer, +} from './details/tx-transfer'; +import { MockedProvider } from '@apollo/client/testing'; +import { MemoryRouter } from 'react-router-dom'; +import { render } from '@testing-library/react'; + type Transfer = components['schemas']['commandsv1Transfer']; describe('TX: Transfer: getLabelForTransfer', () => { @@ -56,3 +65,70 @@ describe('TX: Transfer: getLabelForTransfer', () => { expect(getTypeLabelForTransfer(mock)).toEqual('Transfer'); }); }); + +describe('TxDetailsTransfer', () => { + const mockBlockData = { + result: { + block: { + header: { + height: '123', + }, + }, + }, + }; + + const mockTxData: Partial = { + hash: 'test', + submitter: + 'e1943eea46fed576cf2be42972f3c5515ad3d0ac7ac013f56677c12a53a1b3ed', + command: { + nonce: '5188810881378065222', + blockHeight: '14951513', + transfer: { + fromAccountType: 'ACCOUNT_TYPE_GENERAL', + to: '78432a2808f20b18a46ccc6a917bdc4d63c2b9e7007f777bdcab5a9f462c5ba6', + toAccountType: 'ACCOUNT_TYPE_GENERAL', + asset: + 'dd20590509d30d20bdbbe64dc1090c1140c7690121a9b9940bc66f62dfa2e599', + amount: '4800000000', + reference: '', + oneOff: { + deliverOn: '0', + }, + }, + }, + signature: { + value: + '610c2e196a7d4fed4413b9e82af267b1ff3e30e943df3a3d28096fd60604d430d752fbaf6dd4f84d496be78885bb6118f40560bff7832c06bd7a3d67b718b700', + }, + }; + + it('renders basic transfer details', () => { + const { getByTestId } = render( + + + + + + ); + + const id = getByTestId('id'); + expect(id.children[0].textContent).toEqual('Transfer ID'); + expect(id.children[1].textContent).toEqual( + '51f3bab5eb2637651012507a64d497790a734248792c16e5cf36df8984074fbd' + ); + + const type = getByTestId('type'); + expect(type.children[1].textContent).toEqual('Transfer'); + + const from = getByTestId('from'); + expect(from.children[1].textContent).toEqual(mockTxData.submitter); + + const to = getByTestId('to'); + expect(to.children[1].textContent).toEqual(mockTxData.command.transfer.to); + }); +});