
import { describe, expect, it } from 'vitest'; import { getConnectorMeta } from '@rareindex/connectors'; import { loadFixture, runFixtureSuite } from '@rareindex/connectors/testing'; import createConnector, { parseComicTitle, parseGradeLine, parseSoldPage } from './index.js'; const connector = createConnector(getConnectorMeta('comicconnect')); describe('comicconnect', () => { runFixtureSuite(connector, it, expect); it('parses titles and grade lines', () => { expect(parseComicTitle('X-MEN (1963-2011) #282')).toEqual({ series: 'X-Men', seriesYears: '1963-2011', issue: '282', year: null, groupLot: false }); expect(parseComicTitle('AMAZING SPIDER-MAN (1963) #300')).toMatchObject({ series: 'Amazing Spider-Man', issue: '300', year: 1963 }); expect(parseComicTitle('X-MEN GROUP LOT #1 Comic Book Group Lot').groupLot).toBe(true); expect(parseGradeLine('Marvel CGC NM/M: 9.8')).toEqual({ publisher: 'Marvel', grader: 'cgc', grade: '9.8', label: 'NM/M' }); expect(parseGradeLine('Marvel NM: 9.4')).toEqual({ publisher: 'Marvel', grader: 'raw', grade: '9.4', label: 'NM' }); expect(parseGradeLine('DC CGC NM: 9.4')).toEqual({ publisher: 'DC', grader: 'cgc', grade: '9.4', label: 'NM' }); expect(parseGradeLine('DC VF-: 7.5')).toEqual({ publisher: 'DC', grader: 'raw', grade: '7.5', label: 'VF-' }); expect(parseGradeLine('Robin Snyder/Steve Ditko VF: 8.0')).toMatchObject({ publisher: 'Robin Snyder/Steve Ditko', grader: 'raw', grade: '8.0' }); }); it('maps sold cards to sales with grader, publisher and hammer price', async () => { const fx = loadFixture('comicconnect', 'sold-comics-page-1'); const out = await connector.normalize(fx.raw); expect(out.length).toBe(20); const graded = out.find((r) => r.kind === 'sale' && r.grade.grader === 'cgc'); if (graded?.kind !== 'sale') throw new Error('expected a CGC sale'); expect(graded.attributes.categorySlug).toMatch(/_comics$/); expect(graded.attributes.brand).toBeTruthy(); expect(graded.attributes.number).toMatch(/^\d/); expect(graded.currency).toBe('USD'); expect(graded.buyerPremiumIncluded).toBe(false); expect(graded.auctionHouse).toBe('ComicConnect'); expect(graded.saleDate.getUTCFullYear()).toBeGreaterThanOrEqual(2020); const marvel = out.filter((r) => r.kind === 'sale' && r.attributes.categorySlug === 'marvel_comics'); expect(marvel.length).toBeGreaterThan(0); }); it('parses the browse page HTML', () => { const html = `
off-white pages