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.7 KB · 48 lines typescript
Raw Blame History
1import { describe, expect, it } from 'vitest';2import { readFileSync } from 'node:fs';3import path from 'node:path';4import { fileURLToPath } from 'node:url';5import { missingRequirements } from '@rareindex/connectors';6import { loadFixture, runFixtureSuite } from '@rareindex/connectors/testing';7import { localMeta } from '../_lib/local-meta.js';8import createConnector, { numistaCategory, TypeSchema } from './index.js';910const dir = path.dirname(fileURLToPath(import.meta.url));11const meta = localMeta(JSON.parse(readFileSync(path.join(dir, 'meta.json'), 'utf8')));12const connector = createConnector(meta);1314describe('numista', () => {15  runFixtureSuite(connector, it, expect);1617  it('is gated on NUMISTA_API_KEY', () => {18    expect(meta.requires).toEqual(['NUMISTA_API_KEY']);19    expect(missingRequirements(meta, {})).toEqual(['NUMISTA_API_KEY']);20    expect(missingRequirements(meta, { NUMISTA_API_KEY: 'k' })).toEqual([]);21  });2223  it('normalises documented types into catalog items with N# identifiers and per-grade guide values', async () => {24    const fx = loadFixture('numista', 'types-canada-doc-example');25    const out = await connector.normalize(fx.raw);26    const items = out.filter((r) => r.kind === 'catalog_item');27    const obs = out.filter((r) => r.kind === 'price_observation');28    expect(items.length).toBe(2);29    expect(obs.length).toBe(3); // f, vf and the documented "gradde: xf" typo30    const victoria = items[0]!;31    if (victoria.kind !== 'catalog_item') throw new Error('item');32    expect(victoria.attributes).toMatchObject({ categorySlug: 'coins', name: '5 Cents - Victoria', year: 1858, material: 'silver' });33    expect(victoria.attributes.identifiers).toMatchObject({ numista_id: '420', km_number: '2' });34    expect(victoria.attributes.metadata).toMatchObject({ issuer: 'Canada', issuer_code: 'canada', max_year: 1901, denomination: '5 Cents', attribution: 'Source: Numista (N#420)' });35    expect(victoria.sourceUrl).toBe('https://en.numista.com/420');36    const xf = obs.find((r) => r.kind === 'price_observation' && r.grade.grade === 'XF');37    if (!xf || xf.kind !== 'price_observation') throw new Error('xf');38    expect(xf).toMatchObject({ priceKind: 'guide_value', price: 380, currency: 'EUR', condition: { condition: 'extremely_fine', conditionRaw: 'xf' } });39    expect(xf.observationDate.toISOString()).toBe('2026-09-08T09:00:00.000Z');40  });4142  it('maps Numista categories', () => {43    expect(numistaCategory(TypeSchema.parse({ id: 1, title: 'x', category: 'coin' }))).toBe('coins');44    expect(numistaCategory(TypeSchema.parse({ id: 2, title: 'x', category: 'banknote' }))).toBe('banknotes');45    expect(numistaCategory(TypeSchema.parse({ id: 3, title: 'x', category: 'exonumia' }))).toBe('medals');46  });47});48