package handlers import ( "net/http" "net/http/httptest" "strings" "testing" "codeberg.org/mihna123/openstore/internal/config" ) func newTestConfig() *config.Config { return &config.Config{ Serve: config.Serve{Addr: ":3000"}, Instance: config.Instance{ Name: "TestStore", ContactEmail: "test@store.com", BaseURL: "https://test.store.com", }, } } func get(t *testing.T, mux *http.ServeMux, method, path string) *httptest.ResponseRecorder { t.Helper() rec := httptest.NewRecorder() mux.ServeHTTP(rec, httptest.NewRequest(method, path, nil)) return rec } func TestRoutes(t *testing.T) { mux := Routes(newTestConfig()) tests := []struct { name string method string path string want int }{ {"home", http.MethodGet, "/", http.StatusOK}, {"unknown path", http.MethodGet, "/nonsense", http.StatusNotFound}, {"wrong method on home", http.MethodPost, "/", http.StatusMethodNotAllowed}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { rec := get(t, mux, tt.method, tt.path) if rec.Code != tt.want { t.Errorf("%s %s: got status %d, want %d", tt.method, tt.path, rec.Code, tt.want) } }) } } func TestHomeRendersInstanceName(t *testing.T) { cfg := newTestConfig() cfg.Instance.Name = "Prodavnica123" mux := Routes(cfg) rec := get(t, mux, http.MethodGet, "/") if rec.Code != http.StatusOK { t.Fatalf("got status %d, want 200", rec.Code) } body := rec.Body.String() if strings.Count(body, "Prodavnica123") != 2 { t.Errorf("instance name should appear in title and heading, got:\n%s", body) } if ct := rec.Header().Get("Content-Type"); !strings.HasPrefix(ct, "text/html") { t.Errorf("got Content-Type %q, want text/html", ct) } } func TestHomeEscapesInstanceName(t *testing.T) { cfg := newTestConfig() cfg.Instance.Name = `` mux := Routes(cfg) body := get(t, mux, http.MethodGet, "/").Body.String() if strings.Contains(body, "