package app import ( "io" "net/http" "net/http/httptest" "strings" "testing" ) func TestAdminTabs(t *testing.T) { srv := newTestServer(t) handler := srv.Routes() cookie := loginCookie(t, handler) req := httptest.NewRequest(http.MethodGet, "/admin", nil) req.AddCookie(cookie) rec := httptest.NewRecorder() handler.ServeHTTP(rec, req) if rec.Code != http.StatusSeeOther || rec.Header().Get("Location") != "/admin/main" { t.Fatalf("expected /admin to redirect to /admin/main, got %d %q", rec.Code, rec.Header().Get("Location")) } for _, test := range []struct { path string want string }{ {"/admin/main", "Main Content"}, {"/admin/projects", "Add Project"}, {"/admin/services", "Add service"}, {"/admin/contact-details", "Contact Requests"}, } { req := httptest.NewRequest(http.MethodGet, test.path, nil) req.AddCookie(cookie) rec := httptest.NewRecorder() handler.ServeHTTP(rec, req) if rec.Code != http.StatusOK { t.Fatalf("%s returned %d", test.path, rec.Code) } body, _ := io.ReadAll(rec.Result().Body) if !strings.Contains(string(body), test.want) || !strings.Contains(string(body), "") || !strings.Contains(string(body), "Version test-version") { t.Fatalf("%s did not render full tab page: %s", test.path, body) } } } func TestAdminHTMXTabRequestReturnsPartial(t *testing.T) { srv := newTestServer(t) handler := srv.Routes() cookie := loginCookie(t, handler) req := httptest.NewRequest(http.MethodGet, "/admin/services", nil) req.Header.Set("HX-Request", "true") req.AddCookie(cookie) rec := httptest.NewRecorder() handler.ServeHTTP(rec, req) if rec.Code != http.StatusOK { t.Fatalf("expected ok, got %d", rec.Code) } body, _ := io.ReadAll(rec.Result().Body) text := string(body) if strings.Contains(text, "") { t.Fatalf("expected partial response, got full document: %s", text) } if !strings.Contains(text, `hx-swap-oob="true"`) || !strings.Contains(text, "Add service") { t.Fatalf("expected partial panel and out-of-band tab update: %s", text) } }