69 lines
2.0 KiB
Go
69 lines
2.0 KiB
Go
|
|
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/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), "<!doctype html>") || !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/projects", 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, "<!doctype html>") {
|
||
|
|
t.Fatalf("expected partial response, got full document: %s", text)
|
||
|
|
}
|
||
|
|
if !strings.Contains(text, `hx-swap-oob="true"`) || !strings.Contains(text, "Add Project") {
|
||
|
|
t.Fatalf("expected partial panel and out-of-band tab update: %s", text)
|
||
|
|
}
|
||
|
|
}
|