test: E2E перезапуск задачи /retry из различных состояний
Some checks failed
CI / test (push) Failing after 35s
CI / build-and-package (amd64, linux) (push) Successful in 44s
CI / build-and-package (amd64, windows) (push) Successful in 41s

Позитивный блок (задача перезапускается и доходит до success):
  collecting, ready, failed, timeout
Негативный блок (завершённые состояния нельзя перезапускать — только /start):
  success, cancelled → /retry отклоняется понятным сообщением

fix: handleRetry валидирует терминальные статусы (success/cancelled/aborted/
closed) и отвечает «нельзя перезапустить», вместо падения ErrInvalidStatus
This commit is contained in:
Hermes
2026-08-17 18:24:19 +05:00
parent a8a2de12c3
commit f12ff04966
2 changed files with 641 additions and 0 deletions

View File

@@ -188,6 +188,16 @@ func (c *Core) handleRetry(ctx context.Context, rest string) (Result, error) {
if err != nil {
return c.notFoundReply(ctx, id, err)
}
// Завершённые задачи (success/cancelled/aborted/closed) перезапускать нельзя:
// переход → collecting для них невалиден. Только новая задача через /start.
if storage.IsTerminal(task.Status) {
return Result{
Reply: "Задачу #" + itoa(id) + " нельзя перезапустить — она завершена (" + string(task.Status) + "). Создайте новую через /start.",
Action: "send",
TaskID: id,
Status: task.Status,
}, nil
}
task.Status = storage.StatusCollecting
if err := c.Store.ClearHistory(ctx, id); err != nil {
return Result{}, err