ordinary-local.spec.ts 1.7 KB

12345678910111213141516171819202122232425
  1. import {test,expect} from '@playwright/test'
  2. test('ordinary SSE replies remain readable from Web without a second history source',async({page})=>{
  3. await page.goto('/chat')
  4. if(await page.getByRole('heading',{name:'登录夭夭'}).isVisible()){
  5. await page.getByLabel('账号').fill('admin');await page.getByLabel('密码').fill('e2e-password')
  6. await page.getByRole('button',{name:'登录',exact:true}).click()
  7. }
  8. await expect(page.getByRole('navigation')).toBeVisible()
  9. await page.getByRole('button',{name:'新建聊天',exact:true}).click()
  10. const prompt=`本地落盘验收 ${Date.now()}`
  11. await page.locator('.composer-textarea').fill(prompt)
  12. await page.getByRole('button',{name:'发送消息'}).click()
  13. await expect(page.locator('.message__content').filter({hasText:'这是来自假 Gateway 的流式回复。'})).toHaveCount(1,{timeout:15000})
  14. const result=await page.evaluate(async()=>{
  15. const response=await fetch('/api/app/sessions/session-new/messages?profile=yaoyao&limit=100')
  16. return{status:response.status,source:response.headers.get('X-Yaoyao-Data-Source'),body:await response.json()}
  17. })
  18. expect(result.status).toBe(200);expect(result.source).toBe('local')
  19. expect(result.body.messages.filter((m:any)=>m.role==='user').map((m:any)=>m.content)).toEqual([prompt])
  20. expect(result.body.messages.filter((m:any)=>m.role==='assistant').map((m:any)=>m.content)).toEqual(['这是来自假 Gateway 的流式回复。'])
  21. await page.reload()
  22. await expect(page.locator('.message__content').filter({hasText:'这是来自假 Gateway 的流式回复。'})).toHaveCount(1)
  23. await page.screenshot({path:'/tmp/yaoyao-ordinary-local-browser.png',fullPage:true})
  24. })