Эх сурвалжийг харах

Add Share Permission tests

Signed-off-by: Henrik Storch <henrik.storch@nextcloud.com>
Henrik Storch 3 жил өмнө
parent
commit
a73536b65d

+ 4 - 0
Nextcloud.xcodeproj/project.pbxproj

@@ -47,6 +47,7 @@
 		AF4BF62127562B3F0081CEEF /* NCManageDatabase+Activity.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF4BF61D27562B3F0081CEEF /* NCManageDatabase+Activity.swift */; };
 		AF56C1DC2784856200D8BAE2 /* NCActivityCommentView.xib in Resources */ = {isa = PBXBuildFile; fileRef = AF56C1DB2784856200D8BAE2 /* NCActivityCommentView.xib */; };
 		AF68326A27BE65A90010BF0B /* NCMenuAction.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF68326927BE65A90010BF0B /* NCMenuAction.swift */; };
+		AF70C14D27F3484D00E13DF2 /* SharePermissionTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF70C14C27F3484D00E13DF2 /* SharePermissionTest.swift */; };
 		AF730AF827834B1400B7520E /* NCShare+NCCellDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF730AF727834B1400B7520E /* NCShare+NCCellDelegate.swift */; };
 		AF730AFA27843E4C00B7520E /* NCShareExtension+NCDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF730AF927843E4C00B7520E /* NCShareExtension+NCDelegate.swift */; };
 		AF7E504E27A2D8FF00B5E4AF /* UIBarButton+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF7E504D27A2D8FF00B5E4AF /* UIBarButton+Extension.swift */; };
@@ -507,6 +508,7 @@
 		AF4BF61D27562B3F0081CEEF /* NCManageDatabase+Activity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCManageDatabase+Activity.swift"; sourceTree = "<group>"; };
 		AF56C1DB2784856200D8BAE2 /* NCActivityCommentView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = NCActivityCommentView.xib; sourceTree = "<group>"; };
 		AF68326927BE65A90010BF0B /* NCMenuAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NCMenuAction.swift; sourceTree = "<group>"; };
+		AF70C14C27F3484D00E13DF2 /* SharePermissionTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharePermissionTest.swift; sourceTree = "<group>"; };
 		AF730AF727834B1400B7520E /* NCShare+NCCellDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCShare+NCCellDelegate.swift"; sourceTree = "<group>"; };
 		AF730AF927843E4C00B7520E /* NCShareExtension+NCDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NCShareExtension+NCDelegate.swift"; sourceTree = "<group>"; };
 		AF7E504D27A2D8FF00B5E4AF /* UIBarButton+Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIBarButton+Extension.swift"; sourceTree = "<group>"; };
@@ -1068,6 +1070,7 @@
 			children = (
 				AF8ED2022757822700B8DBC4 /* NCGlobalTests.swift */,
 				AF36077527BFB019001A243D /* ParallelWorkerTest.swift */,
+				AF70C14C27F3484D00E13DF2 /* SharePermissionTest.swift */,
 				AF8ED1FB2757821000B8DBC4 /* NextcloudTests.swift */,
 			);
 			path = NextcloudTests;
@@ -2435,6 +2438,7 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
+				AF70C14D27F3484D00E13DF2 /* SharePermissionTest.swift in Sources */,
 				AF36077627BFB019001A243D /* ParallelWorkerTest.swift in Sources */,
 				AF8ED1FC2757821000B8DBC4 /* NextcloudTests.swift in Sources */,
 				AF8ED2032757822700B8DBC4 /* NCGlobalTests.swift in Sources */,

+ 138 - 0
NextcloudTests/SharePermissionTest.swift

@@ -0,0 +1,138 @@
+//
+//  SharePermissionTest.swift
+//  Nextcloud
+//
+//  Created by Henrik Storch on 29.03.22.
+//  Copyright © 2021 Henrik Storch. All rights reserved.
+//
+//  Author Henrik Storch <henrik.storch@nextcloud.com>
+//
+//  This program is free software: you can redistribute it and/or modify
+//  it under the terms of the GNU General Public License as published by
+//  the Free Software Foundation, either version 3 of the License, or
+//  (at your option) any later version.
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU General Public License
+//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//
+
+@testable import Nextcloud
+import XCTest
+import NCCommunication
+
+class SharePermissionTest: XCTestCase {
+    override func setUp() {
+        let json =
+        """
+        {"ocs":{"data":{"capabilities":{"files_sharing":{"default_permissions":31}}}}}
+        """.data(using: .utf8)!
+        NCManageDatabase.shared.addCapabilitiesJSon(json, account: "")
+    }
+
+    func testShareCellPermissionCell() throws {
+        let share = NCTableShareOptions(sharee: NCCommunicationSharee(), metadata: tableMetadata(), password: nil)
+        let shareConfig = NCShareConfig(parentMetadata: tableMetadata(), share: share)
+
+        for row in 0..<shareConfig.permissions.count {
+            guard let cell = shareConfig.config(for: IndexPath(row: row, section: 0)) as? NCToggleCellConfig else {
+                XCTFail("Invalid share permission cell")
+                continue
+            }
+            XCTAssertFalse(cell.isOn(for: share))
+        }
+
+        let meta = tableMetadata()
+        meta.sharePermissionsCollaborationServices = 31
+        let fullShare = NCTableShareOptions(sharee: NCCommunicationSharee(), metadata: meta, password: nil)
+        let shareFullConfig = NCShareConfig(parentMetadata: meta, share: fullShare)
+
+        for row in 0..<shareFullConfig.permissions.count {
+            guard let cell = shareConfig.config(for: IndexPath(row: row, section: 0)) as? NCToggleCellConfig else {
+                XCTFail("Invalid share permission cell")
+                continue
+            }
+            XCTAssertTrue(cell.isOn(for: fullShare))
+        }
+    }
+
+    func testSharePermission() throws {
+        XCTAssertTrue(NCLinkPermission.allowEdit.hasResharePermission(for: 15))
+        XCTAssertTrue(NCLinkPermission.allowEdit.hasResharePermission(for: 11))
+        XCTAssertTrue(NCLinkPermission.allowEdit.hasResharePermission(for: 7))
+        XCTAssertFalse(NCLinkPermission.allowEdit.hasResharePermission(for: 13))
+        XCTAssertFalse(NCLinkPermission.allowEdit.hasResharePermission(for: 1))
+
+        XCTAssertTrue(NCLinkPermission.viewOnly.hasResharePermission(for: 15))
+        XCTAssertTrue(NCLinkPermission.viewOnly.hasResharePermission(for: 11))
+        XCTAssertTrue(NCLinkPermission.viewOnly.hasResharePermission(for: 7))
+        XCTAssertTrue(NCLinkPermission.viewOnly.hasResharePermission(for: 1))
+        XCTAssertFalse(NCLinkPermission.viewOnly.hasResharePermission(for: 12))
+        XCTAssertFalse(NCLinkPermission.viewOnly.hasResharePermission(for: 2))
+
+        XCTAssertTrue(NCLinkPermission.fileDrop.hasResharePermission(for: 4))
+        XCTAssertFalse(NCLinkPermission.fileDrop.hasResharePermission(for: 27))
+
+        XCTAssertTrue(NCUserPermission.create.hasResharePermission(for: 4))
+        XCTAssertFalse(NCUserPermission.create.hasResharePermission(for: 27))
+
+        XCTAssertTrue(NCUserPermission.edit.hasResharePermission(for: 2))
+        XCTAssertFalse(NCUserPermission.edit.hasResharePermission(for: 29))
+
+        XCTAssertTrue(NCUserPermission.reshare.hasResharePermission(for: 16))
+        XCTAssertFalse(NCUserPermission.reshare.hasResharePermission(for: 15))
+    }
+
+    func testFileShare() throws {
+        let meta = tableMetadata()
+        meta.directory = false
+        let share = NCTableShareOptions.shareLink(metadata: meta, password: nil)
+        let fileConfig = NCShareConfig(parentMetadata: meta, share: share)
+        XCTAssertEqual(fileConfig.advanced, NCShareDetails.forLink)
+        XCTAssertEqual(fileConfig.permissions as? [NCLinkPermission], NCLinkPermission.forFile)
+
+        meta.directory = true
+        let folderConfig = NCShareConfig(parentMetadata: meta, share: share)
+        XCTAssertEqual(folderConfig.advanced, NCShareDetails.forLink)
+        XCTAssertEqual(folderConfig.permissions as? [NCLinkPermission], NCLinkPermission.forDirectory)
+    }
+
+    func testUserShare() throws {
+        let meta = tableMetadata()
+        meta.directory = false
+        let sharee = NCCommunicationSharee()
+        let share = NCTableShareOptions(sharee: sharee, metadata: meta, password: nil)
+        let fileConfig = NCShareConfig(parentMetadata: meta, share: share)
+        XCTAssertEqual(fileConfig.advanced, NCShareDetails.forUser)
+        XCTAssertEqual(fileConfig.permissions as? [NCUserPermission], NCUserPermission.forFile)
+
+        meta.directory = true
+        let folderConfig = NCShareConfig(parentMetadata: meta, share: share)
+        XCTAssertEqual(folderConfig.advanced, NCShareDetails.forUser)
+        XCTAssertEqual(folderConfig.permissions as? [NCUserPermission], NCUserPermission.forDirectory)
+    }
+
+    func testResharePermission() throws {
+        let meta = tableMetadata()
+        let permissionReadShare = NCGlobal.shared.permissionShareShare + NCGlobal.shared.permissionReadShare
+        meta.sharePermissionsCollaborationServices = permissionReadShare
+        meta.directory = false
+        let share = NCTableShareOptions.shareLink(metadata: meta, password: nil)
+        let fileConfig = NCShareConfig(parentMetadata: meta, share: share)
+        XCTAssertEqual(fileConfig.resharePermission, meta.sharePermissionsCollaborationServices)
+        XCTAssertEqual(fileConfig.advanced, NCShareDetails.forLink)
+        XCTAssertEqual(fileConfig.permissions as? [NCLinkPermission], NCLinkPermission.forFile)
+
+        meta.directory = true
+        let sharee = NCCommunicationSharee()
+        let folderShare = NCTableShareOptions(sharee: sharee, metadata: meta, password: nil)
+        let folderConfig = NCShareConfig(parentMetadata: meta, share: folderShare)
+        XCTAssertEqual(folderConfig.resharePermission, meta.sharePermissionsCollaborationServices)
+        XCTAssertEqual(folderConfig.advanced, NCShareDetails.forUser)
+        XCTAssertEqual(folderConfig.permissions as? [NCUserPermission], NCUserPermission.forDirectory)
+    }
+}

+ 1 - 1
iOSClient/Share/Advanced/NCShareAdvancePermission.swift

@@ -101,7 +101,7 @@ class NCShareAdvancePermission: UITableViewController, NCShareAdvanceFotterDeleg
         if section == 0 {
             // check reshare permission, if restricted add note
             let maxPermission = metadata.directory ? NCGlobal.shared.permissionMaxFolderShare : NCGlobal.shared.permissionMaxFileShare
-            return shareConfig.parentPermission != maxPermission ? shareConfig.permissions.count + 1 : shareConfig.permissions.count
+            return shareConfig.resharePermission != maxPermission ? shareConfig.permissions.count + 1 : shareConfig.permissions.count
         } else if section == 1 {
             return shareConfig.advanced.count
         } else { return 0 }

+ 3 - 3
iOSClient/Share/Advanced/NCShareCells.swift

@@ -202,11 +202,11 @@ struct NCShareConfig {
     let permissions: [NCPermission]
     let advanced: [NCShareDetails]
     let share: NCTableShareable
-    let parentPermission: Int
+    let resharePermission: Int
 
     init(parentMetadata: tableMetadata, share: NCTableShareable) {
         self.share = share
-        self.parentPermission = parentMetadata.sharePermissionsCollaborationServices
+        self.resharePermission = parentMetadata.sharePermissionsCollaborationServices
         let type: NCPermission.Type = share.shareType == NCShareCommon.shared.SHARE_TYPE_LINK ? NCLinkPermission.self : NCUserPermission.self
         self.permissions = parentMetadata.directory ? type.forDirectory : type.forFile
         self.advanced = share.shareType == NCShareCommon.shared.SHARE_TYPE_LINK ? NCShareDetails.forLink : NCShareDetails.forUser
@@ -216,7 +216,7 @@ struct NCShareConfig {
         let cellConfig = config(for: indexPath)
         let cell = cellConfig?.getCell(for: share)
         cell?.textLabel?.text = cellConfig?.title
-        if let cellConfig = cellConfig as? NCPermission, !cellConfig.hasResharePermission(for: parentPermission) {
+        if let cellConfig = cellConfig as? NCPermission, !cellConfig.hasResharePermission(for: resharePermission) {
             cell?.isUserInteractionEnabled = false
             cell?.textLabel?.isEnabled = false
         }