mirror of
https://github.com/gofiber/fiber.git
synced 2025-02-22 09:33:21 +00:00
👷 add filesystem test cases
This commit is contained in:
parent
64f4d87766
commit
30783dd25d
@ -47,23 +47,26 @@ var ConfigDefault = Config{
|
||||
}
|
||||
|
||||
// New creates a new middleware handler
|
||||
func New(config Config) fiber.Handler {
|
||||
// Set config
|
||||
cfg := config
|
||||
func New(config ...Config) fiber.Handler {
|
||||
// Set default config
|
||||
cfg := ConfigDefault
|
||||
|
||||
// Set default values
|
||||
if cfg.Next == nil {
|
||||
cfg.Next = ConfigDefault.Next
|
||||
}
|
||||
if cfg.Index == "" {
|
||||
cfg.Index = ConfigDefault.Index
|
||||
}
|
||||
if !strings.HasPrefix(cfg.Index, "/") {
|
||||
cfg.Index = "/" + cfg.Index
|
||||
}
|
||||
if cfg.NotFoundFile != "" && !strings.HasPrefix(cfg.NotFoundFile, "/") {
|
||||
cfg.NotFoundFile = "/" + cfg.NotFoundFile
|
||||
// Override config if provided
|
||||
if len(config) > 0 {
|
||||
cfg = config[0]
|
||||
|
||||
// Set default values
|
||||
if cfg.Index == "" {
|
||||
cfg.Index = ConfigDefault.Index
|
||||
}
|
||||
if !strings.HasPrefix(cfg.Index, "/") {
|
||||
cfg.Index = "/" + cfg.Index
|
||||
}
|
||||
if cfg.NotFoundFile != "" && !strings.HasPrefix(cfg.NotFoundFile, "/") {
|
||||
cfg.NotFoundFile = "/" + cfg.NotFoundFile
|
||||
}
|
||||
}
|
||||
|
||||
if cfg.Root == nil {
|
||||
panic("filesystem: Root cannot be nil")
|
||||
}
|
||||
@ -72,7 +75,7 @@ func New(config Config) fiber.Handler {
|
||||
var prefix string
|
||||
|
||||
// Return new handler
|
||||
return func(c *fiber.Ctx) error {
|
||||
return func(c *fiber.Ctx) (err error) {
|
||||
// Don't execute middleware if Next returns true
|
||||
if cfg.Next != nil && cfg.Next(c) {
|
||||
return c.Next()
|
||||
@ -96,7 +99,12 @@ func New(config Config) fiber.Handler {
|
||||
path = "/" + path
|
||||
}
|
||||
|
||||
file, err := cfg.Root.Open(path)
|
||||
var (
|
||||
file http.File
|
||||
stat os.FileInfo
|
||||
)
|
||||
|
||||
file, err = cfg.Root.Open(path)
|
||||
if err != nil && os.IsNotExist(err) && cfg.NotFoundFile != "" {
|
||||
file, err = cfg.Root.Open(cfg.NotFoundFile)
|
||||
}
|
||||
@ -105,12 +113,11 @@ func New(config Config) fiber.Handler {
|
||||
if os.IsNotExist(err) {
|
||||
return c.Status(fiber.StatusNotFound).Next()
|
||||
}
|
||||
return err
|
||||
return
|
||||
}
|
||||
|
||||
stat, err := file.Stat()
|
||||
if err != nil {
|
||||
return err
|
||||
if stat, err = file.Stat(); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
// Serve index if path is directory
|
||||
@ -129,10 +136,7 @@ func New(config Config) fiber.Handler {
|
||||
// Browse directory if no index found and browsing is enabled
|
||||
if stat.IsDir() {
|
||||
if cfg.Browse {
|
||||
if err := dirList(c, file); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
return dirList(c, file)
|
||||
}
|
||||
return fiber.ErrForbidden
|
||||
}
|
||||
|
@ -28,6 +28,7 @@ func Test_FileSystem(t *testing.T) {
|
||||
|
||||
app.Use("/spatest", New(Config{
|
||||
Root: http.Dir("../../.github/testdata/fs"),
|
||||
Index: "index.html",
|
||||
NotFoundFile: "index.html",
|
||||
}))
|
||||
|
||||
@ -99,8 +100,7 @@ func Test_FileSystem(t *testing.T) {
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
req, _ := http.NewRequest("GET", tt.url, nil)
|
||||
resp, err := app.Test(req)
|
||||
resp, err := app.Test(httptest.NewRequest("GET", tt.url, nil))
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, tt.statusCode, resp.StatusCode)
|
||||
|
||||
@ -128,3 +128,38 @@ func Test_FileSystem_Next(t *testing.T) {
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, fiber.StatusNotFound, resp.StatusCode)
|
||||
}
|
||||
|
||||
func Test_FileSystem_NonGetAndHead(t *testing.T) {
|
||||
app := fiber.New()
|
||||
|
||||
app.Use("/test", New(Config{
|
||||
Root: http.Dir("../../.github/testdata/fs"),
|
||||
}))
|
||||
|
||||
resp, err := app.Test(httptest.NewRequest(fiber.MethodPost, "/test", nil))
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, 404, resp.StatusCode)
|
||||
}
|
||||
|
||||
func Test_FileSystem_Head(t *testing.T) {
|
||||
app := fiber.New()
|
||||
|
||||
app.Use("/test", New(Config{
|
||||
Root: http.Dir("../../.github/testdata/fs"),
|
||||
}))
|
||||
|
||||
req, _ := http.NewRequest(fiber.MethodHead, "/test", nil)
|
||||
resp, err := app.Test(req)
|
||||
utils.AssertEqual(t, nil, err)
|
||||
utils.AssertEqual(t, 200, resp.StatusCode)
|
||||
}
|
||||
|
||||
func Test_FileSystem_NoRoot(t *testing.T) {
|
||||
defer func() {
|
||||
utils.AssertEqual(t, "filesystem: Root cannot be nil", recover())
|
||||
}()
|
||||
|
||||
app := fiber.New()
|
||||
app.Use(New())
|
||||
_, _ = app.Test(httptest.NewRequest(fiber.MethodGet, "/", nil))
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user