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%
1.6 KB · 35 lines typescript
Raw Blame History
1import { describe, expect, it } from 'vitest';2import { ConnectorMetaSchema } from '@rareindex/connectors';3import metaJson from './meta.json' with { type: 'json' };4import { loadFixture, runFixtureSuite } from '@rareindex/connectors/testing';5import createConnector, { parseMaPrice } from './index.js';67const connector = createConnector(ConnectorMetaSchema.parse(metaJson));89describe('ma-shops', () => {10  runFixtureSuite(connector, it, expect);1112  it('emits dealer asks with the displayed currency and parsed grades', async () => {13    const fx = loadFixture('ma-shops', 'denarius-search-p1');14    const out = await connector.normalize(fx.raw);15    expect(out.length).toBeGreaterThanOrEqual(8);16    for (const l of out) {17      if (l.kind !== 'listing') throw new Error('expected listing');18      expect(l.attributes.categorySlug).toBe('coins');19      expect(l.attributes.identifiers.ma_shops_item).toMatch(/^[a-z0-9_-]+\/\d+$/i);20      expect(['CAD', 'USD', 'EUR', 'GBP', 'CHF']).toContain(l.currency);21      expect(l.price).toBeGreaterThan(0);22      expect(l.seller).toBeTruthy();23      expect(l.sourceUrl).toMatch(/ma-shops\.com\/[a-z0-9_-]+\/item\.php\?id=\d+/i);24    }25    expect(out.some((l) => l.kind === 'listing' && l.grade.grader === 'pcgs')).toBe(true);26  });2728  it('parses displayed prices', () => {29    expect(parseMaPrice('642.98 CAN$')).toEqual({ price: 642.98, currency: 'CAD' });30    expect(parseMaPrice('1,250.00 US$')).toEqual({ price: 1250, currency: 'USD' });31    expect(parseMaPrice('89.00 EUR')).toEqual({ price: 89, currency: 'EUR' });32    expect(parseMaPrice(null)).toEqual({ price: null, currency: null });33  });34});35