Files
jellybit/internal/tgbot/render_delete_test.go
T
av 288be8ec34 web-ui: добавлена страница группового удаления загрузок
- выбор → поимённое подтверждение → отчёт: пачка до 20 загрузок, гарды входа
  на обеих границах, потолок времени и остановка после трёх подряд отказов
  внешнего сервиса
- допуск полного удаления сведён в единую точку store.State.CanDelete() —
  worker, страница загрузки и Telegram больше не держат своих перечней
2026-08-10 17:43:36 +03:00

44 lines
1.4 KiB
Go

package tgbot
import (
"strings"
"testing"
"git.vakhrushev.me/av/jellybit/internal/store"
)
// Кнопка «Удалить» приходит ровно в тех состояниях, где домен допускает полное
// удаление. Транспорт своего перечня состояний не держит: разъехавшись с
// доменом, он показал бы кнопку, ведущую в конфликт, — или спрятал бы
// доступное действие.
func TestRenderCard_DeleteButtonFollowsCanDelete(t *testing.T) {
b, _, _, _ := newTestBot(t, []int64{7})
all := []store.State{
store.StateCatched, store.StateDownloading, store.StateCompleted,
store.StateRecognizing, store.StateReview, store.StateLinking,
store.StateDone, store.StateDeferred, store.StateStuck,
store.StateFailed, store.StateCancelled, store.StateReverted,
store.StateTargetMissing, store.StateOrphaned, store.StateDeleted,
}
for _, st := range all {
rd := reviewData(st)
_, kb := b.renderCard(rd)
found := false
if kb != nil {
for _, row := range kb.InlineKeyboard {
for _, btn := range row {
if btn.CallbackData != nil && strings.HasPrefix(*btn.CallbackData, "delete:") {
found = true
}
}
}
}
if want := st.CanDelete(); found != want {
t.Errorf("%s: кнопка удаления=%v, CanDelete=%v", st, found, want)
}
}
}