Files
go-nc-files/files_test.go
T
Konrad NeitzelandCursor 9068d8ba8e Extract Files seam, WebDAV, and Visit from CheckDNS.
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>
2026-08-26 19:16:53 +02:00

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)
}
}
}