TypeScript 61.9%
HTML 37.2%
SQL 0.7%
1import { describe, expect, it } from 'vitest';2import { getConnectorMeta } from '@rareindex/connectors';3import { loadFixture, runFixtureSuite } from '@rareindex/connectors/testing';4import createConnector, { TCGPLAYER_VARIANTS } from './index.js';56const connector = createConnector(getConnectorMeta('pokemontcg'));78describe('pokemontcg', () => {9 runFixtureSuite(connector, it, expect);1011 it('maps Base Set Charizard to a Holo variant with TCGplayer + Cardmarket observations', async () => {12 const out = await connector.normalize(loadFixture('pokemontcg', 'base1-4').raw);13 const cats = out.filter((r) => r.kind === 'catalog_item');14 expect(cats).toHaveLength(1);15 const cat = cats[0]!;16 if (cat.kind !== 'catalog_item') throw new Error('kind');17 expect(cat.attributes).toMatchObject({ categorySlug: 'pokemon', set: 'Base', setCode: 'BS', number: '4', year: 1999, rarity: 'Rare Holo', variant: 'Holo', language: 'English' });18 expect(cat.attributes.identifiers.pokemontcg_id).toBe('base1-4');19 expect(cat.rawTitle).toBe('Charizard · Base #4/102 Holo (1999)');20 expect(cat.releaseDate?.toISOString()).toBe('1999-01-09T00:00:00.000Z');21 const obs = out.filter((r) => r.kind === 'price_observation');22 const usd = obs.filter((o) => o.kind === 'price_observation' && o.currency === 'USD');23 const eur = obs.filter((o) => o.kind === 'price_observation' && o.currency === 'EUR');24 expect(usd.map((o) => (o.kind === 'price_observation' ? o.priceKind : '')).sort()).toEqual(['high', 'low', 'market', 'mid']);25 expect(eur.length).toBeGreaterThanOrEqual(3);26 for (const o of usd) if (o.kind === 'price_observation') expect(o.observationDate.toISOString().slice(0, 10)).toMatch(/^\d{4}-\d{2}-\d{2}$/);27 // observation dates come from the source's updatedAt, not the crawl time28 const tcgMarket = usd.find((o) => o.kind === 'price_observation' && o.priceKind === 'market');29 expect(tcgMarket && tcgMarket.kind === 'price_observation' ? tcgMarket.observationDate.getTime() : 0).not.toBe(loadFixture('pokemontcg', 'base1-4').raw.fetchedAt.getTime());30 expect(obs.every((o) => o.kind === 'price_observation' && o.attributes.variant === 'Holo')).toBe(true);31 });3233 it('keeps base (normal) printings with variant null', async () => {34 const out = await connector.normalize(loadFixture('pokemontcg', 'base1-58').raw);35 const cat = out.find((r) => r.kind === 'catalog_item');36 expect(cat && cat.kind === 'catalog_item' ? cat.attributes.variant : 'x').toBeNull();37 });3839 it('handles the GitHub mirror payload (catalog only, no prices)', async () => {40 const out = await connector.normalize(loadFixture('pokemontcg', 'base1-4-mirror').raw);41 expect(out).toHaveLength(1);42 expect(out[0]?.kind).toBe('catalog_item');43 expect(out[0] && 'attributes' in out[0] ? out[0].attributes.metadata.dataSource : '').toBe('github-mirror');44 });4546 it('covers the known TCGplayer variant keys', () => {47 expect(TCGPLAYER_VARIANTS['1stEditionHolofoil']).toBe('1st Edition Holo');48 expect(TCGPLAYER_VARIANTS.reverseHolofoil).toBe('Reverse Holo');49 });50});51