109 lines
4.6 KiB
Markdown
109 lines
4.6 KiB
Markdown
# Аудит и план доработок
|
|
|
|
## 1. Невыполненный пункт todo.md
|
|
|
|
> ✅ **Выполнено**
|
|
|
|
Добавлен `vscode.workspace.onDidChangeConfiguration` в `extension.ts` — при
|
|
изменении `xboctukFlow.*` настроек пересоздаются file watchers и вызывается
|
|
`tree.refresh()`.
|
|
|
|
---
|
|
|
|
## 2. Рефакторинг: слияние frontmatterBlock.ts → frontmatterFields.ts
|
|
|
|
> ✅ **Выполнено**
|
|
|
|
- `frontmatterBlock.ts` удалён, логика перенесена в `frontmatterFields.ts`
|
|
- Обновлены импорты в `validateFrontmatter.ts` и `parseTaskTags.ts`
|
|
- Написаны 7 unit-тестов на `extractFrontmatterBlock`
|
|
|
|
---
|
|
|
|
## 3. Тесты на edge cases
|
|
|
|
> ✅ **Выполнено** — добавлено 14 тестов + интеграционный тест.
|
|
|
|
| Модуль | Что добавили |
|
|
| ------------------------------- | --------------------------------------------------------------------- |
|
|
| `dashboard/sortTasks` | пустой массив, одинаковые created, invalid даты |
|
|
| `kanban/buildKanbanBoard` | одинаковые updated (стабильность) |
|
|
| `storage/FsTaskRepository` | кириллица, title 80 символов, спецсимволы в тегах, slug для Fix___bug |
|
|
| `dashboard/applyRawTaskContent` | разный порядок полей, пустое body |
|
|
| `dashboard/buildDashboardView` | пустой массив |
|
|
| `dashboard/groupTasks` | неизвестный статус/приоритет |
|
|
| `dashboard/filterTasks` | пустой массив |
|
|
| `FsTaskRepository` | интеграционный: create → file → parse → сверка |
|
|
|
|
---
|
|
|
|
## 4. rename: TODO → OPEN + UNKNOWN
|
|
|
|
> ✅ **Выполнено**
|
|
|
|
- `TaskStatus.TODO` → `TaskStatus.OPEN` (wire: `"open"`)
|
|
- Добавлены `TaskStatus.UNKNOWN` и `TaskPriority.UNKNOWN`
|
|
- Невалидные статусы/приоритеты при парсинге → `UNKNOWN` (решает проблему
|
|
невидимых задач в groupTasks)
|
|
- `normalizeTaskStatus` / `normalizeTaskPriority` в `utils/markdown.ts`
|
|
- `defaultHidden: true` для UNKNOWN (как backlog/cancelled)
|
|
|
|
---
|
|
|
|
## 5. Хрупкие тесты
|
|
|
|
> ✅ **Выполнено**
|
|
|
|
### Snapshot-тесты
|
|
|
|
- Оставлены `toMatchSnapshot()` как есть (сознательное решение — обновляются
|
|
через `--update`).
|
|
|
|
### `_unsafeUnwrap()` → безопасный паттерн
|
|
|
|
- `addProjectTag.test.ts` — 3 места
|
|
- `parseProjectConfig.test.ts` — 2 места
|
|
- `serializeProjectConfig.test.ts` — 2 места
|
|
|
|
Все заменены на `isOk()/isErr()` + ранний return.
|
|
|
|
---
|
|
|
|
## 6. Untested-модули
|
|
|
|
> ✅ **Выполнено**
|
|
|
|
**`config.test.ts`** — 4 теста:
|
|
|
|
- `getConfigSection` возвращает непустую строку
|
|
- `getSettingDefault` для обоих ключей
|
|
- ошибка при missing key
|
|
|
|
**`taskFile.test.ts`** — 6 тестов:
|
|
|
|
- extension и language id — непустые строки
|
|
- `MAX_TASK_TITLE_LENGTH` — положительное число
|
|
- `isTaskFileName` — корректно проверяет расширение
|
|
|
|
---
|
|
|
|
## 7. Сырые строки → константы в тестах
|
|
|
|
> ✅ **Выполнено**
|
|
|
|
Во всех тестовых файлах `"open"`/`"done"`/`"in-progress"`/`"unknown"` и
|
|
приоритеты заменены на `TaskStatus.*` / `TaskPriority.*`. Serialization-ассерты
|
|
(`toContain("status: open")`) и YAML-фикстуры оставлены как есть.
|
|
|
|
---
|
|
|
|
## Текущий статус
|
|
|
|
- [x] **Рефакторинг** — `frontmatterBlock.ts` → `frontmatterFields.ts` + тесты
|
|
- [x] **Edge case тесты** — 14 тестов + интеграционный
|
|
- [x] **rename TODO → OPEN + UNKNOWN**
|
|
- [x] **Хрупкие тесты** — snapshot оставлены, `_unsafeUnwrap` заменён
|
|
- [x] **config.ts + taskFile.ts** — unit-тесты
|
|
- [x] **todo.md** — refresh боковой панели
|
|
- [x] **Сырые строки → константы** в тестах
|