import { describe, expect, it } from 'vitest' import { readFileSync } from 'node:fs' import { resolve } from 'node:path' const source = name => readFileSync(resolve(process.cwd(), `src/views/${name}`), 'utf8') describe('workspace navigation contracts', () => { it('makes the first todo the primary action without legacy stat cards', () => { const page = source('workspace/WorkspaceView.vue') expect(page).toContain('workspace-action') expect(page).toContain('workspace-action__title') expect(page).toContain('firstTodo') expect(page).toContain('firstTodoTarget') expect(page).toContain(':to="firstTodoTarget"') expect(page).toContain('YOUR NEXT ACTION') expect(page).not.toContain('class="grid-3"') expect(page).not.toContain('stat-card__top') expect(page).not.toContain('workspace-todo-metric') expect(page).not.toContain('DRAFT_OKR') }) it('keeps period context and a responsive team pulse', () => { const page = source('workspace/WorkspaceView.vue') expect(page).toContain('workspace-pulse') expect(page).toContain('workspace-context') expect(page).toContain('teamOkrTarget') expect(page).toContain('workspace-team-link') expect(page).toContain('团队进展') expect(page).toContain('查看团队 OKR') expect(page).toContain('var(--color-text-secondary)') expect(page).toContain('@media (max-width: 820px)') expect(page).toContain('@media (max-width: 640px)') expect(page).not.toContain('card mt-md') }) it('uses the period passed from the workspace when opening team OKR', () => { const page = source('okr/TeamOkrView.vue') expect(page).toContain('route.query.periodId') }) it('keeps the selected period on personal OKR navigation', () => { const sidebar = readFileSync(resolve(process.cwd(), 'src/components/shell/CohereSidebar.vue'), 'utf8') expect(sidebar).toContain('periodAwareTarget') expect(sidebar).toContain('workspace.periodId') expect(sidebar).toContain(':to="periodAwareTarget(item)"') }) })