Files
frontend-miniapp/tests/unit/GuideStopInfoAdapter.spec.ts
lyf 2edb6bd9f2
Some checks failed
CI / verify (push) Has been cancelled
适配H5讲解统一详情接口
2026-08-05 14:52:36 +08:00

68 lines
2.8 KiB
TypeScript

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'
})])
})
})