samsa/internal/search/request_params_test.go
ashisgreat22 518215f62e feat(ui): dark theme redesign, fix image search and defaults
- Inline CSS in base.html (Inter, dark mode, sticky search, tabs, results)
- Remove HTMX/JS from templates; pagination via GET links
- Atmospheric side gradients + grid; wider column on large viewports
- Parse ?category= for HTML tabs (fixes Images category routing)
- Include bing_images, ddg_images, qwant_images in local_ported defaults
- Default listen port 5355; update Docker, compose, flake, README
- Favicon img uses /favicon/ proxy; preferences without inline JS

Made-with: Cursor
2026-03-23 22:49:41 +01:00

92 lines
2.4 KiB
Go

package search
import (
"net/http"
"net/http/httptest"
"net/url"
"strings"
"testing"
)
func TestParseSearchRequest_MissingQ(t *testing.T) {
r := httptest.NewRequest(http.MethodGet, "/search?format=json", nil)
_, err := ParseSearchRequest(r)
if err == nil {
t.Fatalf("expected error, got nil")
}
}
func TestParseSearchRequest_InvalidPageno(t *testing.T) {
r := httptest.NewRequest(http.MethodGet, "/search?q=hi&pageno=0", nil)
_, err := ParseSearchRequest(r)
if err == nil {
t.Fatalf("expected error for pageno, got nil")
}
}
func TestParseSearchRequest_InvalidLanguage(t *testing.T) {
r := httptest.NewRequest(http.MethodGet, "/search?q=hi&language=bad!", nil)
_, err := ParseSearchRequest(r)
if err == nil {
t.Fatalf("expected error for language, got nil")
}
}
func TestParseSearchRequest_CategoriesAndEngineData(t *testing.T) {
values := url.Values{}
values.Set("q", "hello")
values.Set("format", "json")
values.Set("categories", "general,science")
values.Set("category_science", "off")
values.Set("engines", "wikipedia,arxiv")
values.Set("engine_data-wikipedia-timeout", "123")
r := httptest.NewRequest(http.MethodPost, "/search", strings.NewReader(values.Encode()))
r.Header.Set("Content-Type", "application/x-www-form-urlencoded")
req, err := ParseSearchRequest(r)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
// categories should drop `science` due to category_science=off
wantCats := map[string]bool{"general": true}
gotCats := map[string]bool{}
for _, c := range req.Categories {
gotCats[c] = true
}
for c := range wantCats {
if !gotCats[c] {
t.Fatalf("expected category %q in result, got %v", c, req.Categories)
}
}
if gotCats["science"] {
t.Fatalf("expected category science to be removed, got %v", req.Categories)
}
if len(req.Engines) != 2 {
t.Fatalf("expected 2 engines, got %v", req.Engines)
}
if req.EngineData["wikipedia"]["timeout"] != "123" {
t.Fatalf("expected engine_data parsed, got %#v", req.EngineData)
}
}
func TestParseSearchRequest_SingularCategoryParam(t *testing.T) {
r := httptest.NewRequest(http.MethodGet, "/search?q=cats&category=images", nil)
req, err := ParseSearchRequest(r)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
found := false
for _, c := range req.Categories {
if c == "images" {
found = true
break
}
}
if !found {
t.Fatalf("expected category images from ?category=images, got %v", req.Categories)
}
}