import { describe, expect, it } from 'vitest' import { buildPromptAssetContext, compileAssetPromptFragments } from '@/lib/assets/services/asset-prompt-context' describe('asset prompt context', () => { it('compiles subject, environment, and prop prompt fragments from the centralized asset context', () => { const context = buildPromptAssetContext({ characters: [ { name: '小雨/雨', appearances: [ { changeReason: '初始形象', descriptions: ['黑色短发,校服,冷静表情'], selectedIndex: 0, description: 'fallback description', }, ], }, ], locations: [ { name: '天台', images: [ { isSelected: true, description: '夜晚天台,冷风,霓虹远景', availableSlots: JSON.stringify([ '天台栏杆左侧靠近边缘的位置', ]), }, ], }, ], props: [ { name: '青铜匕首', summary: '古旧短刃,雕纹手柄', }, ], clipCharacters: [{ name: '雨' }], clipLocation: '天台', clipProps: ['青铜匕首'], }) expect(compileAssetPromptFragments(context)).toEqual({ appearanceListText: '小雨/雨: ["初始形象"]', fullDescriptionText: '【小雨/雨 - 初始形象】黑色短发,校服,冷静表情', locationDescriptionText: '夜晚天台,冷风,霓虹远景\n\n可站位置:\n- 天台栏杆左侧靠近边缘的位置', propsDescriptionText: '【青铜匕首】古旧短刃,雕纹手柄', charactersIntroductionText: '暂无角色介绍', }) }) })