UNPKG

@yoroi/portfolio

Version:

The Portfolio package of Yoroi SDK

161 lines (149 loc) 4.13 kB
import {Portfolio} from '@yoroi/types' import {storageSerializer} from '@yoroi/common' import {tokenBalanceMocks} from '../adapters/token-balance.mocks' import {tokenInfoMocks} from '../adapters/token-info.mocks' import { alpha, sortTokenAmountsByInfo, sortTokenInfos, toEnd, toStart, } from './sorting' describe('sorting', () => { it('sorts alphabetically', () => { const sortedItems = [...items].sort( alpha((name) => name.toLocaleLowerCase()), ) // prettier-ignore expect(sortedItems).toEqual([ '', 'a', 'a', 'b', 'c' ]) }) it('moves items to the start', () => { const sortedItems = [...items].sort(toStart((name) => name === 'c')) // prettier-ignore expect(sortedItems).toEqual([ 'c', 'a', '', 'b', 'a' ]) }) it('moves items to the end', () => { const sortedItems = [...items].sort(toEnd((name) => name === 'c')) // prettier-ignore expect(sortedItems).toEqual([ 'a', '', 'b', 'a', 'c' ]) }) it('sort token infos', () => { const primaryTokenInfo = tokenInfoMocks.primaryETH const secondaryTokenInfos = [ tokenInfoMocks.ftNoTicker, tokenInfoMocks.ftNameless, tokenInfoMocks.nftCryptoKitty, tokenInfoMocks.rnftWhatever, primaryTokenInfo, {...tokenInfoMocks.ftNoTicker, status: Portfolio.Token.Status.Unknown}, {...tokenInfoMocks.ftNoTicker, status: Portfolio.Token.Status.Invalid}, {...tokenInfoMocks.ftNoTicker, status: Portfolio.Token.Status.Scam}, ] const sortedTokenInfos = sortTokenInfos({ primaryTokenInfo, secondaryTokenInfos, }) expect(sortedTokenInfos).toEqual([ primaryTokenInfo, tokenInfoMocks.nftCryptoKitty, tokenInfoMocks.rnftWhatever, tokenInfoMocks.ftNameless, tokenInfoMocks.ftNoTicker, {...tokenInfoMocks.ftNoTicker, status: Portfolio.Token.Status.Unknown}, {...tokenInfoMocks.ftNoTicker, status: Portfolio.Token.Status.Invalid}, {...tokenInfoMocks.ftNoTicker, status: Portfolio.Token.Status.Scam}, ]) }) it('sort token amounts by info', () => { const primaryTokenInfo = tokenInfoMocks.primaryETH const amounts = [ tokenBalanceMocks.ftNoTicker, tokenBalanceMocks.nftCryptoKitty, tokenBalanceMocks.ftNameless, tokenBalanceMocks.rnftWhatever, tokenBalanceMocks.primaryETH, { ...tokenBalanceMocks.ftNoTicker, info: { ...tokenBalanceMocks.ftNoTicker.info, status: Portfolio.Token.Status.Unknown, }, }, { ...tokenBalanceMocks.ftNoTicker, info: { ...tokenBalanceMocks.ftNoTicker.info, status: Portfolio.Token.Status.Invalid, }, }, { ...tokenBalanceMocks.ftNoTicker, info: { ...tokenBalanceMocks.ftNoTicker.info, status: Portfolio.Token.Status.Scam, }, }, ] const sortedTokenBalances = sortTokenAmountsByInfo({ primaryTokenInfo, amounts, }) const serialized = sortedTokenBalances.map(storageSerializer) expect(serialized).toEqual( [ tokenBalanceMocks.primaryETH, tokenBalanceMocks.nftCryptoKitty, tokenBalanceMocks.rnftWhatever, tokenBalanceMocks.ftNameless, tokenBalanceMocks.ftNoTicker, { ...tokenBalanceMocks.ftNoTicker, info: { ...tokenBalanceMocks.ftNoTicker.info, status: Portfolio.Token.Status.Unknown, }, }, { ...tokenBalanceMocks.ftNoTicker, info: { ...tokenBalanceMocks.ftNoTicker.info, status: Portfolio.Token.Status.Invalid, }, }, { ...tokenBalanceMocks.ftNoTicker, info: { ...tokenBalanceMocks.ftNoTicker.info, status: Portfolio.Token.Status.Scam, }, }, ].map(storageSerializer), ) }) }) // prettier-ignore const items = [ 'a', '', 'c', 'b', 'a' ]