test: E2E перезапуск задачи /retry из различных состояний
Позитивный блок (задача перезапускается и доходит до success): collecting, ready, failed, timeout Негативный блок (завершённые состояния нельзя перезапускать — только /start): success, cancelled → /retry отклоняется понятным сообщением fix: handleRetry валидирует терминальные статусы (success/cancelled/aborted/ closed) и отвечает «нельзя перезапустить», вместо падения ErrInvalidStatus
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user