TestIntegrationFileStores покрывает файлы (upload/stat/download/move/copy/rename/delete) и
create/delete папок, но не покрывает операции над самими папками и не гоняет фасад.
Работа (TDD: сначала падающий тест)
Расширить live-набор file_store_integration_test.go для REST и DAV: Stat(folder), Rename(folder), Move(folder в другую папку), Delete(folder) (через store.Delete), List(folder) после каждого шага. Папки — throwaway, чистить за собой.
Новый TestIntegrationFacadeCRUD: через c.Files() (фасад) создать папку, загрузить файл, Stat/List, Rename, Move, Copy, Delete; проверить Entry.Provider (write→REST).
Если адаптеры падают на rename/move папки — починить (file_rest.go/file_dav.go), не ослаблять тест.
SQL — read-only: отдельно проверить, что write-методы дают ErrReadOnly (на фасаде).
Критерии
Все операции над папками (create/stat/list/rename/move/copy/delete) зелёные для REST и DAV на живом портале.
Фасадный CRUD — зелёный; write идёт в REST, чтение — по readOrder.
Вывод тестов приложен; мусор убран.
Эпик: #53
## W5 — CRUD/rename/move папок + фасадный CRUD (TDD, live)
### Проблема
`TestIntegrationFileStores` покрывает **файлы** (upload/stat/download/move/copy/rename/delete) и
create/delete **папок**, но не покрывает операции над самими папками и не гоняет фасад.
### Работа (TDD: сначала падающий тест)
1. Расширить live-набор `file_store_integration_test.go` для REST **и** DAV:
`Stat(folder)`, `Rename(folder)`, `Move(folder в другую папку)`, `Delete(folder)` (через `store.Delete`),
`List(folder)` после каждого шага. Папки — throwaway, чистить за собой.
2. Новый `TestIntegrationFacadeCRUD`: через `c.Files()` (фасад) создать папку, загрузить файл,
`Stat`/`List`, `Rename`, `Move`, `Copy`, `Delete`; проверить `Entry.Provider` (write→REST).
3. Если адаптеры падают на rename/move папки — **починить** (`file_rest.go`/`file_dav.go`), не ослаблять тест.
4. SQL — read-only: отдельно проверить, что write-методы дают `ErrReadOnly` (на фасаде).
### Критерии
- [ ] Все операции над папками (create/stat/list/rename/move/copy/delete) зелёные для REST и DAV на живом портале.
- [ ] Фасадный CRUD — зелёный; write идёт в REST, чтение — по `readOrder`.
- [ ] Вывод тестов приложен; мусор убран.
Живой тест папок REST+DAV — TestIntegrationFileStores расширен: Stat(folder), List(folder), Rename(folder), Move(folder в другую папку), Delete(folder) через store.Delete. Дочерний файл проверяет, что содержимое переживает rename+move; папки throwaway, чистятся в t.Cleanup.
Фасадный live-тест — новый TestIntegrationFacadeCRUD через c.Files(): create folder / upload / stat / list / rename / move / copy / delete; проверены Entry.Provider (write → rest) и Write()/Read() по readOrder.
SQL read-only на фасаде — TestFileClientWriteToReadOnlyStore: write-методы фасада поверх read-only pgStore дают ErrReadOnly.
Прод-фикс — file_rest.go: REST-адаптер умел только файлы (GetFile/MoveFiles/RenameFile/DeleteFiles). TDD-прогон дал падение TestIntegrationFileStores/rest на Stat(folder). Добавлены stat/split; папки идут через ListDavFolder, RenameDavFolder, MoveDavItems/CopyDavItems/DeleteDavItems.
copyEventually — ретрай асинхронного copy (в духе существующих move/rename); портал периодически отдаёт 429, поэтому тест сделан устойчивым без ослабления проверок.
Тесты (имена + pass)
go test ./... → ok (все пакеты)
go test -tags=integration -run 'TestIntegrationFileStores|TestIntegrationFacadeCRUD' -v .
--- PASS: TestIntegrationFacadeCRUD (2.51s)
--- PASS: TestIntegrationFileStores (14.08s)
--- PASS: TestIntegrationFileStores/rest (7.88s)
--- PASS: TestIntegrationFileStores/dav (5.56s)
PASS
Прогон 3× стабильно зелёный, мусор убран (проекты с префиксом go-onlyoffice-test-).
Артефакты
Branch: test/w5-folder-crud#62
Commits: 932cd28 fix(files): REST FileStore resolves folders for stat/rename/move/delete (#62); 9cd157c test(files): live CRUD папок + фасадный CRUD (#62)
HEAD SHA: 9cd157c59f550707f416d04e7c9a177a5bafaf1a
go test -tags=integration ./... остаётся красным на пред-существующем cmd/office/fetch/task_integration_test.go (loader.TaskFields undefined) — не трогал, вне задачи.
## W5 — отчёт
**Статус: готово, PR открыт (#66), не мержен.**
### Что сделано
- **Живой тест папок REST+DAV** — `TestIntegrationFileStores` расширен: `Stat(folder)`, `List(folder)`, `Rename(folder)`, `Move(folder в другую папку)`, `Delete(folder)` через `store.Delete`. Дочерний файл проверяет, что содержимое переживает rename+move; папки throwaway, чистятся в `t.Cleanup`.
- **Фасадный live-тест** — новый `TestIntegrationFacadeCRUD` через `c.Files()`: create folder / upload / stat / list / rename / move / copy / delete; проверены `Entry.Provider` (write → `rest`) и `Write()/Read()` по `readOrder`.
- **SQL read-only на фасаде** — `TestFileClientWriteToReadOnlyStore`: write-методы фасада поверх read-only `pgStore` дают `ErrReadOnly`.
- **Прод-фикс** — `file_rest.go`: REST-адаптер умел только файлы (`GetFile`/`MoveFiles`/`RenameFile`/`DeleteFiles`). TDD-прогон дал падение `TestIntegrationFileStores/rest` на `Stat(folder)`. Добавлены `stat`/`split`; папки идут через `ListDavFolder`, `RenameDavFolder`, `MoveDavItems`/`CopyDavItems`/`DeleteDavItems`.
- `copyEventually` — ретрай асинхронного copy (в духе существующих move/rename); портал периодически отдаёт 429, поэтому тест сделан устойчивым без ослабления проверок.
### Тесты (имена + pass)
```
go test ./... → ok (все пакеты)
go test -tags=integration -run 'TestIntegrationFileStores|TestIntegrationFacadeCRUD' -v .
--- PASS: TestIntegrationFacadeCRUD (2.51s)
--- PASS: TestIntegrationFileStores (14.08s)
--- PASS: TestIntegrationFileStores/rest (7.88s)
--- PASS: TestIntegrationFileStores/dav (5.56s)
PASS
```
Прогон 3× стабильно зелёный, мусор убран (проекты с префиксом `go-onlyoffice-test-`).
### Артефакты
- Branch: `test/w5-folder-crud#62`
- Commits: `932cd28` fix(files): REST FileStore resolves folders for stat/rename/move/delete (#62); `9cd157c` test(files): live CRUD папок + фасадный CRUD (#62)
- HEAD SHA: `9cd157c59f550707f416d04e7c9a177a5bafaf1a`
- PR: https://git.produktor.io/eSlider/go-onlyoffice/pulls/66
- gitleaks: no leaks (`origin/main..HEAD`).
### Блокеры/замечания
- `go test -tags=integration ./...` остаётся красным на пред-существующем `cmd/office/fetch/task_integration_test.go` (`loader.TaskFields undefined`) — не трогал, вне задачи.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Эпик: #53
W5 — CRUD/rename/move папок + фасадный CRUD (TDD, live)
Проблема
TestIntegrationFileStoresпокрывает файлы (upload/stat/download/move/copy/rename/delete) иcreate/delete папок, но не покрывает операции над самими папками и не гоняет фасад.
Работа (TDD: сначала падающий тест)
file_store_integration_test.goдля REST и DAV:Stat(folder),Rename(folder),Move(folder в другую папку),Delete(folder)(черезstore.Delete),List(folder)после каждого шага. Папки — throwaway, чистить за собой.TestIntegrationFacadeCRUD: черезc.Files()(фасад) создать папку, загрузить файл,Stat/List,Rename,Move,Copy,Delete; проверитьEntry.Provider(write→REST).file_rest.go/file_dav.go), не ослаблять тест.ErrReadOnly(на фасаде).Критерии
readOrder.W5 — отчёт
Статус: готово, PR открыт (#66), не мержен.
Что сделано
TestIntegrationFileStoresрасширен:Stat(folder),List(folder),Rename(folder),Move(folder в другую папку),Delete(folder)черезstore.Delete. Дочерний файл проверяет, что содержимое переживает rename+move; папки throwaway, чистятся вt.Cleanup.TestIntegrationFacadeCRUDчерезc.Files(): create folder / upload / stat / list / rename / move / copy / delete; провереныEntry.Provider(write →rest) иWrite()/Read()поreadOrder.TestFileClientWriteToReadOnlyStore: write-методы фасада поверх read-onlypgStoreдаютErrReadOnly.file_rest.go: REST-адаптер умел только файлы (GetFile/MoveFiles/RenameFile/DeleteFiles). TDD-прогон дал падениеTestIntegrationFileStores/restнаStat(folder). Добавленыstat/split; папки идут черезListDavFolder,RenameDavFolder,MoveDavItems/CopyDavItems/DeleteDavItems.copyEventually— ретрай асинхронного copy (в духе существующих move/rename); портал периодически отдаёт 429, поэтому тест сделан устойчивым без ослабления проверок.Тесты (имена + pass)
Прогон 3× стабильно зелёный, мусор убран (проекты с префиксом
go-onlyoffice-test-).Артефакты
test/w5-folder-crud#62932cd28fix(files): REST FileStore resolves folders for stat/rename/move/delete (#62);9cd157ctest(files): live CRUD папок + фасадный CRUD (#62)9cd157c59f550707f416d04e7c9a177a5bafaf1aorigin/main..HEAD).Блокеры/замечания
go test -tags=integration ./...остаётся красным на пред-существующемcmd/office/fetch/task_integration_test.go(loader.TaskFields undefined) — не трогал, вне задачи.