Живой интеграционный тест файлового dedup + две починки, вскрытые на портале.
Тест
TestIntegrationFileDedup (//go:build integration): throwaway-проект
(go-onlyoffice-test-*, удаляется в cleanup) → две папки + project root →
дубли одного stem|ext (в т.ч. дубль в одну папку) → FindProjectDuplicates (within + cross) находит группу → DeleteFilesByDedupKey/ApplyDedupGroups удаляют лишние →
survivor и удаления подтверждены polling-ом.
Проверка IsTrashFolderTitle и mergeProjectRootForDedupe на живом дереве
(root ровно один раз, root-файлы входят в cross-группу).
fix(files): пропускать пустой dedup-ключ (dotfiles) — .env/.gitignore
и т.п. дают FileDedupKey="", и within/cross считали их группой дублей и
удаляли лишние. + unit TestFindDuplicatesSkipsEmptyKey.
fix(files): ретраить transient-ответы при удалении файлов — DeleteDavItems (ApplyDedupGroups/DeleteFilesByDedupKey) не шёл через DoRetry и падал на 429.
Как проверено
go build ./... — зелёный.
go test -tags=integration -run TestIntegrationFileDedup -v . — PASS (дважды).
Unit TestFileDedupKey|TestFindFilesByDedupKey|TestFindWithinFolderDuplicates|TestCrossFolderPrefersNonTrash|TestMergeProjectRootForDedupe|TestIsTrashFolderTitle|TestFindDuplicatesSkipsEmptyKey — PASS.
Throwaway-проекты после прогона не остаются (проверено).
## Что сделано (W6/#63)
Живой интеграционный тест файлового dedup + две починки, вскрытые на портале.
### Тест
- `TestIntegrationFileDedup` (`//go:build integration`): throwaway-проект
(`go-onlyoffice-test-*`, удаляется в cleanup) → две папки + project root →
дубли одного stem|ext (в т.ч. дубль в одну папку) →
`FindProjectDuplicates` (within + cross) находит группу →
`DeleteFilesByDedupKey`/`ApplyDedupGroups` удаляют лишние →
survivor и удаления подтверждены polling-ом.
- Проверка `IsTrashFolderTitle` и `mergeProjectRootForDedupe` на живом дереве
(root ровно один раз, root-файлы входят в cross-группу).
- Setup-запросы (create folder/upload) ретраят временный post-create 500
портала — не ослабляет ассерты.
### Починки
- `fix(files): пропускать пустой dedup-ключ (dotfiles)` — `.env`/`.gitignore`
и т.п. дают `FileDedupKey=""`, и within/cross считали их группой дублей и
удаляли лишние. + unit `TestFindDuplicatesSkipsEmptyKey`.
- `fix(files): ретраить transient-ответы при удалении файлов` —
`DeleteDavItems` (ApplyDedupGroups/DeleteFilesByDedupKey) не шёл через
`DoRetry` и падал на 429.
### Как проверено
- `go build ./...` — зелёный.
- `go test -tags=integration -run TestIntegrationFileDedup -v .` — PASS (дважды).
- Unit `TestFileDedupKey|TestFindFilesByDedupKey|TestFindWithinFolderDuplicates|TestCrossFolderPrefersNonTrash|TestMergeProjectRootForDedupe|TestIsTrashFolderTitle|TestFindDuplicatesSkipsEmptyKey` — PASS.
- Throwaway-проекты после прогона не остаются (проверено).
Файлы без stem (.env, .gitignore, .npmrc) давали FileDedupKey="", и
findWithinFolderDuplicates/findCrossFolderDuplicates считали их одной
группой дублей и удаляли лишние. Пустой ключ больше не образует группу.
DeleteDavItems (через ApplyDedupGroups/DeleteFilesByDedupKey) ходил в
deleteJSON напрямую и падал на 429/502/503/504. Теперь каждый delete идёт
через DoRetry, как остальные bulk-пути.
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.
Что сделано (W6/#63)
Живой интеграционный тест файлового dedup + две починки, вскрытые на портале.
Тест
TestIntegrationFileDedup(//go:build integration): throwaway-проект(
go-onlyoffice-test-*, удаляется в cleanup) → две папки + project root →дубли одного stem|ext (в т.ч. дубль в одну папку) →
FindProjectDuplicates(within + cross) находит группу →DeleteFilesByDedupKey/ApplyDedupGroupsудаляют лишние →survivor и удаления подтверждены polling-ом.
IsTrashFolderTitleиmergeProjectRootForDedupeна живом дереве(root ровно один раз, root-файлы входят в cross-группу).
портала — не ослабляет ассерты.
Починки
fix(files): пропускать пустой dedup-ключ (dotfiles)—.env/.gitignoreи т.п. дают
FileDedupKey="", и within/cross считали их группой дублей иудаляли лишние. + unit
TestFindDuplicatesSkipsEmptyKey.fix(files): ретраить transient-ответы при удалении файлов—DeleteDavItems(ApplyDedupGroups/DeleteFilesByDedupKey) не шёл черезDoRetryи падал на 429.Как проверено
go build ./...— зелёный.go test -tags=integration -run TestIntegrationFileDedup -v .— PASS (дважды).TestFileDedupKey|TestFindFilesByDedupKey|TestFindWithinFolderDuplicates|TestCrossFolderPrefersNonTrash|TestMergeProjectRootForDedupe|TestIsTrashFolderTitle|TestFindDuplicatesSkipsEmptyKey— PASS.