# Vitest + Clean Architecture Refactoring ## Цель Установить Vitest, переделать архитектуру ближе к чистой (порты/адаптеры), написать нехрупкие тесты на реальные юзкейсы. ## Изменения ### Новые файлы ```txt src/ ├── ports.ts # Интерфейсы: IFileSystem, ITaskRepository, IConfigProvider ├── storage/ │ ├── FsTaskRepository.ts # ITaskRepository → зависит только от IFileSystem, markdown, uuid │ ├── VscodeConfigProvider.ts # IConfigProvider → зависит от vscode │ └── NodeFileSystem.ts # IFileSystem → обёртка над fs.promises tests/ ├── utils/ │ ├── markdown.test.ts │ └── uuid.test.ts ├── storage/ │ ├── FsTaskRepository.test.ts │ └── helpers/ │ └── InMemoryFileSystem.ts ``` ### Удалить - `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 | InMemoryFileSystem (Map) | CRUD, фильтрация по extension, контент файла | | markdown | — | parse, serialize, round-trip, default-ы | | uuid | — | валидный формат, уникальность | | InMemoryFileSystem | — | read/write/readdir/mkdir | ## Что НЕ тестируем (пока) - NodeFileSystem — тривиальная обёртка - VscodeConfigProvider — требует Extension Host - TaskTreeProvider — UI, требует Extension Host