import { describe, expect, it } from 'vitest'; import { getConnectorMeta } from '@rareindex/connectors'; import { loadFixture, runFixtureSuite } from '@rareindex/connectors/testing'; import createConnector, { splitMasterTitle, variantFromFormat, yearFromReleased } from './index.js'; const connector = createConnector(getConnectorMeta('discogs')); describe('discogs', () => { runFixtureSuite(connector, it, expect); it('maps versions to music catalog items with deterministic identifiers', async () => { const fx = loadFixture('discogs', 'nevermind-versions'); const out = await connector.normalize(fx.raw); expect(out.length).toBeGreaterThan(5); for (const r of out) { if (r.kind !== 'catalog_item') throw new Error('expected catalog_item'); expect(r.attributes.categorySlug).toBe('music'); expect(r.attributes.identifiers.discogs_release_id).toMatch(/^\d+$/); expect(r.attributes.identifiers.discogs_master_id).toBe('13814'); expect(r.attributes.name).toBe('Nirvana – Nevermind'); expect(r.sourceUrl).toMatch(/discogs\.com\/release\/\d+$/); } }); it('maps marketplace stats to a low observation with sample size', async () => { const fx = loadFixture('discogs', 'nevermind-release-stats'); const out = await connector.normalize(fx.raw); const obs = out.find((r) => r.kind === 'price_observation'); if (obs?.kind !== 'price_observation') throw new Error('expected observation'); expect(obs.priceKind).toBe('low'); expect(obs.price).toBeGreaterThan(0); expect(obs.currency).toBe('USD'); expect(obs.sampleSize).toBeGreaterThan(0); expect(obs.confidence).toBeLessThanOrEqual(0.7); }); it('helpers', () => { expect(splitMasterTitle('Nirvana - Nevermind')).toEqual({ artist: 'Nirvana', title: 'Nevermind' }); expect(splitMasterTitle('Homogenic')).toEqual({ artist: null, title: 'Homogenic' }); expect(variantFromFormat('Album, Reissue, 180 Gram')).toBe('Reissue, 180 Gram'); expect(variantFromFormat('Album, LP')).toBeNull(); expect(yearFromReleased('1991-09-24')).toBe(1991); expect(yearFromReleased(null)).toBeNull(); }); });