src/markets/symbols.test.ts
v0.2.1 · 1.5 KB
import { describe, expect, it } from 'vitest';
import { orderBookDetailsPayload } from '../testing/fixtures.js';
import { parseOrderBookDetails } from './parse.js';
import { baseMarkets, baseSymbolOf, isUsdgDuplicate, marketByBaseSymbol, orphanUsdgDuplicates } from './symbols.js';
describe('USDG duplicates', () => {
it('detects and strips the suffix', () => {
expect(isUsdgDuplicate('ETH/USDG')).toBe(true);
expect(isUsdgDuplicate('ETH')).toBe(false);
expect(isUsdgDuplicate('USDG')).toBe(false);
expect(baseSymbolOf('ETH/USDG')).toBe('ETH');
expect(baseSymbolOf('ETH')).toBe('ETH');
});
it('marketByBaseSymbol never returns the duplicate', () => {
const m = parseOrderBookDetails(orderBookDetailsPayload());
expect(marketByBaseSymbol(m.values(), 'ETH')?.marketId).toBe(32);
expect(marketByBaseSymbol(m.values(), 'ETH/USDG')?.marketId).toBe(32);
expect(marketByBaseSymbol(m.values(), ' ETH ')?.marketId).toBe(32);
expect(marketByBaseSymbol(m.values(), 'DOGE')).toBeUndefined();
});
it('baseMarkets lists base markets without duplicates', () => {
const m = parseOrderBookDetails(orderBookDetailsPayload());
expect(baseMarkets(m.values()).map((x) => x.symbol)).toEqual(['ETH', 'LIT', 'CRWV']);
});
it('orphanUsdgDuplicates flags a duplicate without its base', () => {
expect(
orphanUsdgDuplicates([{ symbol: 'ETH' }, { symbol: 'ETH/USDG' }, { symbol: 'SOL/USDG' }]).map((x) => x.symbol),
).toEqual(['SOL/USDG']);
});
});