mirror of
https://github.com/datarhei/core.git
synced 2025-10-05 16:07:07 +08:00
142 lines
3.8 KiB
Go
142 lines
3.8 KiB
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io"
|
|
"net/http"
|
|
"testing"
|
|
|
|
"github.com/datarhei/core/v16/http/api"
|
|
httpfs "github.com/datarhei/core/v16/http/fs"
|
|
"github.com/datarhei/core/v16/http/handler"
|
|
"github.com/datarhei/core/v16/http/mock"
|
|
"github.com/datarhei/core/v16/io/fs"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
)
|
|
|
|
func getDummyFilesystemsHandler(filesystem httpfs.FS) (*FSHandler, error) {
|
|
handler := NewFS(map[string]FSConfig{
|
|
filesystem.Name: {
|
|
Type: filesystem.Filesystem.Type(),
|
|
Mountpoint: filesystem.Mountpoint,
|
|
Handler: handler.NewFS(filesystem),
|
|
},
|
|
})
|
|
|
|
return handler, nil
|
|
}
|
|
|
|
func getDummyFilesystemsRouter(filesystem fs.Filesystem) (*echo.Echo, error) {
|
|
router := mock.DummyEcho()
|
|
|
|
fs := httpfs.FS{
|
|
Name: "foo",
|
|
Mountpoint: "/",
|
|
AllowWrite: true,
|
|
EnableAuth: false,
|
|
Username: "",
|
|
Password: "",
|
|
DefaultFile: "",
|
|
DefaultContentType: "text/html",
|
|
Gzip: false,
|
|
Filesystem: filesystem,
|
|
Cache: nil,
|
|
}
|
|
|
|
handler, err := getDummyFilesystemsHandler(fs)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
router.GET("/:name/*", handler.GetFile)
|
|
router.PUT("/:name/*", handler.PutFile)
|
|
router.DELETE("/:name/*", handler.DeleteFile)
|
|
router.GET("/:name", handler.ListFiles)
|
|
router.GET("/", handler.List)
|
|
|
|
return router, nil
|
|
}
|
|
|
|
func TestFilesystems(t *testing.T) {
|
|
memfs, err := fs.NewMemFilesystem(fs.MemConfig{})
|
|
require.NoError(t, err)
|
|
|
|
router, err := getDummyFilesystemsRouter(memfs)
|
|
require.NoError(t, err)
|
|
|
|
response := mock.Request(t, http.StatusOK, router, "GET", "/", nil)
|
|
|
|
mock.Validate(t, &[]api.FilesystemInfo{}, response.Data)
|
|
|
|
f := []api.FilesystemInfo{}
|
|
err = json.Unmarshal(response.Raw, &f)
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, 1, len(f))
|
|
|
|
mock.Request(t, http.StatusNotFound, router, "GET", "/bar", nil)
|
|
|
|
response = mock.Request(t, http.StatusOK, router, "GET", "/foo", nil)
|
|
|
|
mock.Validate(t, &[]api.FileInfo{}, response.Data)
|
|
|
|
l := []api.FileInfo{}
|
|
err = json.Unmarshal(response.Raw, &l)
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, 0, len(l))
|
|
|
|
mock.Request(t, http.StatusNotFound, router, "GET", "/bar/file", nil)
|
|
mock.Request(t, http.StatusNotFound, router, "GET", "/foo/file", nil)
|
|
|
|
data := mock.Read(t, "./fixtures/addProcess.json")
|
|
require.NoError(t, err)
|
|
|
|
mock.Request(t, http.StatusCreated, router, "PUT", "/foo/file", data)
|
|
mock.Request(t, http.StatusNotFound, router, "PUT", "/bar/file", data)
|
|
|
|
data = mock.Read(t, "./fixtures/addProcess.json")
|
|
require.NoError(t, err)
|
|
|
|
mock.Request(t, http.StatusNoContent, router, "PUT", "/foo/file", data)
|
|
|
|
require.Equal(t, 1, len(memfs.List("/", "")))
|
|
|
|
response = mock.Request(t, http.StatusOK, router, "GET", "/foo", nil)
|
|
|
|
mock.Validate(t, &[]api.FileInfo{}, response.Data)
|
|
|
|
l = []api.FileInfo{}
|
|
err = json.Unmarshal(response.Raw, &l)
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, 1, len(l))
|
|
|
|
mock.Request(t, http.StatusNotFound, router, "GET", "/foo/elif", nil)
|
|
|
|
response = mock.Request(t, http.StatusOK, router, "GET", "/foo/file", nil)
|
|
|
|
databytes, err := io.ReadAll(mock.Read(t, "./fixtures/addProcess.json"))
|
|
require.NoError(t, err)
|
|
require.Equal(t, databytes, response.Raw)
|
|
|
|
mock.Request(t, http.StatusNotFound, router, "DELETE", "/foo/elif", nil)
|
|
mock.Request(t, http.StatusNotFound, router, "DELETE", "/bar/elif", nil)
|
|
mock.Request(t, http.StatusOK, router, "DELETE", "/foo/file", nil)
|
|
mock.Request(t, http.StatusNotFound, router, "GET", "/foo/file", nil)
|
|
|
|
require.Equal(t, 0, len(memfs.List("/", "")))
|
|
|
|
response = mock.Request(t, http.StatusOK, router, "GET", "/foo", nil)
|
|
|
|
mock.Validate(t, &[]api.FileInfo{}, response.Data)
|
|
|
|
l = []api.FileInfo{}
|
|
err = json.Unmarshal(response.Raw, &l)
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, 0, len(l))
|
|
}
|