Files
xboct-flow/docs/REFACTOR-AND-TEST.md

2.5 KiB
Raw Permalink Blame History

Vitest + Clean Architecture Refactoring

Статус: выполнено / архив
План закрыт, дальше не ведём и не обновляем. Исторический снимок задачи.

Цель

Установить Vitest, переделать архитектуру ближе к чистой (порты/адаптеры), написать нехрупкие тесты на реальные юзкейсы.

Изменения

Новые файлы

src/
├── ports.ts                    # Интерфейсы: IFileSystem, ITaskRepository, IConfigProvider
├── storage/
│   ├── FsTaskRepository.ts     # ITaskRepository → зависит только от IFileSystem, markdown, uuid
│   ├── FsTaskRepository.test.ts # unit (sociable) — colocation с модулем
│   ├── VscodeConfigProvider.ts # IConfigProvider → зависит от vscode
│   └── NodeFileSystem.ts       # IFileSystem → обёртка над fs.promises
├── utils/
│   └── markdown.test.ts        # unit — colocation

tests/
└── helpers/
    └── InMemoryFileSystem.ts   # shared fakes; integration/e2e — сюда же позже

Удалить

  • src/storage/taskStore.ts
  • src/storage/configStore.ts

Изменить

  • src/views/taskTreeProvider.ts — конструктор принимает ITaskRepository + IConfigProvider
  • src/extension.ts — сборка зависимостей (DI)

Инфраструктура

  • npm i -D vitest
  • vitest.config.ts
  • package.json — скрипты test, test:run

Тесты

Тест Где I/O Что проверяет
FsTaskRepository src/storage/*.test.ts InMemoryFileSystem (Map) CRUD, фильтрация по extension, контент файла
markdown src/utils/*.test.ts parse, serialize, round-trip, default-ы

Unit/sociable unit — рядом с модулем (src/**/*.test.ts).
Shared fakes и будущие integration/e2e — в tests/.

Что НЕ тестируем (пока)

  • NodeFileSystem — тривиальная обёртка
  • VscodeConfigProvider — требует Extension Host
  • TaskTreeProvider — UI, требует Extension Host