workspace-navigation-contract.test.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { describe, expect, it } from 'vitest'
  2. import { readFileSync } from 'node:fs'
  3. import { resolve } from 'node:path'
  4. const source = name => readFileSync(resolve(process.cwd(), `src/views/${name}`), 'utf8')
  5. describe('workspace navigation contracts', () => {
  6. it('makes the first todo the primary action without legacy stat cards', () => {
  7. const page = source('workspace/WorkspaceView.vue')
  8. expect(page).toContain('workspace-action')
  9. expect(page).toContain('workspace-action__title')
  10. expect(page).toContain('firstTodo')
  11. expect(page).toContain('firstTodoTarget')
  12. expect(page).toContain(':to="firstTodoTarget"')
  13. expect(page).toContain('YOUR NEXT ACTION')
  14. expect(page).not.toContain('class="grid-3"')
  15. expect(page).not.toContain('stat-card__top')
  16. expect(page).not.toContain('workspace-todo-metric')
  17. expect(page).not.toContain('DRAFT_OKR')
  18. })
  19. it('keeps period context and a responsive team pulse', () => {
  20. const page = source('workspace/WorkspaceView.vue')
  21. expect(page).toContain('workspace-pulse')
  22. expect(page).toContain('workspace-context')
  23. expect(page).toContain('teamOkrTarget')
  24. expect(page).toContain('workspace-team-link')
  25. expect(page).toContain('团队进展')
  26. expect(page).toContain('查看团队 OKR')
  27. expect(page).toContain('var(--color-text-secondary)')
  28. expect(page).toContain('@media (max-width: 820px)')
  29. expect(page).toContain('@media (max-width: 640px)')
  30. expect(page).not.toContain('card mt-md')
  31. })
  32. it('uses the period passed from the workspace when opening team OKR', () => {
  33. const page = source('okr/TeamOkrView.vue')
  34. expect(page).toContain('route.query.periodId')
  35. })
  36. it('keeps the selected period on personal OKR navigation', () => {
  37. const sidebar = readFileSync(resolve(process.cwd(), 'src/components/shell/CohereSidebar.vue'), 'utf8')
  38. expect(sidebar).toContain('periodAwareTarget')
  39. expect(sidebar).toContain('workspace.periodId')
  40. expect(sidebar).toContain(':to="periodAwareTarget(item)"')
  41. })
  42. })