TypeScript 61.9%
HTML 37.2%
SQL 0.7%
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