import { describe, expect, it } from 'vitest';
import { getConnectorMeta } from '@rareindex/connectors';
import { loadFixture, runFixtureSuite } from '@rareindex/connectors/testing';
import createConnector, { parseCurrentValue, parseLaunchExit, parseRrp, setLinks } from './index.js';
const connector = createConnector(getConnectorMeta('brickset'));
describe('brickset', () => {
runFixtureSuite(connector, it, expect);
it('maps 10179 to catalog + new/used guide values with barcodes', async () => {
const fx = loadFixture('brickset', '10179-1-millennium-falcon');
const out = await connector.normalize(fx.raw);
const cat = out.find((r) => r.kind === 'catalog_item');
if (cat?.kind !== 'catalog_item') throw new Error();
expect(cat.attributes.categorySlug).toBe('lego_sets');
expect(cat.attributes.identifiers.lego_set_number).toBe('10179');
expect(cat.attributes.identifiers.upc).toBe('673419079419');
expect(cat.attributes.franchise).toBe('Star Wars');
expect(cat.attributes.originalMsrp).toBe(499.99);
expect(cat.attributes.originalMsrpCurrency).toBe('USD');
expect(cat.attributes.metadata.pieces).toBe(5197);
expect(cat.attributes.metadata.retired).toBe(true);
const sealed = out.find((r) => r.kind === 'price_observation' && r.condition.completeness === 'sealed');
const used = out.find((r) => r.kind === 'price_observation' && r.condition.completeness === 'used_complete');
if (sealed?.kind !== 'price_observation' || used?.kind !== 'price_observation') throw new Error();
expect(sealed.price).toBeGreaterThan(used.price);
expect(sealed.priceKind).toBe('guide_value');
expect(sealed.currency).toBe('USD');
});
it('helpers', () => {
expect(parseRrp('£342.49, $499.99')).toEqual({ gbp: 342.49, usd: 499.99, eur: null });
expect(parseCurrentValue('New: ~$2858 | Used: ~$1172')).toEqual({ newUsd: 2858, usedUsd: 1172 });
expect(parseCurrentValue(undefined)).toEqual({ newUsd: null, usedUsd: null });
const le = parseLaunchExit('01 Oct 07 - 31 Dec 09');
expect(le.launch?.toISOString().slice(0, 10)).toBe('2007-10-01');
expect(le.exit?.toISOString().slice(0, 10)).toBe('2009-12-31');
expect(setLinks('xyz')).toEqual(['https://brickset.com/sets/10179-1/Millennium-Falcon']);
});
});