import { describe, expect, it } from 'vitest'; import { ConnectorMetaSchema } from '@rareindex/connectors'; import { loadFixture, runFixtureSuite } from '@rareindex/connectors/testing'; import metaJson from './meta.json' with { type: 'json' }; import createConnector, { parseCotePage, producerFromSlug } from './index.js'; const connector = createConnector(ConnectorMetaSchema.parse(metaJson)); describe('idealwine', () => { runFixtureSuite(connector, it, expect); it('emits a catalog item + EUR guide_value observation per wine vintage', async () => { const fx = loadFixture('idealwine', 'bordeaux-page-1'); const out = await connector.normalize(fx.raw); const obs = out.filter((r) => r.kind === 'price_observation'); const items = out.filter((r) => r.kind === 'catalog_item'); expect(obs.length).toBe(items.length); expect(obs.length).toBeGreaterThan(20); for (const r of obs) { if (r.kind !== 'price_observation') continue; expect(r.currency).toBe('EUR'); expect(r.priceKind).toBe('guide_value'); expect(r.price).toBeGreaterThan(0); expect(r.attributes.categorySlug).toBe('wine'); expect(r.attributes.set).toBeTruthy(); expect(r.attributes.identifiers.idealwine_ref).toMatch(/^\d+-/); expect(r.sourceUrl).toMatch(/^https:\/\/www\.idealwine\.com\/en\/wine-prices\//); } }); it('parses cards and producer slugs', () => { const html = `
Bordeaux > Pessac-Léognan
Abeille de Fieuzal (Red)
2021 €13
2020 €1,250
58`; const p = parseCotePage(html, 'u', 'bordeaux', 1); expect(p.totalPages).toBe(58); expect(p.wines).toHaveLength(1); expect(p.wines[0]).toMatchObject({ wineId: '120055', name: 'Abeille de Fieuzal', color: 'Red', region: 'Bordeaux', appellation: 'Pessac-Léognan' }); expect(p.wines[0]!.vintages).toEqual([ { vintage: 2021, priceEur: 13, url: 'https://www.idealwine.com/en/wine-prices/120055-2021-Bottle-Bordeaux-Pessac-Leognan-Chateau-de-Fieuzal-red', ref: '120055-2021' }, { vintage: 2020, priceEur: 1250, url: 'https://www.idealwine.com/en/wine-prices/120055-2020-Bottle-Bordeaux-Pessac-Leognan-Chateau-de-Fieuzal-red', ref: '120055-2020' }, ]); expect(producerFromSlug('Bordeaux-Pessac-Leognan-Chateau-de-Fieuzal-red')).toBe('Bordeaux Pessac Leognan Chateau de Fieuzal'); }); });