2c7f8de242
- Create internal/constants package with all hardcoded values (environment, cookies, themes, headers, routes, cache) - Create internal/httputil package for HTTP helper functions - Update all handlers and middleware to use centralized constants - Reorganize documentation with numbered prefixes (00-26) - Remove duplicate docs from validation folder and docs/ - Delete handlers/constants.go (moved to internal/constants)
110 lines
2.7 KiB
Go
110 lines
2.7 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|