Skip to content
markpaper

src/markets/symbols.test.ts

v0.2.1 · 1.5 KB

Download file
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']);
  });
});
All files