taskPlan.test.ts 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { expect, it, vi } from 'vitest'
  2. import { flushPromises, mount } from '@vue/test-utils'
  3. import TaskPlan from '@/components/workspace/TaskPlan.vue'
  4. import type { AgentGoal } from '@shared/agentTasks'
  5. const goal: AgentGoal = { id:'goal',conversationId:'group',coordinatorId:'lead',authorityRevision:1,objective:'交付报告',acceptanceCriteria:['提供来源'],acceptanceRevision:1,status:'running',origin:{conversationId:'group',runId:'run',agentId:'lead'},artifactIds:[],revision:1,automaticWakes:0,createdAt:1,updatedAt:1 }
  6. it('keeps progress and results visible while task details start collapsed', () => {
  7. const wrapper = mount(TaskPlan,{props:{goal:{...goal,result:'初稿已交付'},assignments:[],agents:[]}})
  8. expect(wrapper.get('details').attributes('open')).toBeUndefined()
  9. expect(wrapper.get('header').text()).toContain('进行中')
  10. expect(wrapper.get('.result').text()).toBe('初稿已交付')
  11. wrapper.unmount()
  12. })
  13. it('preserves user edits across progress refreshes and reports stale-save errors without discarding the draft', async () => {
  14. const saveCriteria = vi.fn().mockRejectedValueOnce(new Error('验收要求已更新,请重新查看后修改'))
  15. const wrapper = mount(TaskPlan,{props:{goal,assignments:[],agents:[],saveCriteria}})
  16. await wrapper.get('details').trigger('click')
  17. await wrapper.findAll('button').find(button=>button.text()==='调整验收要求')!.trigger('click')
  18. await wrapper.get('textarea').setValue('比较三种方案\n给出建议')
  19. await wrapper.setProps({goal:{...goal,revision:9,status:'review',acceptanceRevision:2,acceptanceCriteria:['另一条最新要求']}})
  20. expect(wrapper.get('textarea').element.value).toBe('比较三种方案\n给出建议')
  21. await wrapper.get('form').trigger('submit')
  22. await flushPromises()
  23. expect(saveCriteria).toHaveBeenCalledWith('goal',1,['比较三种方案','给出建议'])
  24. expect(wrapper.get('[role=alert]').text()).toContain('已更新')
  25. expect(wrapper.get('textarea').element.value).toContain('比较三种方案')
  26. await wrapper.findAll('button').find(button=>button.text()==='取消')!.trigger('click')
  27. await wrapper.findAll('button').find(button=>button.text()==='调整验收要求')!.trigger('click')
  28. expect(wrapper.get('textarea').element.value).toBe('另一条最新要求')
  29. saveCriteria.mockResolvedValue(undefined)
  30. await wrapper.get('textarea').setValue('最新要求与来源')
  31. await wrapper.get('form').trigger('submit')
  32. await flushPromises()
  33. expect(saveCriteria).toHaveBeenLastCalledWith('goal',2,['最新要求与来源'])
  34. expect(wrapper.find('textarea').exists()).toBe(false)
  35. wrapper.unmount()
  36. })