package sync import ( "testing" "github.com/databricks/databricks-sdk-go/service/iam" "github.com/stretchr/testify/assert" ) func TestPathNestedUnderBasePaths(t *testing.T) { me := iam.User{ UserName: "jane@doe.com", } // Not nested under allowed base paths. assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Repos/jane@doe.com")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Repos/jane@doe.com/.")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Repos/jane@doe.com/..")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Repos/john@doe.com")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Repos/jane@doe.comsuffix/foo")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Repos/")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Repos")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Users/jane@doe.com")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Users/jane@doe.com/.")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Users/jane@doe.com/..")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Users/john@doe.com")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Users/jane@doe.comsuffix/foo")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Users/")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/Users")) assert.Error(t, checkPathNestedUnderBasePaths(&me, "/")) // Nested under allowed base paths. assert.NoError(t, checkPathNestedUnderBasePaths(&me, "/Repos/jane@doe.com/foo")) assert.NoError(t, checkPathNestedUnderBasePaths(&me, "/Repos/jane@doe.com/./foo")) assert.NoError(t, checkPathNestedUnderBasePaths(&me, "/Repos/jane@doe.com/foo/bar/qux")) assert.NoError(t, checkPathNestedUnderBasePaths(&me, "/Users/jane@doe.com/foo")) assert.NoError(t, checkPathNestedUnderBasePaths(&me, "/Users/jane@doe.com/./foo")) assert.NoError(t, checkPathNestedUnderBasePaths(&me, "/Users/jane@doe.com/foo/bar/qux")) } func TestPathToRepoPath(t *testing.T) { me := iam.User{ UserName: "jane@doe.com", } assert.Equal(t, "/Repos/jane@doe.com/foo", repoPathForPath(&me, "/Repos/jane@doe.com/foo/bar/qux")) assert.Equal(t, "/Repos/jane@doe.com/foo", repoPathForPath(&me, "/Repos/jane@doe.com/foo/bar")) assert.Equal(t, "/Repos/jane@doe.com/foo", repoPathForPath(&me, "/Repos/jane@doe.com/foo")) // We expect this function to be called with a path nested under the user's repo path. // If this is not the case it should return the input verbatim (albeit cleaned). assert.Equal(t, "/Repos/jane@doe.com", repoPathForPath(&me, "/Repos/jane@doe.com")) assert.Equal(t, "/Repos/hello@world.com/foo/bar/qux", repoPathForPath(&me, "/Repos/hello@world.com/foo/bar/qux")) assert.Equal(t, "/Repos/hello@world.com/foo/bar/qux", repoPathForPath(&me, "/Repos/hello@world.com/foo/bar/qux/.")) }