W5 — CRUD/rename/move папок + фасадный CRUD (TDD, live) #62

Closed
opened 2026-09-16 22:37:21 +01:00 by eSlider · 1 comment
Owner

Эпик: #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.
  • Вывод тестов приложен; мусор убран.
Эпик: #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`. - [ ] Вывод тестов приложен; мусор убран.
Author
Owner

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: #66
  • gitleaks: no leaks (origin/main..HEAD).

Блокеры/замечания

  • 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`) — не трогал, вне задачи.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: eSlider/go-onlyoffice#62