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.2 KB · 42 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, { extractJson, setAndVariant } from './index.js';6import { parseCompactGrade } from '../_lib/tcg-shared.js';78const connector = createConnector(localMeta(meta));910describe('pokemonprice', () => {11  runFixtureSuite(connector, it, expect);1213  it('aligns set names and variants with the pokemontcg vocabulary', () => {14    expect(setAndVariant('Base Set 1st Edition', 'Holo 1st edition')).toEqual({ set: 'Base Set', variant: '1st Edition Holo' });15    expect(setAndVariant('Base Set Unlimited', 'Holo')).toEqual({ set: 'Base Set', variant: 'Holo' });16    expect(setAndVariant('Base Set Shadowless', null)).toEqual({ set: 'Base Set', variant: 'Shadowless' });17    expect(setAndVariant('Evolving Skies', null)).toEqual({ set: 'Evolving Skies', variant: null });18    expect(parseCompactGrade('PSA9')).toEqual({ grader: 'psa', grade: '9' });19    expect(parseCompactGrade('Raw')).toEqual({ grader: 'raw', grade: null });20    expect(extractJson('x "rows":[{"a":[1,2]},{"b":"]"}] y', 'rows')).toEqual([{ a: [1, 2] }, { b: ']' }]);21  });2223  it('emits per-grade guide values with grader/grade and transaction counts', async () => {24    const [name] = listFixtures('pokemonprice');25    const out = await connector.normalize(loadFixture('pokemonprice', name!).raw);26    const cat = out.find((r) => r.kind === 'catalog_item');27    if (!cat || cat.kind !== 'catalog_item') throw new Error('expected catalog item');28    expect(cat.attributes.categorySlug).toBe('pokemon');29    expect(cat.attributes.set).toBeTruthy();30    expect(cat.attributes.number).toMatch(/^\d+/);31    const obs = out.filter((r) => r.kind === 'price_observation');32    expect(obs.length).toBeGreaterThan(3);33    const graded = obs.filter((o) => o.kind === 'price_observation' && o.grade.grader && o.grade.grader !== 'raw');34    expect(graded.length).toBeGreaterThan(0);35    for (const o of obs) {36      if (o.kind !== 'price_observation') continue;37      expect(o.currency).toBe('USD');38      expect(o.confidence).toBeLessThanOrEqual(0.8);39    }40  });41});42