import { describe, expect, it } from 'vitest' import { toGuideStopDetail } from '@/data/adapters/guideStopInfoAdapter' const languages = ['zh-CN', 'en-US', 'yue-HK'] as const describe('unified guide stop detail adapter', () => { it('preserves snowflake IDs, synthesizes stable track codes, and ignores images marked missing', () => { const textVariants = languages.map((languageCode) => ({ version: 'standard', languageCode, text: `standard-${languageCode}` })) const audioTracks = languages.flatMap((languageCode) => ( languageCode === 'yue-HK' ? [{ version: 'standard', languageCode, gender: 'female', playUrl: `/standard-${languageCode}-female.mp3` }] : ['female', 'male'].map((gender) => ({ version: 'standard', languageCode, gender, playUrl: `/standard-${languageCode}-${gender}.mp3` })) )) const detail = toGuideStopDetail({ id: '865546647764037632', version: 'standard', outlineId: '7467940240901013505', linkedExhibits: [{ id: '865546647764037633', name: '关联展品' }], name: '青铜神树', coverImageUrl: '/should-not-be-used.webp', galleryUrls: '["/should-not-be-used-gallery.webp"]', imageStatus: 'MISSING', recommendedTrackCode: 'standard.zh-CN.female', textVariants, audioTracks, textVariantCount: 3, audioTrackCount: 5 }) expect(detail.id).toBe('865546647764037632') expect(detail.version).toBe('standard') expect(detail.outlineId).toBe('7467940240901013505') expect(detail.linkedExhibits[0]?.id).toBe('865546647764037633') expect(detail.coverImageUrl).toBeUndefined() expect(detail.galleryUrls).toEqual([]) expect(detail.textVariants).toHaveLength(3) expect(detail.audioTracks).toHaveLength(5) expect(detail.recommendedTrackCode).toBe('standard.zh-CN.female') expect(detail.audioTracks.find((track) => track.channelCode === 'standard.zh-CN.female')?.playUrl) .toBe('/standard-zh-CN-female.mp3') }) it('drops unusable tracks while retaining a Chinese text variant for Cantonese fallback', () => { const detail = toGuideStopDetail({ id: 'stop-1', version: 'extended', name: '测试', imageStatus: 'READY', textVariants: [{ version: 'extended', languageCode: 'zh-CN', text: '普通话正文' }], audioTracks: [ { version: 'extended', languageCode: 'yue-HK', gender: 'female', playUrl: '/cantonese.mp3' }, { version: 'extended', languageCode: 'zh-CN', gender: 'female' } ] }) expect(detail.version).toBe('extended') expect(detail.textVariants[0]?.text).toBe('普通话正文') expect(detail.audioTracks).toEqual([expect.objectContaining({ channelCode: 'extended.yue-HK.female', gender: 'female' })]) }) })