@reown/appkit-ui
Version:
The full stack toolkit to build onchain app UX.
107 lines • 4.05 kB
JavaScript
import { describe, expect, it } from 'vitest';
import { TransactionUtil } from '../src/utils/TransactionUtil.js';
const nftTransfer = {
nft_info: {
name: 'Cool NFT',
content: { preview: { url: 'nft-url' } },
flags: { is_spam: false }
},
direction: 'in',
quantity: { numeric: '1' }
};
const fungibleTransfer = {
fungible_info: {
symbol: 'TOK',
icon: { url: 'token-url' }
},
direction: 'in',
quantity: { numeric: '123.4567' }
};
const secondFungibleTransfer = {
fungible_info: {
symbol: 'TOK2',
icon: { url: 'token2-url' }
},
direction: 'in',
quantity: { numeric: '10' }
};
describe('TransactionUtil.getTransactionImages', () => {
it('returns NFT image for NFT transfer', () => {
const images = TransactionUtil.getTransactionImages([nftTransfer]);
expect(images[0]?.type).toBe('NFT');
expect(images[0]?.url).toBe('nft-url');
});
it('returns fungible image for fungible transfer', () => {
const images = TransactionUtil.getTransactionImages([fungibleTransfer]);
expect(images[0]?.type).toBe('FUNGIBLE');
expect(images[0]?.url).toBe('token-url');
});
it('returns images in reverse order for two non-NFT transfers', () => {
const images = TransactionUtil.getTransactionImages([fungibleTransfer, secondFungibleTransfer]);
expect(images[0]?.url).toBe('token2-url');
expect(images[1]?.url).toBe('token-url');
});
it('returns all images for multiple transfers', () => {
const images = TransactionUtil.getTransactionImages([nftTransfer, fungibleTransfer]);
expect(images.length).toBe(2);
});
});
describe('TransactionUtil.getTransactionDescriptions', () => {
const baseTx = {
id: 'tx1',
metadata: { operationType: 'receive', status: 'success' },
transfers: [fungibleTransfer]
};
it('returns description with + prefix for plusTypes', () => {
const desc = TransactionUtil.getTransactionDescriptions(baseTx);
expect(desc[0]?.startsWith('+')).toBe(true);
expect(desc[0]).toContain('123.457 TOK');
});
it('returns description with - prefix for minusTypes', () => {
const tx = { ...baseTx, metadata: { operationType: 'withdraw' } };
const desc = TransactionUtil.getTransactionDescriptions(tx);
expect(desc[0]?.startsWith('-')).toBe(true);
});
it('returns NFT name for NFT transfer', () => {
const tx = {
...baseTx,
transfers: [nftTransfer],
metadata: { operationType: 'receive' }
};
const desc = TransactionUtil.getTransactionDescriptions(tx);
expect(desc[0]).toContain('Cool NFT');
});
it('returns reversed descriptions for multiple transfers', () => {
const tx = {
...baseTx,
transfers: [fungibleTransfer, secondFungibleTransfer],
metadata: { operationType: 'receive' }
};
const desc = TransactionUtil.getTransactionDescriptions(tx);
expect(desc.length).toBe(2);
expect(desc[0]).toContain('10.000 TOK2');
expect(desc[1]).toContain('123.457 TOK');
});
it('returns status if no transfers and not send/receive', () => {
const tx = {
metadata: { operationType: 'burn', status: 'failed' },
transfers: []
};
const desc = TransactionUtil.getTransactionDescriptions(tx);
expect(desc[0]).toBe('failed');
});
it('returns return status for send/receive with no transfers', () => {
const tx = {
metadata: {
operationType: 'send',
sentFrom: '0x1234567890abcdef',
sentTo: '0xfedcba0987654321',
status: 'success'
},
transfers: []
};
const desc = TransactionUtil.getTransactionDescriptions(tx);
expect(desc[0]).toBe('success');
});
});
//# sourceMappingURL=TransactionUtil.test.js.map