import { describe, expect, it } from 'vitest'; import { ConnectorMetaSchema } from '@rareindex/connectors'; import { listFixtures, loadFixture, runFixtureSuite } from '@rareindex/connectors/testing'; import metaJson from './meta.json' with { type: 'json' }; import createConnector, { categoryForAuction, parsePastAuctions, premiumFor } from './index.js'; const connector = createConnector(ConnectorMetaSchema.parse(metaJson)); describe('lyon-turnbull', () => { runFixtureSuite(connector, it, expect); it('emits GBP hammer-price sales for sold lots and auction_lot records for unsold ones', async () => { const name = listFixtures('lyon-turnbull')[0]!; const fx = loadFixture('lyon-turnbull', name); const out = await connector.normalize(fx.raw); const sales = out.filter((r) => r.kind === 'sale'); expect(sales.length).toBeGreaterThan(5); for (const r of sales) { if (r.kind !== 'sale') continue; expect(r.currency).toBe('GBP'); expect(r.buyerPremiumIncluded).toBe(false); expect(r.auctionHouse).toBe('Lyon & Turnbull'); expect(Array.isArray(r.attributes.metadata.premium_tiers)).toBe(true); if (r.attributes.metadata.premium_estimate !== null) expect(r.attributes.metadata.premium_estimate).toBeGreaterThan(0); expect(r.saleDate.getFullYear()).toBeGreaterThanOrEqual(2020); } }); it('helpers', () => { const html = ``; expect(parsePastAuctions(html)).toEqual([{ saleNumber: '908', title: 'Scotland Collected', subtitle: null, date: '19 & 20 August 2026', amsDate: '2026-08-19T09:00:00.000Z', link: '/auctions/scotland-collected-908' }]); expect(categoryForAuction('Fine Jewellery')).toBe('jewelry'); expect(categoryForAuction('1925: Celebrating Art Deco')).toBe('design_furniture'); expect(categoryForAuction('Rare Books, Manuscripts, Maps & Photographs')).toBe('books'); expect(premiumFor(10000, [{ percent: 27, amount_over: 0 }, { percent: 26, amount_over: 20000 }])).toBe(2700); expect(premiumFor(30000, [{ percent: 27, amount_over: 0 }, { percent: 26, amount_over: 20000 }])).toBe(8000); }); });