@yoroi/portfolio
Version:
The Portfolio package of Yoroi SDK
99 lines (98 loc) • 3.76 kB
JavaScript
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'];
//# sourceMappingURL=sorting.test.js.map