team-tools.spec.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { test, expect } from '@playwright/test'
  2. test('team permission defaults off, saves, reloads and revokes in the Agent editor', async ({page},testInfo) => {
  3. await page.goto('/conversations')
  4. await page.getByRole('textbox',{name:'账号',exact:true}).fill('fixture')
  5. await page.getByRole('textbox',{name:'密码',exact:true}).fill('fixture-pass')
  6. await page.getByRole('button',{name:'登录',exact:true}).click()
  7. await expect(page.getByRole('heading',{name:'还没有聊天'})).toBeVisible()
  8. await page.locator('.desktop-sidebar .sidebar-create-trigger').click()
  9. await page.getByRole('menuitem',{name:'新建 Bot',exact:true}).click()
  10. const dialog=page.getByRole('dialog'), permission=dialog.getByRole('checkbox',{name:'允许组建团队',exact:true})
  11. await dialog.getByRole('textbox',{name:'名称',exact:true}).fill('组队老板')
  12. await expect(permission).not.toBeChecked()
  13. await permission.check()
  14. await permission.scrollIntoViewIfNeeded()
  15. await page.screenshot({path:testInfo.outputPath('team-permission-desktop.png')})
  16. const saved=page.waitForResponse(r=>r.request().method()==='POST' && r.url().endsWith('/api/app/agents'))
  17. await dialog.getByRole('button',{name:'保存',exact:true}).click()
  18. const response=await saved
  19. expect(response.ok(),await response.text()).toBe(true)
  20. const agent=(await response.json()).agent
  21. expect(agent.canManageTeam).toBe(true)
  22. await page.reload()
  23. await expect(page.getByRole('heading',{name:'组队老板',exact:true})).toBeVisible()
  24. const edit=page.getByRole('button',{name:'聊天设置',exact:true})
  25. await edit.click()
  26. await expect(permission).toBeChecked()
  27. await page.setViewportSize({width:375,height:812})
  28. await page.emulateMedia({colorScheme:'dark',reducedMotion:'reduce'})
  29. await permission.scrollIntoViewIfNeeded()
  30. await page.screenshot({path:testInfo.outputPath('team-permission-mobile.png')})
  31. await permission.uncheck()
  32. const revoked=page.waitForResponse(r=>r.request().method()==='PATCH' && r.url().endsWith(`/api/app/agents/${agent.id}`))
  33. await dialog.getByRole('button',{name:'保存',exact:true}).click()
  34. expect((await (await revoked).json()).agent.canManageTeam).toBe(false)
  35. expect((await (await page.request.get('/api/app/agents')).json()).agents.find((a:any)=>a.id===agent.id).canManageTeam).toBe(false)
  36. })