Files
cv-site/internal/httputil/request_test.go
T

110 lines
2.7 KiB
Go
Raw Normal View History

package httputil
import (
"net/http"
"net/http/httptest"
"testing"
)
func TestLang(t *testing.T) {
tests := []struct {
name string
query string
expected string
}{
{"Empty returns default", "", "en"},
{"English", "?lang=en", "en"},
{"Spanish", "?lang=es", "es"},
{"Invalid returns default", "?lang=fr", "en"},
{"Unknown returns default", "?lang=xyz", "en"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
req := httptest.NewRequest(http.MethodGet, "/"+tt.query, nil)
got := Lang(req)
if got != tt.expected {
t.Errorf("Lang() = %q, want %q", got, tt.expected)
}
})
}
}
func TestLangOrError(t *testing.T) {
tests := []struct {
name string
query string
expected string
ok bool
}{
{"Empty returns default", "", "en", true},
{"English", "?lang=en", "en", true},
{"Spanish", "?lang=es", "es", true},
{"Invalid returns error", "?lang=fr", "", false},
{"Unknown returns error", "?lang=xyz", "", false},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
req := httptest.NewRequest(http.MethodGet, "/"+tt.query, nil)
got, ok := LangOrError(req)
if ok != tt.ok {
t.Errorf("LangOrError() ok = %v, want %v", ok, tt.ok)
}
if got != tt.expected {
t.Errorf("LangOrError() = %q, want %q", got, tt.expected)
}
})
}
}
func TestQuery(t *testing.T) {
tests := []struct {
name string
query string
key string
defaultVal string
expected string
}{
{"Returns value", "?foo=bar", "foo", "default", "bar"},
{"Returns default when missing", "", "foo", "default", "default"},
{"Returns default when empty", "?foo=", "foo", "default", "default"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
req := httptest.NewRequest(http.MethodGet, "/"+tt.query, nil)
got := Query(req, tt.key, tt.defaultVal)
if got != tt.expected {
t.Errorf("Query() = %q, want %q", got, tt.expected)
}
})
}
}
func TestQueryOneOf(t *testing.T) {
allowed := []string{"short", "long"}
tests := []struct {
name string
query string
defaultVal string
expected string
}{
{"Returns valid value", "?length=short", "short", "short"},
{"Returns valid value 2", "?length=long", "short", "long"},
{"Returns default when invalid", "?length=medium", "short", "short"},
{"Returns default when empty", "", "short", "short"},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
req := httptest.NewRequest(http.MethodGet, "/"+tt.query, nil)
got := QueryOneOf(req, "length", allowed, tt.defaultVal)
if got != tt.expected {
t.Errorf("QueryOneOf() = %q, want %q", got, tt.expected)
}
})
}
}