Publish go-nc-files v1 with local/WebDAV Root, DefaultPathStore, and neutral Working Folder language; depends on go-nc-exapp v0.1.0. Co-authored-by: Cursor <cursoragent@cursor.com>
101 lines
2.3 KiB
Go
101 lines
2.3 KiB
Go
package goncfiles_test
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"gitea.neitzel.de/konrad/go-nc-files"
|
|
)
|
|
|
|
func TestCleanRelRejectsURLsAndFileIDs(t *testing.T) {
|
|
t.Parallel()
|
|
for _, in := range []string{
|
|
"https://nc.example/remote.php/dav/files/alice/myapp",
|
|
"http://x/y",
|
|
"12345",
|
|
"../etc",
|
|
"",
|
|
} {
|
|
if got := goncfiles.CleanRel(in); got != "" {
|
|
t.Fatalf("CleanRel(%q)=%q want empty", in, got)
|
|
}
|
|
}
|
|
if got := goncfiles.CleanRel("myapp"); got != "myapp" {
|
|
t.Fatalf("got %q", got)
|
|
}
|
|
if got := goncfiles.CleanRel("Shared/TeamDNS"); got != "Shared/TeamDNS" {
|
|
t.Fatalf("got %q", got)
|
|
}
|
|
}
|
|
|
|
func TestLocalFolderReadWriteListExists(t *testing.T) {
|
|
t.Parallel()
|
|
root := t.TempDir()
|
|
sub := filepath.Join(root, "data")
|
|
if err := os.Mkdir(sub, 0o755); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
local := goncfiles.Local{RootDir: root}
|
|
folder, err := local.OpenFolder("data")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := folder.Write("hello.txt", []byte("hi")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
ok, err := folder.Exists("hello.txt")
|
|
if err != nil || !ok {
|
|
t.Fatalf("exists: ok=%v err=%v", ok, err)
|
|
}
|
|
data, err := folder.Read("hello.txt")
|
|
if err != nil || string(data) != "hi" {
|
|
t.Fatalf("read: %q err=%v", data, err)
|
|
}
|
|
entries, err := folder.List()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(entries) != 1 || entries[0].Name != "hello.txt" || entries[0].IsDir {
|
|
t.Fatalf("list: %+v", entries)
|
|
}
|
|
}
|
|
|
|
func TestLocalEnsureFolderCreatesPath(t *testing.T) {
|
|
t.Parallel()
|
|
root := t.TempDir()
|
|
local := goncfiles.Local{RootDir: root}
|
|
folder, err := local.EnsureFolder("a/b/c")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if _, err := os.Stat(filepath.Join(root, "a", "b", "c")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := folder.Write("x", []byte("1")); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestLocalOpenMissingIsNotExist(t *testing.T) {
|
|
t.Parallel()
|
|
local := goncfiles.Local{RootDir: t.TempDir()}
|
|
_, err := local.OpenFolder("missing")
|
|
if err == nil {
|
|
t.Fatal("expected error")
|
|
}
|
|
if !goncfiles.IsNotExist(err) {
|
|
t.Fatalf("got %v", err)
|
|
}
|
|
}
|
|
|
|
func TestRequireBasenameRejectsPathSegments(t *testing.T) {
|
|
t.Parallel()
|
|
for _, name := range []string{"", "a/b", "..", `a\b`} {
|
|
if err := goncfiles.RequireBasename(name); err == nil {
|
|
t.Fatalf("RequireBasename(%q) expected error", name)
|
|
}
|
|
}
|
|
}
|