check / check (push) Waiting to run
Target.MaxRetries (max_retries) becomes Target.MaxAttempts (max_attempts), and the form field, parser and ceiling are renamed to match. 1 is a single attempt with no circuit breaker; above 1 retries behind the breaker up to that many attempts. Both target forms refuse 0 and less; a blank field on the add target form gives 1, and on the edit form keeps the stored value. The target page shows the plain number, and the README's two paragraphs on 0 against 1 become one sentence. Model: opus-5-5
67 lines
1.7 KiB
Go
67 lines
1.7 KiB
Go
package handlers_test
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// TestHandleTargetToggle_DoesNotUndoAnEdit proves that a toggle which
|
|
// loaded the target before an edit of it was saved does not write the
|
|
// old name and settings back over the edit. The edit is submitted from
|
|
// a callback on the toggle's own read of the target, so it is saved
|
|
// after that read and before the toggle writes.
|
|
func TestHandleTargetToggle_DoesNotUndoAnEdit(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
env := setupSourceTest(t)
|
|
wh, tgt := seedHTTPTarget(t, env, "", "")
|
|
require.True(t, tgt.Active)
|
|
|
|
var (
|
|
edited bool
|
|
editCode int
|
|
)
|
|
|
|
require.NoError(t, env.db.DB().Callback().Query().
|
|
After("gorm:query").
|
|
Register("test:edit_after_toggle_read", func(tx *gorm.DB) {
|
|
// The edit reads the target too; only the toggle's read,
|
|
// the first, submits it.
|
|
if tx.Statement.Table != "targets" || edited {
|
|
return
|
|
}
|
|
|
|
edited = true
|
|
editCode = submitTargetEdit(
|
|
env, wh.ID, tgt.ID,
|
|
editForm(editReplacedURL, "", ""),
|
|
).Code
|
|
}),
|
|
)
|
|
|
|
req := postRequest(
|
|
"/hook/"+wh.ID+"/targets/"+tgt.ID+"/toggle",
|
|
env.cookies,
|
|
map[string]string{paramSourceID: wh.ID, paramTargetID: tgt.ID},
|
|
)
|
|
w := httptest.NewRecorder()
|
|
|
|
env.handlers.HandleTargetToggle().ServeHTTP(w, req)
|
|
|
|
require.Equal(t, http.StatusSeeOther, w.Code)
|
|
require.Equal(t, http.StatusSeeOther, editCode)
|
|
|
|
stored := storedTarget(t, env, tgt.ID)
|
|
assert.False(t, stored.Active)
|
|
assert.Equal(t, "edited-name", stored.Name)
|
|
assert.Equal(t, 5, stored.MaxAttempts)
|
|
assert.Equal(
|
|
t, editReplacedURL, storedHTTPConfig(t, env, tgt.ID).URL,
|
|
)
|
|
}
|