import { describe, expect, it } from 'vitest'; import { ConnectorMetaSchema } from '@rareindex/connectors'; import metaJson from './meta.json' with { type: 'json' }; import { loadFixture, runFixtureSuite } from '@rareindex/connectors/testing'; import createConnector, { cleanName, preownedCondition, releaseYear } from './index.js'; const connector = createConnector(ConnectorMetaSchema.parse(metaJson)); describe('amiami', () => { runFixtureSuite(connector, it, expect); it('emits catalog + JPY listings with JAN and maker', async () => { const fx = loadFixture('amiami', 'figures-preowned-p1'); const out = await connector.normalize(fx.raw); const cats = out.filter((r) => r.kind === 'catalog_item'); const lst = out.filter((r) => r.kind === 'listing'); expect(cats.length).toBeGreaterThan(0); expect(lst.length).toBeGreaterThan(0); const l = lst[0]!; if (l.kind !== 'listing') throw new Error(); expect(l.currency).toBe('JPY'); expect(l.price).toBeGreaterThan(0); expect(l.attributes.categorySlug).toBe('action_figures'); expect(l.attributes.identifiers.amiami_gcode).toBeTruthy(); expect(l.sourceUrl).toContain('amiami.com/eng/detail/?gcode='); expect(cats.some((c) => c.kind === 'catalog_item' && c.attributes.identifiers.jan)).toBe(true); }); it('helpers', () => { expect(cleanName('[AmiAmi Exclusive Bonus] Azur Lane Glorious 1/7 Complete Figure')).toEqual({ name: 'Azur Lane Glorious 1/7 Complete Figure', bonus: true, scale: '1/7' }); expect(preownedCondition({ gcode: 'X', gname: '(Pre-owned ITEM:A/BOX:B) Foo', condition_flg: 1 })).toEqual({ condition: 'near_mint_box', raw: 'Pre-owned ITEM:A/BOX:B' }); expect(preownedCondition({ gcode: 'X', gname: 'Foo', condition_flg: 0 }).condition).toBe('mint_in_box'); expect(releaseYear('2026-04-30 00:00:00')).toBe(2026); expect(releaseYear('Apr-2026')).toBe(2026); expect(releaseYear(null)).toBeNull(); }); });