+12








fcd7c979df
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>
68 lines
2.3 KiB
Go
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"))
|
|
}
|
|
}
|
|
}
|