6.1 KiB
6.1 KiB
Аудит и план доработок
1. Невыполненный пункт todo.md
- Боковая панель — при изменении настроек должна обновляться (или кнопка
refresh)
todo.md:58-60
2. Рефакторинг: слияние frontmatterBlock.ts → frontmatterFields.ts
Зачем
frontmatterBlock.ts (148 строк) — единственный крупный модуль без единого
теста. Его логика (поиск строк/позиций в frontmatter) тесно связана с
frontmatterFields.ts. Ни один другой потребитель не требует отдельного файла.
План
- Перенести весь код
frontmatterBlock.tsвfrontmatterFields.ts - Убрать
export * from "./frontmatterBlock"и соответствующий import - Обновить импорты в
validateFrontmatter.tsиparseTaskTags.ts - Удалить
frontmatterBlock.ts - Написать unit-тесты на перенесённые функции:
extractFrontmatterBlock— валидный/без закрытия/без frontmatter/пустой/CRLFfindFieldLineRange— поле найдено/не найдено/с отступами
3. Тесты на edge cases
🔴 Приоритет: высокий
| Модуль | Недостающие кейсы |
|---|---|
dashboard/sortTasks |
пустой массив, одинаковые created, невалидные даты |
kanban/buildKanbanBoard |
одинаковые updated (стабильность sort) |
storage/FsTaskRepository |
ошибки fs при readdir/readFile/writeFile/deleteFile, кириллица в заголовке, title ровно 80 символов, теги с кавычками/спецсимволами |
dashboard/applyRawTaskContent |
raw с другим порядком полей, raw без тела (description) |
dashboard/buildDashboardView |
пустой массив задач (tasks: []) |
dashboard/groupTasks |
неизвестный статус/приоритет в данных |
🟡 Приоритет: средний
| Модуль | Недостающие кейсы |
|---|---|
| — | Интеграционный тест: create → serialize → write → read → parse (полный цикл через файл) |
dashboard/filterTasks |
пустой массив, все фильтры пустые |
FsTaskRepository |
конфликт ID при merge задач из project + global |
4. Хрупкие тесты
Snapshot-тесты
model/taskStatus.test.ts—toMatchSnapshot()наTaskStatusmodel/taskPriority.test.ts—toMatchSnapshot()наTaskPriority
Ломаются от любого изменения порядка ключей.
→ Заменить на toEqual() с явными ожиданиями.
_unsafeUnwrap() вместо проверок isErr/isOk
7 мест, где используется _unsafeUnwrap() — при падении теста вместо понятной
assertion ошибки будет RuntimeError: called _unsafeUnwrap on an Err:
src/commands/addProjectTag.test.ts:27,28,50,63,66src/projectConfig/parseProjectConfig.test.ts:14,15,24src/projectConfig/serializeProjectConfig.test.ts:11,17
→ Заменить на isErr()/isOk() + if (result.isErr()) return паттерн.
5. Untested-модули (кроме UI/vscode-адаптеров)
| Модуль | Строк | Действие |
|---|---|---|
src/config.ts |
60 | После слияния frontmatterBlock.ts останется самым крупным untested модулем. Стоит покрыть: getConfigSection, getSettingDefault, ошибки при missing keys |
src/model/taskFile.ts |
46 | isTaskFileName + константы — можно быстрый unit |
Порядок работ (рекомендуемый)
- Рефакторинг — слияние
frontmatterBlock.ts→frontmatterFields.ts+ тесты - Edge case тесты — FsTaskRepository, sortTasks, buildKanbanBoard, applyRawTaskContent
- Хрупкие тесты — snapshot →
toEqual,_unsafeUnwrap→ безопасный паттерн - config.ts + taskFile.ts — unit-тесты
- todo.md — refresh боковой панели
- Интеграционный тест — полный round-trip через файл