34 lines
996 B
Go
34 lines
996 B
Go
package web
|
|
|
|
import (
|
|
"net/http/httptest"
|
|
"net/url"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestFormBool(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
values url.Values
|
|
want bool
|
|
}{
|
|
{name: "missing", values: url.Values{}, want: false},
|
|
{name: "hidden unchecked value", values: url.Values{"enabled": {"false"}}, want: false},
|
|
{name: "hidden and checked values", values: url.Values{"enabled": {"false", "true"}}, want: true},
|
|
{name: "checked value first", values: url.Values{"enabled": {"true", "false"}}, want: true},
|
|
{name: "browser checkbox value", values: url.Values{"enabled": {"on"}}, want: true},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
body := tt.values.Encode()
|
|
req := httptest.NewRequest("POST", "/", strings.NewReader(body))
|
|
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
|
if got := formBool(req, "enabled"); got != tt.want {
|
|
t.Fatalf("formBool() = %t, want %t for %q", got, tt.want, body)
|
|
}
|
|
})
|
|
}
|
|
}
|