UNPKG

solana-token-list

Version:

Homebrew Solana Token Registry with Coingecko data

77 lines (63 loc) 2.3 kB
import fs from 'fs'; import test from 'ava'; import { CLUSTER_SLUGS, ENV, Strategy, TokenListProvider, TokenInfo } from '.'; test('Token list is filterable by a tag', async (t) => { const list = (await new TokenListProvider().resolve(Strategy.Static)) .filterByChainId(ENV.MainnetBeta) .filterByTag('nft') .getList(); t.false(list.some((item) => item.symbol === 'SOL')); }); test('Token list can exclude by a tag', async (t) => { const list = (await new TokenListProvider().resolve(Strategy.Static)) .filterByChainId(ENV.MainnetBeta) .excludeByTag('nft') .getList(); // @ts-ignore t.false(list.some((item) => item.tags === ['nft'])); }); test('Token list can exclude by a chain', async (t) => { const list = (await new TokenListProvider().resolve(Strategy.Static)) .excludeByChainId(ENV.MainnetBeta) .getList(); t.false(list.some((item) => item.chainId === ENV.MainnetBeta)); }); test('Token list returns new object upon filter', async (t) => { const list = await new TokenListProvider().resolve(Strategy.Static); const filtered = list.filterByChainId(ENV.MainnetBeta); t.true(list !== filtered); t.true(list.getList().length !== filtered.getList().length); }); test('Token list throws error when calling filterByClusterSlug with slug that does not exist', async (t) => { const list = await new TokenListProvider().resolve(Strategy.Static); const error = await t.throwsAsync( async () => list.filterByClusterSlug('whoop'), { instanceOf: Error } ); t.is( error?.message, `Unknown slug: whoop, please use one of ${Object.keys(CLUSTER_SLUGS)}` ); }); test('Token list is a valid json', async (t) => { t.notThrows(() => { const content = fs .readFileSync('./src/tokens/solana.tokenlist.json') .toString(); JSON.parse(content.toString()); }); }); test('Token list does not have duplicate entries', async (t) => { const list = await new TokenListProvider().resolve(Strategy.Static); list .filterByChainId(ENV.MainnetBeta) .getList() .reduce((agg, item) => { if (agg.has(item.address)) { console.log(item.address); } t.false(agg.has(item.address)); agg.set(item.address, item); return agg; }, new Map<string, TokenInfo>()); });