import { describe, expect, it } from 'vitest'; import { readFileSync } from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { ConnectorMetaSchema } from '@rareindex/connectors'; import { loadFixture, runFixtureSuite } from '@rareindex/connectors/testing'; import createConnector, { parseListingHtml, parseSoldText, trimItem } from './index.js'; import { parseVehicleTitle } from '../../firecrawl/_carlib/index.js'; const dir = path.dirname(fileURLToPath(import.meta.url)); const meta = ConnectorMetaSchema.parse(JSON.parse(readFileSync(path.join(dir, 'meta.json'), 'utf8'))); const connector = createConnector(meta); describe('bring-a-trailer', () => { runFixtureSuite(connector, it, expect); it('only turns "Sold for" items into sales, with the winning bid, currency and end timestamp', async () => { const fx = loadFixture('bring-a-trailer', 'results-page'); const items = (fx.raw.payload as { items: Array<{ sold_text?: string | null; timestamp_end?: number }> }).items; const out = await connector.normalize(fx.raw); const soldItems = items.filter((i) => /^Sold for/.test((i.sold_text ?? '').replace(/<[^>]+>/g, ''))); expect(out.length).toBe(soldItems.length); for (const r of out) { if (r.kind !== 'sale') throw new Error('expected sale'); expect(r.buyerPremiumIncluded).toBe(false); expect(r.auctionHouse).toBe('Bring a Trailer'); expect(['automobiles', 'motorcycles']).toContain(r.attributes.categorySlug); expect(r.attributes.identifiers.bat_listing_id).toMatch(/^\d+$/); expect(r.saleDate.getTime()).toBeLessThanOrEqual(Date.now()); } }); it('parses sold text and vehicle titles', () => { expect(parseSoldText('Sold for USD $23,250 on 9/6/2026 ')).toEqual({ sold: true, date: new Date(Date.UTC(2026, 8, 6)) }); expect(parseSoldText('Bid to USD $11,250 on 9/6/2026 ').sold).toBe(false); expect(parseVehicleTitle('2004 GMC Sierra 2500HD SLT Crew Cab 4×4 Duramax')).toMatchObject({ year: 2004, make: 'GMC', model: 'Sierra 2500HD', categorySlug: 'automobiles' }); expect(parseVehicleTitle('1975 Harley-Davidson FLH Electra Glide')).toMatchObject({ make: 'Harley-Davidson', categorySlug: 'motorcycles' }); expect(parseVehicleTitle('1967 Land Rover Series IIA 88')).toMatchObject({ make: 'Land Rover', model: 'Series IIA' }); }); it('trims items and parses a listing page', () => { expect(trimItem({ id: 1, title: 'x', url: 'u', watch_url: 'noise', current_bid: 5 })).toEqual({ id: 1, title: 'x', url: 'u', current_bid: 5 }); const html = `