avatarRoundTrip.spec.ts 2.0 KB

12345678910111213141516171819202122232425262728
  1. import {expect,test} from '@playwright/test'
  2. import {readFileSync} from 'node:fs'
  3. test('reads the Android edit and preserves the iOS photo through the Web UI',async({page},testInfo)=>{
  4. await page.goto('/conversations')
  5. await page.getByRole('textbox',{name:'账号',exact:true}).fill('fixture')
  6. await page.getByRole('textbox',{name:'密码',exact:true}).fill('fixture-pass')
  7. await page.getByRole('button',{name:'登录',exact:true}).click()
  8. await expect(page.getByText('跨端造型',{exact:true}).first()).toBeVisible()
  9. const response=await page.request.get('/api/app/agents',{headers:{Origin:'http://127.0.0.1:18804'}})
  10. expect(response.ok(),await response.text()).toBe(true)
  11. const agents=(await response.json()).agents
  12. const edited=agents.find((a:{name:string})=>a.name==='跨端造型')
  13. const identity=JSON.parse(edited.avatar.slice('yaoyao-avatar:v2:'.length))
  14. expect(identity).toMatchObject({shape:'cloud',bodyId:null,color:'#ff6b00',expression:'happy'})
  15. const photo=JSON.parse(agents.find((a:{name:string})=>a.name==='跨端照片').avatar.slice('yaoyao-avatar:v2:'.length))
  16. expect(photo.imageCrop).toBe('rounded')
  17. expect(photo.imageDataURL).toBe('data:image/png;base64,'+readFileSync(new URL('../../public/brand/AppIcon-1024.png',import.meta.url)).toString('base64'))
  18. await expect(page.getByText('跨端造型',{exact:true}).first()).toBeVisible()
  19. const avatar=page.locator('.desktop-sidebar .agent-avatar[aria-label="跨端造型 的头像"]')
  20. await expect(avatar.locator('[data-part=outline] path')).toHaveAttribute('fill','#ff6b00')
  21. await expect(avatar.locator('[data-part=mouth]')).toHaveCount(0)
  22. await page.screenshot({path:testInfo.outputPath('web-workspace-roundtrip.png'),fullPage:true})
  23. await page.setViewportSize({width:375,height:812})
  24. const openNavigation=page.getByRole('button',{name:'打开导航',exact:true})
  25. if(await openNavigation.isVisible())await openNavigation.click()
  26. await page.screenshot({path:testInfo.outputPath('web-workspace-mobile.png'),fullPage:true})
  27. })