From d723ce51f2a36ac7cd2cf90cc26b5ca2c6e68402 Mon Sep 17 00:00:00 2001 From: Michael Barz Date: Fri, 24 Nov 2023 21:36:00 +0100 Subject: [PATCH] test: add unit tests for linktype pkg --- .../graph/pkg/linktype/linktype_suite_test.go | 13 ++ services/graph/pkg/linktype/linktype_test.go | 142 ++++++++++++++++++ 2 files changed, 155 insertions(+) create mode 100644 services/graph/pkg/linktype/linktype_suite_test.go create mode 100644 services/graph/pkg/linktype/linktype_test.go diff --git a/services/graph/pkg/linktype/linktype_suite_test.go b/services/graph/pkg/linktype/linktype_suite_test.go new file mode 100644 index 0000000000..1ae34fb3e9 --- /dev/null +++ b/services/graph/pkg/linktype/linktype_suite_test.go @@ -0,0 +1,13 @@ +package linktype_test + +import ( + "testing" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +func TestLinktype(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Linktype Suite") +} diff --git a/services/graph/pkg/linktype/linktype_test.go b/services/graph/pkg/linktype/linktype_test.go new file mode 100644 index 0000000000..b21eb8ce1b --- /dev/null +++ b/services/graph/pkg/linktype/linktype_test.go @@ -0,0 +1,142 @@ +package linktype_test + +import ( + linkv1beta1 "github.com/cs3org/go-cs3apis/cs3/sharing/link/v1beta1" + provider "github.com/cs3org/go-cs3apis/cs3/storage/provider/v1beta1" + "github.com/cs3org/reva/v2/pkg/storage/utils/grants" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + libregraph "github.com/owncloud/libre-graph-api-go" + "github.com/owncloud/ocis/v2/services/graph/pkg/linktype" +) + +var _ = Describe("LinktypeFromPermission", func() { + var ( + internalLinkType, _ = libregraph.NewSharingLinkTypeFromValue("internal") + createOnlyLinkType, _ = libregraph.NewSharingLinkTypeFromValue("createOnly") + viewLinkType, _ = libregraph.NewSharingLinkTypeFromValue("view") + uploadLinkType, _ = libregraph.NewSharingLinkTypeFromValue("upload") + editLinkType, _ = libregraph.NewSharingLinkTypeFromValue("edit") + folderEditPermsHaveChanged = linktype.NewFolderEditLinkPermissionSet().GetPermissions() + ) + + BeforeEach(func() { + // simulate that permissions have changed after link creation + folderEditPermsHaveChanged.CreateContainer = false + }) + + DescribeTable("SharingLinkTypeFromCS3Permissions", + func(permissions *linkv1beta1.PublicSharePermissions, + expectedSharingLinkType *libregraph.SharingLinkType, + expectedActions []string) { + + sharingLinkType, actions := linktype.SharingLinkTypeFromCS3Permissions(permissions) + Expect(sharingLinkType).To(Equal(expectedSharingLinkType)) + Expect(expectedActions).To(Equal(actions)) + }, + + Entry("Internal", + &linkv1beta1.PublicSharePermissions{Permissions: linktype.NewInternalLinkPermissionSet().GetPermissions()}, + internalLinkType, + nil, + ), + Entry("CreateOnly", + &linkv1beta1.PublicSharePermissions{Permissions: linktype.NewFolderDropLinkPermissionSet().GetPermissions()}, + createOnlyLinkType, + nil, + ), + Entry("View File", + &linkv1beta1.PublicSharePermissions{Permissions: linktype.NewViewLinkPermissionSet().GetPermissions()}, + viewLinkType, + nil, + ), + Entry("Upload in Folder", + &linkv1beta1.PublicSharePermissions{Permissions: linktype.NewFolderUploadLinkPermissionSet().GetPermissions()}, + uploadLinkType, + nil, + ), + Entry("File Edit", + &linkv1beta1.PublicSharePermissions{Permissions: linktype.NewFileEditLinkPermissionSet().GetPermissions()}, + editLinkType, + nil, + ), + Entry("Folder Edit", + &linkv1beta1.PublicSharePermissions{Permissions: linktype.NewFolderEditLinkPermissionSet().GetPermissions()}, + editLinkType, + nil, + ), + Entry("Folder Edit- Permissions have changed after creation", + &linkv1beta1.PublicSharePermissions{Permissions: folderEditPermsHaveChanged}, + nil, + []string{ + "libre.graph/driveItem/standard/delete", + "libre.graph/driveItem/path/read", + "libre.graph/driveItem/quota/read", + "libre.graph/driveItem/content/read", + "libre.graph/driveItem/upload/create", + "libre.graph/driveItem/children/read", + "libre.graph/driveItem/deleted/read", + "libre.graph/driveItem/path/update", + "libre.graph/driveItem/deleted/update", + "libre.graph/driveItem/basic/read", + }, + ), + ) + + DescribeTable("CS3ResourcePermissionsFromSharingLink", + func(createLink libregraph.DriveItemCreateLink, + info provider.ResourceType, + expectedPermissions *provider.ResourcePermissions, + hasError bool) { + + permissions, err := linktype.CS3ResourcePermissionsFromSharingLink(createLink, info) + if hasError == true { + Expect(err).To(HaveOccurred()) + } else { + Expect(err).ToNot(HaveOccurred()) + Expect(grants.PermissionsEqual(permissions, expectedPermissions)).To(BeTrue()) + } + }, + + Entry("Internal", + libregraph.DriveItemCreateLink{Type: internalLinkType}, + provider.ResourceType_RESOURCE_TYPE_FILE, linktype.NewInternalLinkPermissionSet().GetPermissions(), + false, + ), + Entry("Create Only", + libregraph.DriveItemCreateLink{Type: createOnlyLinkType}, + provider.ResourceType_RESOURCE_TYPE_CONTAINER, linktype.NewFolderDropLinkPermissionSet().GetPermissions(), + false, + ), + Entry("Create Only", + libregraph.DriveItemCreateLink{Type: createOnlyLinkType}, + provider.ResourceType_RESOURCE_TYPE_FILE, linktype.NewFolderDropLinkPermissionSet().GetPermissions(), + true, + ), + Entry("View File", + libregraph.DriveItemCreateLink{Type: viewLinkType}, + provider.ResourceType_RESOURCE_TYPE_FILE, linktype.NewViewLinkPermissionSet().GetPermissions(), + false, + ), + Entry("View Folder", + libregraph.DriveItemCreateLink{Type: viewLinkType}, + provider.ResourceType_RESOURCE_TYPE_CONTAINER, linktype.NewViewLinkPermissionSet().GetPermissions(), + false, + ), + Entry("Upload in Folder", + libregraph.DriveItemCreateLink{Type: uploadLinkType}, + provider.ResourceType_RESOURCE_TYPE_CONTAINER, linktype.NewFolderUploadLinkPermissionSet().GetPermissions(), + false, + ), + Entry("File Edit", + libregraph.DriveItemCreateLink{Type: editLinkType}, + provider.ResourceType_RESOURCE_TYPE_FILE, linktype.NewFileEditLinkPermissionSet().GetPermissions(), + false, + ), + Entry("Folder Edit", + libregraph.DriveItemCreateLink{Type: editLinkType}, + provider.ResourceType_RESOURCE_TYPE_CONTAINER, linktype.NewFolderEditLinkPermissionSet().GetPermissions(), + false, + ), + ) +})