Files
homarr/apps/workshop/static_test.go
T
+12 fcd7c979df feat!: release v2 (#6545)
Co-authored-by: Artur <145776561+arturict@users.noreply.github.com>
Co-authored-by: arturict <arturict@users.noreply.github.com>
Co-authored-by: Thomas <thomas@ajnart.fr>
Co-authored-by: Afonso Jorge Ramos <afonsojorgeramos@gmail.com>
Co-authored-by: Danura30082 <danura30082+github@gmail.com>
Co-authored-by: Kushie <122986913+kushiemoon-dev@users.noreply.github.com>
Co-authored-by: ajnart <thomas@ajnart.fr>
Co-authored-by: ajnart <thomas@ajnart.dev>
Co-authored-by: chenjun <chenjun@foxmail.com>
Co-authored-by: Wikibear <wikibear@users.noreply.github.com>
Co-authored-by: Bergasha <bergasha@gmail.com>
Co-authored-by: leafyelin <43306196+leafyelin@users.noreply.github.com>
Co-authored-by: Lucas Araujo <lucas.lra@gmail.com>
Co-authored-by: GreenMonito <86085570+GreenMonito@users.noreply.github.com>
Co-authored-by: Nerdy-Technician <roffo@nerdy-technician.social>
Co-authored-by: Jun <34545896+jcstrong@users.noreply.github.com>
Co-authored-by: Edmond Abraham <54119952+gitedmond@users.noreply.github.com>
Co-authored-by: thrawnx <tight.bulb9384@fastmail.com>
Co-authored-by: Chris <58918656+nordada@users.noreply.github.com>
Co-authored-by: yi111 <153097222+Yi-111-a@users.noreply.github.com>
Co-authored-by: Yanis <naamaneyanis@gmail.com>
Co-authored-by: Wikibear <me@sej.de>
Co-authored-by: alessiottavo <93441886+alessiottavo@users.noreply.github.com>
2026-10-02 21:00:14 +02:00

68 lines
2.3 KiB
Go

package main
import (
"errors"
"net/http"
"net/http/httptest"
"strings"
"testing"
"testing/fstest"
"github.com/pocketbase/pocketbase/apis"
"github.com/pocketbase/pocketbase/core"
"github.com/pocketbase/pocketbase/tools/router"
)
func TestStaticWebsite(t *testing.T) {
files := fstest.MapFS{
"index.html": {Data: []byte("Home")},
"404.html": {Data: []byte("Page not found")},
"api/search": {Data: []byte(`{"type":"advanced"}`)},
"llms.txt": {Data: []byte("# Docs")},
"docs/index.html": {Data: []byte("Documentation")},
}
for _, scenario := range []struct {
path string
status int
body string
}{
{"/docs/missing", http.StatusNotFound, "Page not found"},
{"/api/search?q=board", http.StatusOK, `{"type":"advanced"}`},
{"/llms.txt", http.StatusOK, "# Docs"},
} {
t.Run(scenario.path, func(t *testing.T) {
event := new(core.RequestEvent)
event.Request = httptest.NewRequest(http.MethodGet, scenario.path, nil)
event.Request.SetPathValue(apis.StaticWildcardParam, strings.TrimPrefix(event.Request.URL.Path, "/"))
response := httptest.NewRecorder()
event.Response = response
if err := staticWebsite(files, false)(event); err != nil {
t.Fatal(err)
}
if response.Code != scenario.status || response.Body.String() != scenario.body {
t.Fatalf("got %d %q", response.Code, response.Body.String())
}
})
}
event := new(core.RequestEvent)
event.Request = httptest.NewRequest(http.MethodGet, "/api/missing", nil)
event.Request.SetPathValue(apis.StaticWildcardParam, "api/missing")
event.Response = httptest.NewRecorder()
if err := staticWebsite(files, false)(event); !errors.Is(err, router.ErrFileNotFound) {
t.Fatalf("missing API should retain API error, got %v", err)
}
for _, method := range []string{http.MethodGet, http.MethodHead} {
event := new(core.RequestEvent)
event.Request = httptest.NewRequest(method, "/docs?example=1", nil)
event.Request.SetPathValue(apis.StaticWildcardParam, "docs")
response := httptest.NewRecorder()
event.Response = response
if err := staticWebsite(files, false)(event); err != nil {
t.Fatal(err)
}
if response.Code != http.StatusMovedPermanently || response.Header().Get("Location") != "/docs/?example=1" {
t.Fatalf("%s redirect lost query: %d %s", method, response.Code, response.Header().Get("Location"))
}
}
}