Files
cv-site/internal/httputil/request_test.go
T
juanatsap 2c7f8de242 refactor: centralize constants and reorganize documentation
- 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)
2025-12-06 16:27:12 +00:00

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)
}
})
}
}