refactor: remove manual refresh and search controls
ci / gitleaks (push) Successful in 8s
ci / docker (push) Successful in 7m17s

This commit is contained in:
2026-09-19 21:15:23 +08:00
parent 0cf1c49094
commit 4973d56a64
29 changed files with 244 additions and 860 deletions
+6 -19
View File
@@ -1,35 +1,30 @@
import { describe, expect, it } from 'vitest'
import { applyMarkdownFormat, buildTaskDueDraft, buildTaskRecurrencePayload, buildTaskRrule, classifyTaskForToday, defaultTaskDueAt, filterTasks, groupTaskTree, isSameTaskSortTier, mergeReorderedSubset, moveItemWithinScope, parseTaskDueDraft, parseTaskRecurrence, parseTaskRrule, renderMarkdown, toDateTimeLocal } from './task-utils'
import { applyMarkdownFormat, buildTaskDueDraft, buildTaskRecurrencePayload, buildTaskRrule, classifyTaskForToday, defaultTaskDueAt, groupTaskTree, isSameTaskSortTier, mergeReorderedSubset, moveItemWithinScope, parseTaskDueDraft, parseTaskRecurrence, parseTaskRrule, renderMarkdown, toDateTimeLocal } from './task-utils'
type SearchTask = {
type TaskFixture = {
id: string
title: string
description?: string
parent_id?: string | null
completed?: boolean
list_name?: string
subtasks?: SearchTask[]
subtasks?: TaskFixture[]
}
const tasks: SearchTask[] = [
const tasks: TaskFixture[] = [
{ id: '1', title: 'Write release notes', description: 'mention **API**', parent_id: null, completed: false },
{ id: '2', title: 'Check links', description: '', parent_id: '1', completed: false },
{ id: '3', title: 'Buy milk', description: '', parent_id: null, completed: true },
]
describe('task utilities', () => {
it('filters task titles and markdown descriptions case-insensitively', () => {
expect(filterTasks(tasks, 'api').map((task) => task.id)).toEqual(['1'])
expect(filterTasks(tasks, 'WRITE').map((task) => task.id)).toEqual(['1'])
})
it('keeps a one-level subtask tree without duplicating children', () => {
expect(groupTaskTree(tasks)).toEqual([{ task: tasks[0], subtasks: [tasks[1]] }, { task: tasks[2], subtasks: [] }])
})
it('preserves subtasks already nested by the task API', () => {
const child: SearchTask = { id: 'nested-child', title: 'Nested child', parent_id: 'nested-parent' }
const parent: SearchTask = { id: 'nested-parent', title: 'Nested parent', parent_id: null, subtasks: [child] }
const child: TaskFixture = { id: 'nested-child', title: 'Nested child', parent_id: 'nested-parent' }
const parent: TaskFixture = { id: 'nested-parent', title: 'Nested parent', parent_id: null, subtasks: [child] }
expect(groupTaskTree([parent])).toEqual([{ task: parent, subtasks: [child] }])
})
@@ -116,14 +111,6 @@ describe('task utilities', () => {
expect(applyMarkdownFormat('work', 0, 4, 'task')).toEqual({ value: '- [ ] work', start: 6, end: 10 })
})
it('filters titles, descriptions, and list names', () => {
const searchable: SearchTask[] = [
...tasks,
{ id: '4', title: 'Plan', list_name: '工作清单' },
]
expect(filterTasks(searchable, '工作').map((task) => task.id)).toEqual(['4'])
})
it('defaults new tasks to today without a time', () => {
const due = defaultTaskDueAt(new Date(2026, 8, 8, 21, 30))
expect(due).toBe('2026-09-08')