test / test (push) Canceled after 0s
Step 4 of stage 4 (L10, L11, L13, L18, L19 and a row of
review-2026-08-followups):
- The Outbound log counts first and clamps the page to the last; a number
too large for an int (strconv's ErrRange with the largest int) is the
last page on both logs. Tested at the edges: first, last, past the last
however far, nonsense, an empty log asked for page 5.
- checkAutoMultiplier is "not within", so NaN and the infinities are out.
- rate-limited is red (components.go; the mockup first, 643892a).
- data-unsaved on both recalculate buttons: panel.js asks on submit
(ev.submitter) when a field of the page differs from what it was drawn
with; testdata/unsaved_test.js under TestPanelJS.
- HandleReload writes what a restore's first start writes - the filter
lists and the DMARC maps too - and a failed step is an error flash on
Health that names it, not plain text; the success flash says what was
written.
Tested on the test server: go vet + go test of 25 packages, make e2e (all
pass, 695 s) on this tree.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
24 lines
760 B
Go
24 lines
760 B
Go
package handlers
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/mixeme/selfpost/internal/store"
|
|
)
|
|
|
|
// An auto limit's multiplier is a number within its bounds: NaN and the
|
|
// infinities, which strconv reads, are refused like any other number out of
|
|
// range (audit 2026-10-12, L11).
|
|
func TestAutoMultiplierIsANumberInRange(t *testing.T) {
|
|
for _, raw := range []string{"NaN", "nan", "+Inf", "-Inf", "inf", "1.4", "5.1", "x"} {
|
|
if v, err := parseAutoMultiplier(raw); err == nil {
|
|
t.Errorf("%q accepted as %v", raw, v)
|
|
}
|
|
}
|
|
for raw, want := range map[string]float64{"": store.DefaultAutoMultiplier, "1.5": 1.5, " 2.5 ": 2.5, "5": 5} {
|
|
if v, err := parseAutoMultiplier(raw); err != nil || v != want {
|
|
t.Errorf("%q = %v, %v; want %v", raw, v, err, want)
|
|
}
|
|
}
|
|
}
|