Files
CHFS-NG/chfs-ng/internal/api/webdav_test.go
T

38 lines
1.1 KiB
Go

package api
import (
"context"
"os"
"path/filepath"
"testing"
"chfs-ng/internal/auth"
"github.com/emersion/go-webdav"
)
func TestWebDAVAuthFSCheckTree(t *testing.T) {
root := t.TempDir()
if err := os.MkdirAll(filepath.Join(root, "test", "private"), 0o755); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(root, "test", "public.txt"), []byte("public"), 0o644); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(root, "test", "private", "secret.txt"), []byte("secret"), 0o644); err != nil {
t.Fatal(err)
}
account := &auth.Account{Mask: auth.Delete, Rules: []auth.PathRule{
{Dir: "test", Mask: auth.Delete},
{Dir: "test/private", Mask: auth.None},
}}
fs := &webdavAuthFS{inner: webdav.LocalFileSystem(root), account: account}
if err := fs.checkTree(context.Background(), "/test", auth.Delete); err == nil {
t.Fatal("expected recursive delete permission check to reject inaccessible descendant")
}
if err := fs.checkTree(context.Background(), "/test/public.txt", auth.Delete); err != nil {
t.Fatalf("public file should be deletable: %v", err)
}
}