TypeScript 61.9%
HTML 37.2%
SQL 0.7%
1import { describe, expect, it } from 'vitest';2import meta from './meta.json' with { type: 'json' };3import { localMeta } from '../../api/_lib/local-meta.js';4import { listFixtures, loadFixture, runFixtureSuite } from '@rareindex/connectors/testing';5import createConnector, { auctionStatus, parseTitlePage, yearOfPublished, type PagePayload } from './index.js';6import { parseComicGrade, parseLabelNumber } from '../../api/_g6-comics-toys-games-lib/comics.js';78const connector = createConnector(localMeta(meta));910describe('mycomicshop', () => {11 runFixtureSuite(connector, it, expect);1213 it('parses issue blocks and schema.org stock rows from the saved title page', () => {14 const fx = loadFixture('mycomicshop', 'tid-78991');15 const p = fx.raw.payload as PagePayload;16 const parsed = parseTitlePage(p.snapshot!, fx.raw.url, '78991');17 expect(parsed.title).toContain('Amazing Spider-Man');18 expect(parsed.issues.length).toBeGreaterThanOrEqual(1);19 const blk = parsed.issues[0]!;20 expect(blk.seriesTitle).toBe('Amazing Spider-Man (1963 1st Series)');21 expect(blk.tid).toBe('78991');22 expect(blk.publisher).toBe('Marvel');23 expect(blk.issue).toMatch(/^-?\d+/);24 expect(blk.items.length).toBeGreaterThan(0);25 for (const it of blk.items) {26 expect(it.itemId).toMatch(/^\d+$/);27 expect(it.url).toContain(`ItemID=${it.itemId}`);28 if (!it.auction) expect(it.priceMicro ?? it.priceShown).toBeGreaterThan(0);29 }30 });3132 it('extracts CGC/CBCS certification numbers, consignment premiums and auction rows across fixtures', async () => {33 let certs = 0;34 let consignments = 0;35 let auctions = 0;36 for (const name of listFixtures('mycomicshop')) {37 const out = await connector.normalize(loadFixture('mycomicshop', name).raw);38 for (const r of out) {39 if (r.kind === 'listing') {40 expect(r.currency).toBe('USD');41 expect(r.price).toBeGreaterThan(0);42 expect(r.attributes.categorySlug).toMatch(/_comics$/);43 expect(r.attributes.brand).toBeTruthy();44 expect(r.attributes.number).toBeTruthy();45 if (r.grade.certificationNumber) {46 certs++;47 expect(['cgc', 'cbcs', 'pgx']).toContain(r.grade.grader);48 expect(r.grade.grade).toMatch(/^\d/);49 }50 if (r.attributes.metadata.consignment) {51 consignments++;52 expect(r.attributes.metadata.buyer_premium_pct).toBe(3);53 expect(r.seller).toMatch(/Consignment/);54 }55 } else if (r.kind === 'auction_lot') {56 auctions++;57 expect(r.auctionHouse).toBe('MyComicShop');58 expect(['upcoming', 'live', 'unknown']).toContain(r.status);59 } else throw new Error(`unexpected kind ${r.kind}`);60 }61 }62 expect(certs).toBeGreaterThan(0);63 expect(consignments).toBeGreaterThan(0);64 expect(auctions).toBeGreaterThan(0);65 });6667 it('parses grades, labels and published years in the store vocabulary', () => {68 expect(parseComicGrade('CGC 9.6')).toMatchObject({ grader: 'cgc', grade: '9.6' });69 expect(parseComicGrade('CBCS 9.6')).toMatchObject({ grader: 'cbcs', grade: '9.6' });70 expect(parseComicGrade('FN 6.0')).toMatchObject({ grader: 'raw', grade: '6.0', label: 'FN' });71 expect(parseComicGrade('Fine')).toMatchObject({ grader: 'raw', grade: null, label: 'Fine' });72 expect(parseLabelNumber('Paper: White | Label #4013069001 | Consignment. 3% buyer\'s premium')).toBe('4013069001');73 expect(parseLabelNumber('Label #16-19B5702-003')).toBe('16-19B5702-003');74 expect(parseLabelNumber('Paper: Off white')).toBeNull();75 expect(yearOfPublished('May 1988')).toBe(1988);76 expect(yearOfPublished(null)).toBeNull();77 expect(auctionStatus({ currentBid: 11, bids: 4, timeLeft: '6d 16h 3m', opens: null })).toBe('live');78 expect(auctionStatus({ currentBid: null, bids: null, timeLeft: null, opens: 'September 14' })).toBe('upcoming');79 });80});81