TypeScript 61.9%
HTML 37.2%
SQL 0.7%
1import { describe, expect, it } from 'vitest';2import { ConnectorMetaSchema } from '@rareindex/connectors';3import metaJson from './meta.json' with { type: 'json' };4import { loadFixture, runFixtureSuite } from '@rareindex/connectors/testing';5import createConnector, { cleanName, preownedCondition, releaseYear } from './index.js';67const connector = createConnector(ConnectorMetaSchema.parse(metaJson));89describe('amiami', () => {10 runFixtureSuite(connector, it, expect);1112 it('emits catalog + JPY listings with JAN and maker', async () => {13 const fx = loadFixture('amiami', 'figures-preowned-p1');14 const out = await connector.normalize(fx.raw);15 const cats = out.filter((r) => r.kind === 'catalog_item');16 const lst = out.filter((r) => r.kind === 'listing');17 expect(cats.length).toBeGreaterThan(0);18 expect(lst.length).toBeGreaterThan(0);19 const l = lst[0]!;20 if (l.kind !== 'listing') throw new Error();21 expect(l.currency).toBe('JPY');22 expect(l.price).toBeGreaterThan(0);23 expect(l.attributes.categorySlug).toBe('action_figures');24 expect(l.attributes.identifiers.amiami_gcode).toBeTruthy();25 expect(l.sourceUrl).toContain('amiami.com/eng/detail/?gcode=');26 expect(cats.some((c) => c.kind === 'catalog_item' && c.attributes.identifiers.jan)).toBe(true);27 });2829 it('helpers', () => {30 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' });31 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' });32 expect(preownedCondition({ gcode: 'X', gname: 'Foo', condition_flg: 0 }).condition).toBe('mint_in_box');33 expect(releaseYear('2026-04-30 00:00:00')).toBe(2026);34 expect(releaseYear('Apr-2026')).toBe(2026);35 expect(releaseYear(null)).toBeNull();36 });37});38