Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/ios.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenrik Storch <henrik.storch@nextcloud.com>2022-03-29 18:10:05 +0300
committerHenrik Storch <henrik.storch@nextcloud.com>2022-04-28 08:14:35 +0300
commita73536b65de5f6eae0c3a690ab618a97920060f9 (patch)
treebd132ef1935c3aa0d91d4abc61eab77e37a47d2c
parentaf0bb51fc0e1c21b5c453940a6f8bbde13fbb5bd (diff)
Add Share Permission tests
Signed-off-by: Henrik Storch <henrik.storch@nextcloud.com>
-rw-r--r--Nextcloud.xcodeproj/project.pbxproj4
-rw-r--r--NextcloudTests/SharePermissionTest.swift138
-rw-r--r--iOSClient/Share/Advanced/NCShareAdvancePermission.swift2
-rw-r--r--iOSClient/Share/Advanced/NCShareCells.swift6
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
}