web-ui: добавлена страница группового удаления загрузок

- выбор → поимённое подтверждение → отчёт: пачка до 20 загрузок, гарды входа
  на обеих границах, потолок времени и остановка после трёх подряд отказов
  внешнего сервиса
- допуск полного удаления сведён в единую точку store.State.CanDelete() —
  worker, страница загрузки и Telegram больше не держат своих перечней
This commit is contained in:
av
2026-08-10 17:43:36 +03:00
parent a7c1efd8eb
commit 288be8ec34
35 changed files with 3185 additions and 31 deletions
+19
View File
@@ -683,3 +683,22 @@ func TestIsObservable(t *testing.T) {
t.Error("failed должно быть терминальным и при этом наблюдаемым")
}
}
// TestCanDelete: допуск полного удаления — единый дом перечня состояний, на
// который смотрят и ядро, и все транспорты. Перебираем ВСЕ состояния: новое
// состояние, попавшее в перечень молча, тест покажет.
func TestCanDelete(t *testing.T) {
deletable := []State{StateDone, StateOrphaned, StateTargetMissing}
for _, s := range allStates {
want := slices.Contains(deletable, s)
if got := s.CanDelete(); got != want {
t.Errorf("%s: CanDelete=%v, want %v", s, got, want)
}
}
// deleted терминально и удалению не подлежит — иначе повторная отправка
// формы группового удаления сносила бы уже снесённое второй раз.
if StateDeleted.CanDelete() {
t.Error("deleted не должно допускать удаление")
}
}