import { describe, expect, it } from 'vitest'; import meta from './meta.json' with { type: 'json' }; import { localMeta } from '../../api/_lib/local-meta.js'; import { listFixtures, loadFixture, runFixtureSuite } from '@rareindex/connectors/testing'; import createConnector, { auctionStatus, parseTitlePage, yearOfPublished, type PagePayload } from './index.js'; import { parseComicGrade, parseLabelNumber } from '../../api/_g6-comics-toys-games-lib/comics.js'; const connector = createConnector(localMeta(meta)); describe('mycomicshop', () => { runFixtureSuite(connector, it, expect); it('parses issue blocks and schema.org stock rows from the saved title page', () => { const fx = loadFixture('mycomicshop', 'tid-78991'); const p = fx.raw.payload as PagePayload; const parsed = parseTitlePage(p.snapshot!, fx.raw.url, '78991'); expect(parsed.title).toContain('Amazing Spider-Man'); expect(parsed.issues.length).toBeGreaterThanOrEqual(1); const blk = parsed.issues[0]!; expect(blk.seriesTitle).toBe('Amazing Spider-Man (1963 1st Series)'); expect(blk.tid).toBe('78991'); expect(blk.publisher).toBe('Marvel'); expect(blk.issue).toMatch(/^-?\d+/); expect(blk.items.length).toBeGreaterThan(0); for (const it of blk.items) { expect(it.itemId).toMatch(/^\d+$/); expect(it.url).toContain(`ItemID=${it.itemId}`); if (!it.auction) expect(it.priceMicro ?? it.priceShown).toBeGreaterThan(0); } }); it('extracts CGC/CBCS certification numbers, consignment premiums and auction rows across fixtures', async () => { let certs = 0; let consignments = 0; let auctions = 0; for (const name of listFixtures('mycomicshop')) { const out = await connector.normalize(loadFixture('mycomicshop', name).raw); for (const r of out) { if (r.kind === 'listing') { expect(r.currency).toBe('USD'); expect(r.price).toBeGreaterThan(0); expect(r.attributes.categorySlug).toMatch(/_comics$/); expect(r.attributes.brand).toBeTruthy(); expect(r.attributes.number).toBeTruthy(); if (r.grade.certificationNumber) { certs++; expect(['cgc', 'cbcs', 'pgx']).toContain(r.grade.grader); expect(r.grade.grade).toMatch(/^\d/); } if (r.attributes.metadata.consignment) { consignments++; expect(r.attributes.metadata.buyer_premium_pct).toBe(3); expect(r.seller).toMatch(/Consignment/); } } else if (r.kind === 'auction_lot') { auctions++; expect(r.auctionHouse).toBe('MyComicShop'); expect(['upcoming', 'live', 'unknown']).toContain(r.status); } else throw new Error(`unexpected kind ${r.kind}`); } } expect(certs).toBeGreaterThan(0); expect(consignments).toBeGreaterThan(0); expect(auctions).toBeGreaterThan(0); }); it('parses grades, labels and published years in the store vocabulary', () => { expect(parseComicGrade('CGC 9.6')).toMatchObject({ grader: 'cgc', grade: '9.6' }); expect(parseComicGrade('CBCS 9.6')).toMatchObject({ grader: 'cbcs', grade: '9.6' }); expect(parseComicGrade('FN 6.0')).toMatchObject({ grader: 'raw', grade: '6.0', label: 'FN' }); expect(parseComicGrade('Fine')).toMatchObject({ grader: 'raw', grade: null, label: 'Fine' }); expect(parseLabelNumber('Paper: White | Label #4013069001 | Consignment. 3% buyer\'s premium')).toBe('4013069001'); expect(parseLabelNumber('Label #16-19B5702-003')).toBe('16-19B5702-003'); expect(parseLabelNumber('Paper: Off white')).toBeNull(); expect(yearOfPublished('May 1988')).toBe(1988); expect(yearOfPublished(null)).toBeNull(); expect(auctionStatus({ currentBid: 11, bids: 4, timeLeft: '6d 16h 3m', opens: null })).toBe('live'); expect(auctionStatus({ currentBid: null, bids: null, timeLeft: null, opens: 'September 14' })).toBe('upcoming'); }); });