agentAvatar.test.ts 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { mount } from '@vue/test-utils'
  2. import { describe, expect, it } from 'vitest'
  3. import AgentAvatar from '@/components/common/AgentAvatar.vue'
  4. import MessageTimeline from '@/components/messages/MessageTimeline.vue'
  5. const transparentPng = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII='
  6. describe('AgentAvatar', () => {
  7. it('marks real images so caller backgrounds cannot show through transparent pixels', () => {
  8. const wrapper = mount(AgentAvatar, { props: { name: '丫头', avatar: transparentPng } })
  9. expect(wrapper.classes()).toContain('agent-avatar--image')
  10. expect(wrapper.find('img').attributes('src')).toBe(transparentPng)
  11. })
  12. it('renders a stable animated mascot when no image is configured', () => {
  13. const wrapper = mount(AgentAvatar, { props: { name: '丫头' } })
  14. expect(wrapper.classes()).not.toContain('agent-avatar--image')
  15. expect(wrapper.find('img').exists()).toBe(false)
  16. expect(wrapper.find('svg').exists()).toBe(true)
  17. expect(wrapper.findAll('.agent-avatar__eye')).toHaveLength(2)
  18. })
  19. it('uses the compact triangle and exposes the notifying motion state', () => {
  20. const wrapper = mount(AgentAvatar, {
  21. props: {
  22. name: 'Scout',
  23. avatar: 'yaoyao-mascot:v1:triangle:0ea5c6:curious',
  24. state: 'notifying',
  25. },
  26. })
  27. expect(wrapper.classes()).toContain('agent-avatar--notifying')
  28. expect(wrapper.find('svg path[fill^="url"]').exists()).toBe(true)
  29. })
  30. it('keeps a group-message image transparent when MessageTimeline adds its fallback class', () => {
  31. const wrapper = mount(MessageTimeline, {
  32. attachTo: document.body,
  33. props: {
  34. messages: [{ id: 'assistant-1', role: 'assistant', profile: 'default', author: '丫头', content: '收到,测试正常。' }],
  35. agentAvatars: { default: transparentPng },
  36. },
  37. })
  38. const avatar = wrapper.get('.message__avatar')
  39. expect(avatar.classes()).toEqual(expect.arrayContaining(['agent-avatar--image', 'message__avatar']))
  40. expect(getComputedStyle(avatar.element).backgroundColor).toBe('rgba(0, 0, 0, 0)')
  41. wrapper.unmount()
  42. })
  43. })