| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- import { mount } from '@vue/test-utils'
- import { describe, expect, it } from 'vitest'
- import AgentAvatar from '@/components/common/AgentAvatar.vue'
- import MessageTimeline from '@/components/messages/MessageTimeline.vue'
- const transparentPng = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII='
- describe('AgentAvatar', () => {
- it('marks real images so caller backgrounds cannot show through transparent pixels', () => {
- const wrapper = mount(AgentAvatar, { props: { name: '丫头', avatar: transparentPng } })
- expect(wrapper.classes()).toContain('agent-avatar--image')
- expect(wrapper.find('img').attributes('src')).toBe(transparentPng)
- })
- it('renders a stable animated mascot when no image is configured', () => {
- const wrapper = mount(AgentAvatar, { props: { name: '丫头' } })
- expect(wrapper.classes()).not.toContain('agent-avatar--image')
- expect(wrapper.find('img').exists()).toBe(false)
- expect(wrapper.find('svg').exists()).toBe(true)
- expect(wrapper.findAll('.agent-avatar__eye')).toHaveLength(2)
- })
- it('uses the compact triangle and exposes the notifying motion state', () => {
- const wrapper = mount(AgentAvatar, {
- props: {
- name: 'Scout',
- avatar: 'yaoyao-mascot:v1:triangle:0ea5c6:curious',
- state: 'notifying',
- },
- })
- expect(wrapper.classes()).toContain('agent-avatar--notifying')
- expect(wrapper.find('svg path[fill^="url"]').exists()).toBe(true)
- })
- it('keeps a group-message image transparent when MessageTimeline adds its fallback class', () => {
- const wrapper = mount(MessageTimeline, {
- attachTo: document.body,
- props: {
- messages: [{ id: 'assistant-1', role: 'assistant', profile: 'default', author: '丫头', content: '收到,测试正常。' }],
- agentAvatars: { default: transparentPng },
- },
- })
- const avatar = wrapper.get('.message__avatar')
- expect(avatar.classes()).toEqual(expect.arrayContaining(['agent-avatar--image', 'message__avatar']))
- expect(getComputedStyle(avatar.element).backgroundColor).toBe('rgba(0, 0, 0, 0)')
- wrapper.unmount()
- })
- })
|