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 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