You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

63 lines
1.5 KiB

package util
import "testing"
func TestExtractBucketPath(t *testing.T) {
for _, tt := range []struct {
name string
base string
target string
requireChild bool
expected string
ok bool
}{
{
name: "child paths return bucket",
base: "/buckets",
target: "/buckets/test/folder/file",
requireChild: true,
expected: "/buckets/test",
ok: true,
},
{
name: "bucket root without child fails when required",
base: "/buckets",
target: "/buckets/test",
requireChild: true,
ok: false,
},
{
name: "bucket root allowed when not required",
base: "/buckets",
target: "/buckets/test",
requireChild: false,
expected: "/buckets/test",
ok: true,
},
{
name: "path outside buckets fails",
base: "/buckets",
target: "/data/test/folder",
requireChild: true,
ok: false,
},
{
name: "trailing slash on base is normalized",
base: "/buckets/",
target: "/buckets/test/sub",
requireChild: true,
expected: "/buckets/test",
ok: true,
},
} {
t.Run(tt.name, func(t *testing.T) {
got, ok := ExtractBucketPath(tt.base, tt.target, tt.requireChild)
if ok != tt.ok {
t.Fatalf("expected ok=%v, got %v", tt.ok, ok)
}
if got != tt.expected {
t.Fatalf("expected path %q, got %q", tt.expected, got)
}
})
}
}