Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
110 commits
Select commit Hold shift + click to select a range
9011cc3
add new checkboxes
alperozturk96 Mar 26, 2025
e606b8f
add setCheckboxStates
alperozturk96 Mar 26, 2025
b0f8bc2
add setOnCheckedChangeListeners
alperozturk96 Mar 26, 2025
1a7657e
fix logic and add TODOs
alperozturk96 Mar 26, 2025
2c69b22
add custom permission radio button
alperozturk96 Mar 27, 2025
ccfcf1c
use share.permission
alperozturk96 Mar 27, 2025
8c3f7d4
fix code analytics
alperozturk96 Mar 27, 2025
3e8b949
add missing test parts
alperozturk96 Mar 27, 2025
8281cd7
revert changes
alperozturk96 Mar 27, 2025
ec85a54
add advanced settings back
alperozturk96 Mar 27, 2025
782294e
grayed out read
alperozturk96 Mar 27, 2025
b32fdb2
revert changes
alperozturk96 Mar 27, 2025
dd99814
fix failing tests
alperozturk96 Mar 27, 2025
b553211
fix setUserPermission
alperozturk96 Mar 31, 2025
8d29e08
add SharePermissionManager
alperozturk96 Mar 31, 2025
126f40f
fix setCheckboxStates
alperozturk96 Mar 31, 2025
f87a72c
fix setCheckboxStates
alperozturk96 Mar 31, 2025
774e90b
fix code analytics
alperozturk96 Mar 31, 2025
3fd40ea
add new permissions to the quick sharing bottom sheet
alperozturk96 Mar 31, 2025
1999d92
fix permissionFlag usage for QuickPermissionModel
alperozturk96 Apr 1, 2025
ae6c924
add custom permissions to bottom sheet
alperozturk96 Apr 1, 2025
76d575b
add custom permissions to bottom sheet
alperozturk96 Apr 1, 2025
0483484
add custom permissions to bottom sheet
alperozturk96 Apr 1, 2025
c24a5b5
fix order
alperozturk96 Apr 1, 2025
63d6ae3
fix order
alperozturk96 Apr 1, 2025
49fd471
fix onCustomPermissionSelected
alperozturk96 Apr 2, 2025
a320b36
fix radio button isChecked logic
alperozturk96 Apr 2, 2025
5d59e1e
remove unused character
alperozturk96 Apr 2, 2025
799ed48
fix radio button setOnCheckedChangeListener logic
alperozturk96 Apr 2, 2025
5f85f84
fix allow re-share logic
alperozturk96 Apr 2, 2025
a18a7b9
reduce lint
alperozturk96 Apr 2, 2025
8460c90
create share with one click
alperozturk96 Apr 2, 2025
53dc81d
add setup view region
alperozturk96 Apr 2, 2025
19fe4f5
clearer function name
alperozturk96 Apr 2, 2025
b945046
remove unnecessary allow reshare checkbox
alperozturk96 Apr 2, 2025
85f8d27
fix togglePermission
alperozturk96 Apr 2, 2025
f626837
fix initial permission
alperozturk96 Apr 2, 2025
c0e5b2c
fix code analytics
alperozturk96 Apr 2, 2025
16bb4ec
use default permission
alperozturk96 Apr 3, 2025
a883e64
fix check order
alperozturk96 Apr 3, 2025
ba46f56
fix license
alperozturk96 Apr 3, 2025
55f718f
simplify functions
alperozturk96 Apr 3, 2025
8d87a8e
add shareAllowDownloadAndSyncCheckbox
alperozturk96 Apr 9, 2025
0c577d2
add share attribute field
alperozturk96 Apr 10, 2025
926fcc0
add share attribute field
alperozturk96 Apr 10, 2025
a9fcb1e
simplify
alperozturk96 Apr 10, 2025
a2b2133
fix logic
alperozturk96 Apr 10, 2025
241dfbc
fix code analytics
alperozturk96 Apr 14, 2025
5d7e848
do not show allow download and sync for public share
alperozturk96 Apr 14, 2025
1326079
enable read checkbox for updateViewForLinkShare and folder
alperozturk96 Apr 17, 2025
056316a
align translations with web and iOS client
alperozturk96 Apr 17, 2025
61450a3
align icons with web and iOS client
alperozturk96 Apr 17, 2025
5ff8996
set download limit for "Share link"
alperozturk96 Apr 17, 2025
26c0902
use quick permission type
alperozturk96 Apr 17, 2025
e9b5c6a
use quick permission type
alperozturk96 Apr 17, 2025
48a893b
remove redundant code
alperozturk96 Apr 17, 2025
434a8ad
remove redundant code
alperozturk96 Apr 17, 2025
d9a4f06
fix update
alperozturk96 Apr 17, 2025
cf59bc8
solve git conflicts
alperozturk96 May 5, 2025
0e060d8
update library
alperozturk96 May 5, 2025
f284465
add hasFileRequestPermission
alperozturk96 May 6, 2025
7a75b75
check hasFileRequestPermission
alperozturk96 May 6, 2025
17b3293
fix unshare
alperozturk96 May 7, 2025
474512f
add missing ShareeListAdapter for unShare
alperozturk96 May 7, 2025
3aba7bd
show fail message only for download limit and check canSetDownloadLim…
alperozturk96 May 7, 2025
ef50fca
mergeDistinctByToken
alperozturk96 May 7, 2025
268ca8d
better function naming
alperozturk96 May 7, 2025
12acf3b
fix code analytics
alperozturk96 May 7, 2025
a7aa84e
fix tests
alperozturk96 May 7, 2025
088fa83
better function naming
alperozturk96 May 7, 2025
90a46e6
better function naming
alperozturk96 May 7, 2025
340e613
check next button availability
alperozturk96 May 7, 2025
06eee02
show isSecureFileDrop text if encrypted
alperozturk96 May 8, 2025
a86f344
correct view order
alperozturk96 May 8, 2025
0c59872
share common logic for canSetFileRequest
alperozturk96 May 8, 2025
1e67083
fix code analytics
alperozturk96 May 8, 2025
e4a2fe5
fix isSecureFileDrop condition
alperozturk96 May 8, 2025
6671683
use single source of truth for sub-title of the external and internal…
alperozturk96 May 8, 2025
a5839a2
add error checks
alperozturk96 May 8, 2025
a0ad2e0
fix code analytics
alperozturk96 May 8, 2025
638703b
update lib
tobiasKaminsky May 19, 2025
7339c37
fix merge conflict
alperozturk96 May 26, 2025
2687e38
fix code analytics
alperozturk96 May 26, 2025
fcbd3da
prevent shared file, shared back
alperozturk96 May 26, 2025
29fb583
fix Share link naming
alperozturk96 May 26, 2025
b5aee03
fix show all and show less text visibility for external sharee list a…
alperozturk96 May 26, 2025
8cfbd27
make background color blue for link shares
alperozturk96 May 26, 2025
f196dda
for empty user name use default user icon
alperozturk96 May 26, 2025
2917435
extract setUserImage
alperozturk96 May 27, 2025
01f5f2f
remove ShareMenuHelper
alperozturk96 May 27, 2025
2744eaa
refactor SharePermissionManager
alperozturk96 May 27, 2025
86e9aea
add SharePermissionManagerTest
alperozturk96 May 27, 2025
a5c60e7
fix usage of defaultPermissions
alperozturk96 May 27, 2025
4a95453
fix usage of defaultPermissions
alperozturk96 May 27, 2025
da31ece
fix code analytics
alperozturk96 May 27, 2025
469c558
fix code analytics
alperozturk96 May 28, 2025
c8e5634
add download attribute for create share
alperozturk96 May 28, 2025
c0a4c83
better debug
alperozturk96 May 30, 2025
7f70a9a
better debug
alperozturk96 May 30, 2025
8758054
better debug
alperozturk96 May 30, 2025
e937ec7
fix code analytics
alperozturk96 May 30, 2025
e02c694
fix custom permission selection
alperozturk96 May 30, 2025
bab83db
extract set downloadlimit
alperozturk96 May 30, 2025
ba5ce54
fix customPermissionLayout select logic
alperozturk96 May 30, 2025
2354f65
fix code analytics
alperozturk96 May 30, 2025
011f098
fix ShareProcessStep check
alperozturk96 May 30, 2025
70ea4b3
fix code analytics
alperozturk96 May 30, 2025
49838e1
solve git conflicts
alperozturk96 Jun 3, 2025
6e5ade0
update lib
alperozturk96 Jun 10, 2025
3d2feb2
fix tests
alperozturk96 Jun 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1,355 changes: 1,355 additions & 0 deletions app/schemas/com.nextcloud.client.database.NextcloudDatabase/90.json

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,268 @@
/*
* Nextcloud - Android Client
*
* SPDX-FileCopyrightText: 2025 Alper Ozturk <alper.ozturk@nextcloud.com>
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

package com.nextcloud.utils

import com.google.gson.Gson
import com.owncloud.android.datamodel.quickPermission.QuickPermissionType
import com.owncloud.android.lib.resources.shares.OCShare
import com.owncloud.android.lib.resources.shares.ShareType
import com.owncloud.android.lib.resources.shares.attributes.ShareAttributes
import com.owncloud.android.ui.fragment.util.SharePermissionManager
import junit.framework.TestCase.assertEquals
import junit.framework.TestCase.assertFalse
import junit.framework.TestCase.assertNotNull
import junit.framework.TestCase.assertTrue
import org.junit.Test

@Suppress("TooManyFunctions")
class SharePermissionManagerTest {

private fun createShare(sharePermission: Int, isFolder: Boolean = false, attributesJson: String? = null): OCShare {
return if (isFolder) {
OCShare("/test")
.apply {
permissions = sharePermission
attributes = attributesJson
shareType = ShareType.INTERNAL
sharedDate = 1188206955
shareWith = "User 1"
sharedWithDisplayName = "User 1"
}
} else {
OCShare("/test.png")
.apply {
permissions = sharePermission
attributes = attributesJson
shareType = ShareType.INTERNAL
sharedDate = 1188206955
shareWith = "User 1"
sharedWithDisplayName = "User 1"
}
}.apply {
this.isFolder = isFolder
}
}

// region Permission change tests
@Test
fun testTogglePermissionShouldAddPermissionFlagWhenChecked() {
val initialPermission = OCShare.READ_PERMISSION_FLAG
val updatedPermission =
SharePermissionManager.togglePermission(true, initialPermission, OCShare.UPDATE_PERMISSION_FLAG)
val updatedShare = createShare(updatedPermission)
assertTrue(SharePermissionManager.isCustomPermission(updatedShare))
}

@Test
fun testTogglePermissionShouldRemovePermissionFlagWhenUnchecked() {
val initialPermission = OCShare.READ_PERMISSION_FLAG + OCShare.UPDATE_PERMISSION_FLAG
val updatedPermission =
SharePermissionManager.togglePermission(false, initialPermission, OCShare.UPDATE_PERMISSION_FLAG)
val updatedShare = createShare(updatedPermission)
assertTrue(SharePermissionManager.isViewOnly(updatedShare))
}
// endregion

// region HasPermissions tests
@Test
fun testHasPermissionShouldReturnTrueIfPermissionPresent() {
val permission = OCShare.READ_PERMISSION_FLAG + OCShare.UPDATE_PERMISSION_FLAG
assertTrue(SharePermissionManager.hasPermission(permission, OCShare.UPDATE_PERMISSION_FLAG))
}

@Test
fun testHasPermissionShouldReturnFalseIfPermissionNotPresent() {
val permission = OCShare.READ_PERMISSION_FLAG
assertFalse(SharePermissionManager.hasPermission(permission, OCShare.UPDATE_PERMISSION_FLAG))
}
// endregion

// region Helper Method Tests
@Test
fun testCanEditShouldReturnTrueIfAllPermissionsPresent() {
val share = createShare(OCShare.MAXIMUM_PERMISSIONS_FOR_FOLDER, isFolder = true)
assertTrue(SharePermissionManager.canEdit(share))
}

@Test
fun testCanEditShouldReturnFalseIfPermissionsAreInsufficient() {
val share = createShare(OCShare.READ_PERMISSION_FLAG)
assertFalse(SharePermissionManager.canEdit(share))
}

@Test
fun testIsViewOnlyShouldReturnTrueIfOnlyReadPermissionSet() {
val share = createShare(OCShare.READ_PERMISSION_FLAG)
assertTrue(SharePermissionManager.isViewOnly(share))
}

@Test
fun testIsFileRequestShouldReturnTrueIfOnlyCreatePermissionSetOnFolder() {
val share = createShare(OCShare.CREATE_PERMISSION_FLAG, isFolder = true)
assertTrue(SharePermissionManager.isFileRequest(share))
}

@Test
fun testIsFileRequestShouldReturnFalseIfOnlyCreatePermissionSetOnFile() {
val share = createShare(OCShare.CREATE_PERMISSION_FLAG)
assertFalse(SharePermissionManager.isFileRequest(share))
}

@Test
fun testIsSecureFileDropShouldReturnTrueIfReadAndCreatePermissionsPresent() {
val permission = OCShare.READ_PERMISSION_FLAG + OCShare.CREATE_PERMISSION_FLAG
val share = createShare(permission)
assertTrue(SharePermissionManager.isSecureFileDrop(share))
}

@Test
fun testCanReshareShouldReturnTrueIfSharePermissionIsPresent() {
val share = createShare(OCShare.SHARE_PERMISSION_FLAG)
assertTrue(SharePermissionManager.canReshare(share))
}

@Test
fun testGetMaximumPermissionForFolder() {
assertEquals(
OCShare.MAXIMUM_PERMISSIONS_FOR_FOLDER,
SharePermissionManager.getMaximumPermission(isFolder = true)
)
}

@Test
fun testGetMaximumPermissionForFile() {
assertEquals(
OCShare.MAXIMUM_PERMISSIONS_FOR_FILE,
SharePermissionManager.getMaximumPermission(isFolder = false)
)
}
// endregion

// region GetSelectedTypeTests
@Test
fun testGetSelectedTypeShouldReturnCanEditWhenFullPermissionsGiven() {
val share = createShare(OCShare.MAXIMUM_PERMISSIONS_FOR_FILE)
assertEquals(QuickPermissionType.CAN_EDIT, SharePermissionManager.getSelectedType(share, encrypted = false))
}

@Test
fun testGetSelectedTypeShouldReturnSecureFileDropWhenEncryptedAndReadCreateGiven() {
val permission = OCShare.READ_PERMISSION_FLAG + OCShare.CREATE_PERMISSION_FLAG
val share = createShare(permission)
assertEquals(
QuickPermissionType.SECURE_FILE_DROP,
SharePermissionManager.getSelectedType(share, encrypted = true)
)
}

@Test
fun testGetSelectedTypeShouldReturnFileRequestWhenCreatePermissionGiven() {
val share = createShare(OCShare.CREATE_PERMISSION_FLAG, isFolder = true)
assertEquals(QuickPermissionType.FILE_REQUEST, SharePermissionManager.getSelectedType(share, encrypted = false))
}

@Test
fun testGetSelectedTypeShouldReturnViewOnlyWhenReadPermissionGiven() {
val share = createShare(OCShare.READ_PERMISSION_FLAG)
assertEquals(QuickPermissionType.VIEW_ONLY, SharePermissionManager.getSelectedType(share, encrypted = false))
}

@Test
fun testGetSelectedTypeShouldReturnCustomPermissionOnlyWhenCustomPermissionGiven() {
val share = createShare(OCShare.READ_PERMISSION_FLAG + OCShare.UPDATE_PERMISSION_FLAG)
assertEquals(
QuickPermissionType.CUSTOM_PERMISSIONS,
SharePermissionManager.getSelectedType(share, encrypted = false)
)
}

@Test
fun testGetSelectedTypeShouldReturnNoneOnlyWhenNoPermissionGiven() {
val share = createShare(OCShare.NO_PERMISSION)
assertEquals(
QuickPermissionType.NONE,
SharePermissionManager.getSelectedType(share, encrypted = false)
)
}
// endregion

// region CustomPermissions Tests
@Test
fun testIsCustomPermissionShouldReturnFalseWhenNoPermissionsGiven() {
val permission = OCShare.NO_PERMISSION
val share = createShare(permission, isFolder = false)
assertFalse(SharePermissionManager.isCustomPermission(share))
}

@Test
fun testIsCustomPermissionShouldReturnFalseWhenNoReadPermissionsGiven() {
val permission = OCShare.SHARE_PERMISSION_FLAG + OCShare.UPDATE_PERMISSION_FLAG
val share = createShare(permission, isFolder = false)
assertFalse(SharePermissionManager.isCustomPermission(share))
}

@Test
fun testIsCustomPermissionShouldReturnTrueWhenUpdatePermissionsGivenOnFile() {
val permission = OCShare.READ_PERMISSION_FLAG + OCShare.UPDATE_PERMISSION_FLAG
val share = createShare(permission, isFolder = false)
assertTrue(SharePermissionManager.isCustomPermission(share))
}

@Test
fun testIsCustomPermissionShouldReturnTrueWhenUpdateAndSharePermissionsGivenOnFile() {
val permission = OCShare.READ_PERMISSION_FLAG + OCShare.UPDATE_PERMISSION_FLAG + OCShare.SHARE_PERMISSION_FLAG
val share = createShare(permission, isFolder = false)
assertTrue(SharePermissionManager.isCustomPermission(share))
}

@Test
fun testIsCustomPermissionShouldReturnFalseWhenCreatePermissionsGivenOnFile() {
val permission = OCShare.READ_PERMISSION_FLAG + OCShare.CREATE_PERMISSION_FLAG
val share = createShare(permission, isFolder = false)
assertFalse(SharePermissionManager.isCustomPermission(share))
}

@Test
fun testIsCustomPermissionShouldReturnFalseWhenDeletePermissionsGivenOnFile() {
val permission = OCShare.READ_PERMISSION_FLAG + OCShare.DELETE_PERMISSION_FLAG
val share = createShare(permission, isFolder = false)
assertFalse(SharePermissionManager.isCustomPermission(share))
}

@Test
fun testIsCustomPermissionShouldReturnTrueWhenCreatePermissionsGivenOnFolder() {
val permission = OCShare.READ_PERMISSION_FLAG + OCShare.CREATE_PERMISSION_FLAG
val share = createShare(permission, isFolder = true)
assertTrue(SharePermissionManager.isCustomPermission(share))
}

@Test
fun testIsCustomPermissionShouldReturnTrueWhenMixedPermissionsOnFile() {
val permission = OCShare.READ_PERMISSION_FLAG + OCShare.UPDATE_PERMISSION_FLAG
val share = createShare(permission, isFolder = false)
assertTrue(SharePermissionManager.isCustomPermission(share))
}
// endregion

// region Attributes Tests
@Test
fun testToggleAllowDownloadAndSyncShouldCreateAttributeJsonIfNoneExists() {
val json = SharePermissionManager.toggleAllowDownloadAndSync(true, null)
assertNotNull(json)
val downloadAttribute = ShareAttributes.createDownloadAttributes(true)
val expectedJson = Gson().toJson(listOf(downloadAttribute))
assertEquals(json, expectedJson)
}

@Test
fun testIsAllowDownloadAndSyncEnabledShouldReturnFalseIfAttributeIsMissing() {
val share = createShare(OCShare.READ_PERMISSION_FLAG, attributesJson = null)
assertFalse(SharePermissionManager.isAllowDownloadAndSyncEnabled(share))
}
// endregion
}
Loading
Loading