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, { lotsUrl, trimLot } from './index.js'; const connector = createConnector(ConnectorMetaSchema.parse(metaJson)); describe('just-whisky', () => { runFixtureSuite(connector, it, expect); it('maps reserve-met lots to GBP hammer sales', async () => { const fx = loadFixture('just-whisky', 'lots-page'); const out = await connector.normalize(fx.raw); expect(out.length).toBeGreaterThan(0); for (const r of out) { if (r.kind !== 'sale') throw new Error('expected sale'); expect(r.currency).toBe('GBP'); expect(r.buyerPremiumIncluded).toBe(false); expect(['whisky', 'rum', 'cognac']).toContain(r.attributes.categorySlug); expect(r.attributes.identifiers.justwhisky_lot).toMatch(/^\d+$/); expect(r.sourceUrl).toMatch(/^https:\/\/www\.just-whisky\.co\.uk\/lot\//); } }); it('skips reserve-not-met lots and builds API urls', async () => { const met = trimLot({ id: 1, slug: 'port-ellen-1981-feis-ile-2008-1', reserve_met: true, hammer_price: '2750.00', bid_stats: { current_bid: 2750 }, seller_sheet: { auction: { id: 1160, end_date: '2026-07-20T19:00:00' } }, item: { title: 'Port Ellen 1981', subtitle: 'Feis Ile 2008', strength: { name: '54.7%' }, size: { name: '70 cl' } } })!; const notMet = trimLot({ id: 2, slug: 'springbank-36-2', reserve_met: false, hammer_price: null, bid_stats: { current_bid: 3150 }, seller_sheet: { auction: { id: 1160, end_date: '2026-07-20T19:00:00' } }, item: { title: 'Springbank 36 Years Old 1965' } })!; const out = await connector.normalize({ url: 'u', externalId: null, kind: 'sale', engine: 'api', fetchedAt: new Date(), payload: { kind: 'lots_page', url: 'u', page: 1, count: 2, lots: [met, notMet] } }); expect(out).toHaveLength(1); const s = out[0]!; if (s.kind !== 'sale') throw new Error('sale'); expect(s.price).toBe(2750); expect(s.saleDate.toISOString()).toBe('2026-07-20T19:00:00.000Z'); expect(s.attributes.size).toBe('70cl'); expect(s.attributes.year).toBe(1981); expect(lotsUrl(new Date(Date.UTC(2026, 6, 14)), new Date(Date.UTC(2026, 6, 21)), 2, 200)).toBe('https://www.just-whisky.co.uk/api/lots/?min_end_date=14%2F07%2F2026&max_end_date=21%2F07%2F2026&ordering=-price&page_size=200&page=2'); }); });