Some checks failed
CI / verify (push) Has been cancelled
- 详情页路由入参统一为 stopId,废弃 targetType/targetId - ExplainDetailEntryRequest 与 GlobalAudioSource 移除 targetType/targetId 字段 - 播放器源匹配仅按 stopId 判定,移除 targetType 兜底 - 删除 explainDetailTarget 死代码 - 清理 guideStopInfoAdapter 中 stop/info、play-info、text-info 旧契约类型与转换函数 - 补充测试服务器 Nginx SSL 部署手册 - 同步更新单测与 e2e 用例 Made-with: Proma
70 lines
2.2 KiB
TypeScript
70 lines
2.2 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import {
|
|
canToggleGuideAudioGender,
|
|
GUIDE_AUDIO_LANGUAGE_OPTIONS,
|
|
resolveGuideAudioOption
|
|
} from '@/domain/guideAudioOptions'
|
|
import type { MuseumGuideAudioOption } from '@/domain/museum'
|
|
|
|
const audioOptions: MuseumGuideAudioOption[] = [
|
|
{
|
|
channelCode: 'standard.zh-CN.female',
|
|
languageCode: 'zh-CN',
|
|
gender: 'female',
|
|
playUrl: '/audio/zh-female.mp3',
|
|
isDefault: true,
|
|
sortOrder: 10
|
|
},
|
|
{
|
|
channelCode: 'standard.zh-CN.male',
|
|
languageCode: 'zh-CN',
|
|
gender: 'male',
|
|
playUrl: '/audio/zh-male.mp3',
|
|
sortOrder: 20
|
|
},
|
|
{
|
|
channelCode: 'standard.en-US.female',
|
|
languageCode: 'en-US',
|
|
gender: 'female',
|
|
playUrl: '/audio/en-female.mp3'
|
|
},
|
|
{
|
|
channelCode: 'standard.en-US.male',
|
|
languageCode: 'en-US',
|
|
gender: 'male',
|
|
playUrl: '/audio/en-male.mp3'
|
|
},
|
|
{
|
|
channelCode: 'standard.yue-HK.female',
|
|
languageCode: 'yue-HK',
|
|
gender: 'female',
|
|
playUrl: '/audio/yue-female.mp3'
|
|
}
|
|
]
|
|
|
|
describe('guide audio options', () => {
|
|
it('keeps tabs in Chinese, English, Cantonese order and defaults Chinese and English to male', () => {
|
|
expect(GUIDE_AUDIO_LANGUAGE_OPTIONS.map((option) => option.value)).toEqual([
|
|
'zh-CN',
|
|
'en-US',
|
|
'yue-HK'
|
|
])
|
|
expect(resolveGuideAudioOption(audioOptions, 'zh-CN', 'male')?.channelCode)
|
|
.toBe('standard.zh-CN.male')
|
|
expect(resolveGuideAudioOption(audioOptions, 'en-US', 'male')?.channelCode)
|
|
.toBe('standard.en-US.male')
|
|
})
|
|
|
|
it('shares the selected voice between Chinese and English, while Cantonese is female-only', () => {
|
|
const selectedGender = 'female' as const
|
|
expect(resolveGuideAudioOption(audioOptions, 'zh-CN', selectedGender)?.channelCode)
|
|
.toBe('standard.zh-CN.female')
|
|
expect(resolveGuideAudioOption(audioOptions, 'en-US', selectedGender)?.channelCode)
|
|
.toBe('standard.en-US.female')
|
|
expect(resolveGuideAudioOption(audioOptions, 'yue-HK', 'male')?.channelCode)
|
|
.toBe('standard.yue-HK.female')
|
|
expect(canToggleGuideAudioGender(audioOptions, 'zh-CN')).toBe(true)
|
|
expect(canToggleGuideAudioGender(audioOptions, 'yue-HK')).toBe(false)
|
|
})
|
|
})
|