diff options
author | Henrik Storch <henrik.storch@nextcloud.com> | 2022-03-29 18:10:05 +0300 |
---|---|---|
committer | Henrik Storch <henrik.storch@nextcloud.com> | 2022-04-28 08:14:35 +0300 |
commit | a73536b65de5f6eae0c3a690ab618a97920060f9 (patch) | |
tree | bd132ef1935c3aa0d91d4abc61eab77e37a47d2c | |
parent | af0bb51fc0e1c21b5c453940a6f8bbde13fbb5bd (diff) |
Add Share Permission tests
Signed-off-by: Henrik Storch <henrik.storch@nextcloud.com>
-rw-r--r-- | Nextcloud.xcodeproj/project.pbxproj | 4 | ||||
-rw-r--r-- | NextcloudTests/SharePermissionTest.swift | 138 | ||||
-rw-r--r-- | iOSClient/Share/Advanced/NCShareAdvancePermission.swift | 2 | ||||
-rw-r--r-- | iOSClient/Share/Advanced/NCShareCells.swift | 6 |
4 files changed, 146 insertions, 4 deletions
diff --git a/Nextcloud.xcodeproj/project.pbxproj b/Nextcloud.xcodeproj/project.pbxproj index c0e7fe80b..4e12f281d 100644 --- a/Nextcloud.xcodeproj/project.pbxproj +++ b/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 */, diff --git a/NextcloudTests/SharePermissionTest.swift b/NextcloudTests/SharePermissionTest.swift new file mode 100644 index 000000000..dfe23f4bd --- /dev/null +++ b/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) + } +} diff --git a/iOSClient/Share/Advanced/NCShareAdvancePermission.swift b/iOSClient/Share/Advanced/NCShareAdvancePermission.swift index d9cba692d..6eb3ebbf7 100644 --- a/iOSClient/Share/Advanced/NCShareAdvancePermission.swift +++ b/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 } diff --git a/iOSClient/Share/Advanced/NCShareCells.swift b/iOSClient/Share/Advanced/NCShareCells.swift index 234ca417f..bd9a78ddd 100644 --- a/iOSClient/Share/Advanced/NCShareCells.swift +++ b/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 } |