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