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