import { describe, expect, it } from 'vitest'; import { ConnectorMetaSchema } from '@rareindex/connectors'; import metaJson from './meta.json' with { type: 'json' }; import { loadFixture, runFixtureSuite } from '@rareindex/connectors/testing'; import createConnector, { parseMaPrice } from './index.js'; const connector = createConnector(ConnectorMetaSchema.parse(metaJson)); describe('ma-shops', () => { runFixtureSuite(connector, it, expect); it('emits dealer asks with the displayed currency and parsed grades', async () => { const fx = loadFixture('ma-shops', 'denarius-search-p1'); const out = await connector.normalize(fx.raw); expect(out.length).toBeGreaterThanOrEqual(8); for (const l of out) { if (l.kind !== 'listing') throw new Error('expected listing'); expect(l.attributes.categorySlug).toBe('coins'); expect(l.attributes.identifiers.ma_shops_item).toMatch(/^[a-z0-9_-]+\/\d+$/i); expect(['CAD', 'USD', 'EUR', 'GBP', 'CHF']).toContain(l.currency); expect(l.price).toBeGreaterThan(0); expect(l.seller).toBeTruthy(); expect(l.sourceUrl).toMatch(/ma-shops\.com\/[a-z0-9_-]+\/item\.php\?id=\d+/i); } expect(out.some((l) => l.kind === 'listing' && l.grade.grader === 'pcgs')).toBe(true); }); it('parses displayed prices', () => { expect(parseMaPrice('642.98 CAN$')).toEqual({ price: 642.98, currency: 'CAD' }); expect(parseMaPrice('1,250.00 US$')).toEqual({ price: 1250, currency: 'USD' }); expect(parseMaPrice('89.00 EUR')).toEqual({ price: 89, currency: 'EUR' }); expect(parseMaPrice(null)).toEqual({ price: null, currency: null }); }); });