SPB Git forge

spb/rareindex

Public
54commits 1branches 0releases
7.1 MBsize
maindefault branch
10 days agolast push
TypeScript 61.9% HTML 37.2% SQL 0.7%
2.0 KB · 45 lines typescript
Raw Blame History
1import { describe, expect, it } from 'vitest';2import meta from './meta.json' with { type: 'json' };3import { localMeta } from '../_lib/local-meta.js';4import { listFixtures, loadFixture, runFixtureSuite } from '@rareindex/connectors/testing';5import createConnector from './index.js';6import { variantFromSubType, splitNumber } from '../_lib/tcg-shared.js';78const connector = createConnector(localMeta(meta));910describe('tcgcsv', () => {11  runFixtureSuite(connector, it, expect);1213  it('maps TCGplayer subtypes to the shared variant vocabulary', () => {14    expect(variantFromSubType('Normal')).toBeNull();15    expect(variantFromSubType('Holofoil')).toBe('Holo');16    expect(variantFromSubType('Reverse Holofoil')).toBe('Reverse Holo');17    expect(variantFromSubType('1st Edition Holofoil')).toBe('1st Edition Holo');18    expect(variantFromSubType('Foil')).toBe('Foil');19    expect(splitNumber('4/102')).toEqual({ number: '4', total: 102 });20  });2122  it('emits a catalog item per printing subtype and dated price observations', async () => {23    const names = listFixtures('tcgcsv');24    const pokemon = names.find((n) => n.startsWith('pokemon')) ?? names[0]!;25    const fx = loadFixture('tcgcsv', pokemon);26    const out = await connector.normalize(fx.raw);27    const cats = out.filter((r) => r.kind === 'catalog_item');28    const obs = out.filter((r) => r.kind === 'price_observation');29    expect(cats.length).toBeGreaterThanOrEqual(1);30    expect(obs.length).toBeGreaterThanOrEqual(1);31    for (const c of cats) {32      if (c.kind !== 'catalog_item') continue;33      expect(c.attributes.identifiers.tcgplayer_id).toMatch(/^\d+$/);34      expect(c.attributes.set).toBeTruthy();35    }36    for (const o of obs) {37      if (o.kind !== 'price_observation') continue;38      expect(o.currency).toBe('USD');39      expect(['market', 'low', 'mid', 'high']).toContain(o.priceKind);40      // dated by the mirror's last-updated stamp, never in the future41      expect(o.observationDate.getTime()).toBeLessThanOrEqual(Date.now());42    }43  });44});45