diff --git a/web/frontend/src/__tests__/task-tree.test.ts b/web/frontend/src/__tests__/task-tree.test.ts index 1423a0b..5ba6192 100644 --- a/web/frontend/src/__tests__/task-tree.test.ts +++ b/web/frontend/src/__tests__/task-tree.test.ts @@ -320,15 +320,14 @@ describe('KIN-127: статус revising', () => { expect(wrapper.find('a[href="/task/KIN-001"]').exists()).toBe(true) }) - it('Badge для статуса revising присутствует в списке задач', async () => { + it('Badge для статуса revising отображается с orange цветом', async () => { const tasks = [makeTask('KIN-001', 'revising', null)] const wrapper = await mountTasks(tasks) - // Badge с текстом revising должен присутствовать - const text = wrapper.text() - expect(text).toContain('revising') - // Badge должен иметь orange цвет - const orangeBadge = wrapper.find('.text-orange-400, .bg-orange-400, .bg-orange-500, .border-orange-400, .border-orange-500') + // Badge получает raw status string (decision #827: i18n на стороне вызывающего) + expect(wrapper.text()).toContain('revising') + // Badge с color="orange" применяет класс text-orange-400 (Badge.vue: colors.orange) + const orangeBadge = wrapper.find('.text-orange-400') expect(orangeBadge.exists()).toBe(true) }) }) @@ -379,8 +378,11 @@ describe('KIN-127: защита от циклических ссылок', () => const wrapper = await mountTasks(tasks) // Рендер завершился без ошибок expect(wrapper.exists()).toBe(true) - // При циклической ссылке ни одна задача не является «корневой» с дочерними — - // toggle кнопок быть не должно (дефолтное состояние: дети не показаны) + // rootFilteredTasks пустой: оба KIN-001 и KIN-002 имеют parent_task_id + // указывающий на существующую задачу → оба отфильтрованы (decision #817) + const taskLinks = wrapper.findAll('a[href^="/task/"]') + expect(taskLinks.length).toBe(0) + // toggle кнопок нет — задачи не попали в список (decision #826: независимые visited Set) const toggleBtns = wrapper.findAll('[data-testid="task-toggle-children"]') expect(toggleBtns.length).toBe(0) }) diff --git a/web/frontend/src/views/ProjectView.vue b/web/frontend/src/views/ProjectView.vue index 448bdc8..143bc98 100644 --- a/web/frontend/src/views/ProjectView.vue +++ b/web/frontend/src/views/ProjectView.vue @@ -769,6 +769,11 @@ function taskStatusColor(s: string) { return m[s] || 'gray' } +function taskStatusLabel(s: string) { + if (s === 'revising') return t('projectView.status_revising') + return s +} + function decTypeColor(t: string) { const m: Record = { decision: 'blue', gotcha: 'red', workaround: 'yellow', @@ -1183,7 +1188,7 @@ async function addDecision() { class="flex items-center justify-between px-3 py-2 border border-orange-800/60 bg-orange-950/20 rounded text-sm hover:border-orange-600 no-underline block transition-colors">
{{ t.id }} - + {{ t.title }} escalated from {{ t.parent_task_id }} @@ -1211,7 +1216,7 @@ async function addDecision() { {{ t.id }} - + {{ t.title }}