FileDetailSharingFragmentIT.kt 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604
  1. /*
  2. *
  3. * Nextcloud Android client application
  4. *
  5. * @author Tobias Kaminsky
  6. * Copyright (C) 2020 Tobias Kaminsky
  7. * Copyright (C) 2020 Nextcloud GmbH
  8. *
  9. * This program is free software: you can redistribute it and/or modify
  10. * it under the terms of the GNU Affero General Public License as published by
  11. * the Free Software Foundation, either version 3 of the License, or
  12. * (at your option) any later version.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU Affero General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU Affero General Public License
  20. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  21. */
  22. package com.owncloud.android.ui.fragment
  23. import android.Manifest
  24. import android.widget.ImageView
  25. import androidx.appcompat.widget.PopupMenu
  26. import androidx.test.espresso.intent.rule.IntentsTestRule
  27. import androidx.test.rule.GrantPermissionRule
  28. import com.nextcloud.client.TestActivity
  29. import com.owncloud.android.AbstractIT
  30. import com.owncloud.android.R
  31. import com.owncloud.android.datamodel.OCFile
  32. import com.owncloud.android.lib.resources.shares.OCShare
  33. import com.owncloud.android.lib.resources.shares.OCShare.CREATE_PERMISSION_FLAG
  34. import com.owncloud.android.lib.resources.shares.OCShare.DELETE_PERMISSION_FLAG
  35. import com.owncloud.android.lib.resources.shares.OCShare.MAXIMUM_PERMISSIONS_FOR_FILE
  36. import com.owncloud.android.lib.resources.shares.OCShare.MAXIMUM_PERMISSIONS_FOR_FOLDER
  37. import com.owncloud.android.lib.resources.shares.OCShare.NO_PERMISSION
  38. import com.owncloud.android.lib.resources.shares.OCShare.READ_PERMISSION_FLAG
  39. import com.owncloud.android.lib.resources.shares.OCShare.SHARE_PERMISSION_FLAG
  40. import com.owncloud.android.lib.resources.shares.ShareType
  41. import com.owncloud.android.utils.ScreenshotTest
  42. import org.junit.After
  43. import org.junit.Assert.assertFalse
  44. import org.junit.Assert.assertTrue
  45. import org.junit.Before
  46. import org.junit.Rule
  47. import org.junit.Test
  48. class FileDetailSharingFragmentIT : AbstractIT() {
  49. @get:Rule
  50. val testActivityRule = IntentsTestRule(TestActivity::class.java, true, false)
  51. @get:Rule
  52. val permissionRule: GrantPermissionRule = GrantPermissionRule.grant(Manifest.permission.WRITE_EXTERNAL_STORAGE)
  53. lateinit var file: OCFile
  54. lateinit var folder: OCFile
  55. lateinit var activity: TestActivity
  56. @Before
  57. fun before() {
  58. activity = testActivityRule.launchActivity(null)
  59. file = OCFile("/test.md").apply {
  60. parentId = activity.storageManager.getFileByEncryptedRemotePath("/").fileId
  61. permissions = OCFile.PERMISSION_CAN_RESHARE
  62. }
  63. folder = OCFile("/test").apply {
  64. setFolder()
  65. parentId = activity.storageManager.getFileByEncryptedRemotePath("/").fileId
  66. permissions = OCFile.PERMISSION_CAN_RESHARE
  67. }
  68. }
  69. @Test
  70. @ScreenshotTest
  71. fun listSharesFileNone() {
  72. show(file)
  73. }
  74. @Test
  75. @ScreenshotTest
  76. fun listSharesFileResharingNotAllowed() {
  77. file.permissions = ""
  78. show(file)
  79. }
  80. @Test
  81. @ScreenshotTest
  82. @Suppress("MagicNumber")
  83. fun listSharesFileAllShareTypes() {
  84. OCShare(file.decryptedRemotePath).apply {
  85. remoteId = 1
  86. shareType = ShareType.USER
  87. sharedWithDisplayName = "Admin"
  88. permissions = MAXIMUM_PERMISSIONS_FOR_FILE
  89. userId = getUserId(user)
  90. activity.storageManager.saveShare(this)
  91. }
  92. OCShare(file.decryptedRemotePath).apply {
  93. remoteId = 2
  94. shareType = ShareType.GROUP
  95. sharedWithDisplayName = "Group"
  96. permissions = MAXIMUM_PERMISSIONS_FOR_FILE
  97. userId = getUserId(user)
  98. activity.storageManager.saveShare(this)
  99. }
  100. OCShare(file.decryptedRemotePath).apply {
  101. remoteId = 3
  102. shareType = ShareType.EMAIL
  103. sharedWithDisplayName = "admin@nextcloud.server.com"
  104. userId = getUserId(user)
  105. activity.storageManager.saveShare(this)
  106. }
  107. OCShare(file.decryptedRemotePath).apply {
  108. remoteId = 4
  109. shareType = ShareType.PUBLIC_LINK
  110. sharedWithDisplayName = "Customer"
  111. activity.storageManager.saveShare(this)
  112. }
  113. OCShare(file.decryptedRemotePath).apply {
  114. remoteId = 5
  115. shareType = ShareType.PUBLIC_LINK
  116. sharedWithDisplayName = "Colleagues"
  117. activity.storageManager.saveShare(this)
  118. }
  119. OCShare(file.decryptedRemotePath).apply {
  120. remoteId = 6
  121. shareType = ShareType.FEDERATED
  122. sharedWithDisplayName = "admin@nextcloud.remoteserver.com"
  123. permissions = OCShare.FEDERATED_PERMISSIONS_FOR_FILE
  124. userId = getUserId(user)
  125. activity.storageManager.saveShare(this)
  126. }
  127. OCShare(file.decryptedRemotePath).apply {
  128. remoteId = 7
  129. shareType = ShareType.CIRCLE
  130. sharedWithDisplayName = "Private circle"
  131. permissions = SHARE_PERMISSION_FLAG
  132. userId = getUserId(user)
  133. activity.storageManager.saveShare(this)
  134. }
  135. OCShare(file.decryptedRemotePath).apply {
  136. remoteId = 8
  137. shareType = ShareType.ROOM
  138. sharedWithDisplayName = "Meeting"
  139. permissions = SHARE_PERMISSION_FLAG
  140. userId = getUserId(user)
  141. activity.storageManager.saveShare(this)
  142. }
  143. show(file)
  144. }
  145. private fun show(file: OCFile) {
  146. val fragment = FileDetailSharingFragment.newInstance(file, user)
  147. activity.addFragment(fragment)
  148. waitForIdleSync()
  149. screenshot(activity)
  150. }
  151. @Test
  152. @Suppress("MagicNumber")
  153. // public link and email are handled the same way
  154. fun publicLinkOptionMenuFolder() {
  155. val sut = FileDetailSharingFragment.newInstance(file, user)
  156. activity.addFragment(sut)
  157. shortSleep()
  158. sut.refreshCapabilitiesFromDB()
  159. val overflowMenuShareLink = ImageView(targetContext)
  160. val popup = PopupMenu(targetContext, overflowMenuShareLink)
  161. popup.inflate(R.menu.fragment_file_detail_sharing_public_link)
  162. val publicShare = OCShare().apply {
  163. isFolder = true
  164. shareType = ShareType.PUBLIC_LINK
  165. permissions = 17
  166. }
  167. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  168. // check if items are visible
  169. assertTrue(popup.menu.findItem(R.id.action_hide_file_download).isVisible)
  170. assertTrue(popup.menu.findItem(R.id.action_password).isVisible)
  171. assertTrue(popup.menu.findItem(R.id.action_share_expiration_date).isVisible)
  172. assertTrue(popup.menu.findItem(R.id.action_share_send_link).isVisible)
  173. assertTrue(popup.menu.findItem(R.id.action_share_send_note).isVisible)
  174. assertTrue(popup.menu.findItem(R.id.action_edit_label).isVisible)
  175. assertTrue(popup.menu.findItem(R.id.action_unshare).isVisible)
  176. assertTrue(popup.menu.findItem(R.id.action_add_another_public_share_link).isVisible)
  177. // read-only
  178. assertTrue(popup.menu.findItem(R.id.link_share_read_only).isChecked)
  179. assertFalse(popup.menu.findItem(R.id.link_share_allow_upload_and_editing).isChecked)
  180. assertFalse(popup.menu.findItem(R.id.link_share_file_drop).isChecked)
  181. // upload and editing
  182. publicShare.permissions = MAXIMUM_PERMISSIONS_FOR_FOLDER
  183. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  184. assertFalse(popup.menu.findItem(R.id.link_share_read_only).isChecked)
  185. assertTrue(popup.menu.findItem(R.id.link_share_allow_upload_and_editing).isChecked)
  186. assertFalse(popup.menu.findItem(R.id.link_share_file_drop).isChecked)
  187. // file drop
  188. publicShare.permissions = 4
  189. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  190. assertFalse(popup.menu.findItem(R.id.link_share_read_only).isChecked)
  191. assertFalse(popup.menu.findItem(R.id.link_share_allow_upload_and_editing).isChecked)
  192. assertTrue(popup.menu.findItem(R.id.link_share_file_drop).isChecked)
  193. // password protection
  194. publicShare.shareWith = "someValue"
  195. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  196. assertTrue(popup.menu.findItem(R.id.action_password).title ==
  197. targetContext.getString(R.string.share_password_title))
  198. publicShare.shareWith = ""
  199. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  200. assertTrue(popup.menu.findItem(R.id.action_password).title ==
  201. targetContext.getString(R.string.share_no_password_title))
  202. // hide download
  203. publicShare.isHideFileDownload = true
  204. publicShare.permissions = MAXIMUM_PERMISSIONS_FOR_FOLDER
  205. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  206. assertTrue(popup.menu.findItem(R.id.action_hide_file_download).isChecked)
  207. publicShare.isHideFileDownload = false
  208. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  209. assertFalse(popup.menu.findItem(R.id.action_hide_file_download).isChecked)
  210. publicShare.expirationDate = 1582019340000
  211. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  212. assertTrue(popup.menu.findItem(R.id.action_share_expiration_date).title.startsWith(
  213. targetContext.getString(R.string.share_expiration_date_label).split(" ")[0]))
  214. publicShare.expirationDate = 0
  215. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  216. assertTrue(popup.menu.findItem(R.id.action_share_expiration_date).title ==
  217. targetContext.getString(R.string.share_no_expiration_date_label))
  218. // file
  219. publicShare.isFolder = false
  220. publicShare.permissions = READ_PERMISSION_FLAG
  221. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  222. // check if items are visible
  223. assertTrue(popup.menu.findItem(R.id.action_hide_file_download).isVisible)
  224. assertTrue(popup.menu.findItem(R.id.action_password).isVisible)
  225. assertTrue(popup.menu.findItem(R.id.action_share_expiration_date).isVisible)
  226. assertTrue(popup.menu.findItem(R.id.action_share_send_link).isVisible)
  227. assertTrue(popup.menu.findItem(R.id.action_share_send_note).isVisible)
  228. assertTrue(popup.menu.findItem(R.id.action_edit_label).isVisible)
  229. assertTrue(popup.menu.findItem(R.id.action_unshare).isVisible)
  230. assertTrue(popup.menu.findItem(R.id.action_add_another_public_share_link).isVisible)
  231. assertFalse(popup.menu.findItem(R.id.link_share_read_only).isVisible)
  232. assertFalse(popup.menu.findItem(R.id.link_share_allow_upload_and_editing).isVisible)
  233. assertFalse(popup.menu.findItem(R.id.link_share_file_drop).isVisible)
  234. assertTrue(popup.menu.findItem(R.id.allow_editing).isVisible)
  235. // allow editing
  236. publicShare.permissions = 17 // from server
  237. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  238. assertFalse(popup.menu.findItem(R.id.allow_editing).isChecked)
  239. publicShare.permissions = 19 // from server
  240. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  241. assertTrue(popup.menu.findItem(R.id.allow_editing).isChecked)
  242. // hide download
  243. publicShare.isHideFileDownload = true
  244. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  245. assertTrue(popup.menu.findItem(R.id.action_hide_file_download).isChecked)
  246. publicShare.isHideFileDownload = false
  247. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  248. assertFalse(popup.menu.findItem(R.id.action_hide_file_download).isChecked)
  249. // password protection
  250. publicShare.isPasswordProtected = true
  251. publicShare.shareWith = "someValue"
  252. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  253. assertTrue(popup.menu.findItem(R.id.action_password).title ==
  254. targetContext.getString(R.string.share_password_title))
  255. publicShare.isPasswordProtected = false
  256. publicShare.shareWith = ""
  257. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  258. assertTrue(popup.menu.findItem(R.id.action_password).title ==
  259. targetContext.getString(R.string.share_no_password_title))
  260. // expires
  261. publicShare.expirationDate = 1582019340
  262. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  263. assertTrue(popup.menu.findItem(R.id.action_share_expiration_date).title.startsWith(
  264. targetContext.getString(R.string.share_expiration_date_label).split(" ")[0]))
  265. publicShare.expirationDate = 0
  266. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  267. assertTrue(popup.menu.findItem(R.id.action_share_expiration_date).title ==
  268. targetContext.getString(R.string.share_no_expiration_date_label))
  269. }
  270. @Test
  271. @Suppress("MagicNumber")
  272. // public link and email are handled the same way
  273. fun publicLinkOptionMenuFile() {
  274. val sut = FileDetailSharingFragment.newInstance(file, user)
  275. activity.addFragment(sut)
  276. shortSleep()
  277. sut.refreshCapabilitiesFromDB()
  278. val overflowMenuShareLink = ImageView(targetContext)
  279. val popup = PopupMenu(targetContext, overflowMenuShareLink)
  280. popup.inflate(R.menu.fragment_file_detail_sharing_public_link)
  281. val publicShare = OCShare().apply {
  282. isFolder = false
  283. shareType = ShareType.PUBLIC_LINK
  284. permissions = 17
  285. }
  286. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  287. // check if items are visible
  288. assertTrue(popup.menu.findItem(R.id.action_hide_file_download).isVisible)
  289. assertTrue(popup.menu.findItem(R.id.action_password).isVisible)
  290. assertTrue(popup.menu.findItem(R.id.action_share_expiration_date).isVisible)
  291. assertTrue(popup.menu.findItem(R.id.action_share_send_link).isVisible)
  292. assertTrue(popup.menu.findItem(R.id.action_share_send_note).isVisible)
  293. assertTrue(popup.menu.findItem(R.id.action_edit_label).isVisible)
  294. assertTrue(popup.menu.findItem(R.id.action_unshare).isVisible)
  295. assertTrue(popup.menu.findItem(R.id.action_add_another_public_share_link).isVisible)
  296. assertFalse(popup.menu.findItem(R.id.link_share_read_only).isVisible)
  297. assertFalse(popup.menu.findItem(R.id.link_share_allow_upload_and_editing).isVisible)
  298. assertFalse(popup.menu.findItem(R.id.link_share_file_drop).isVisible)
  299. assertTrue(popup.menu.findItem(R.id.allow_editing).isVisible)
  300. // password protection
  301. publicShare.shareWith = "someValue"
  302. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  303. assertTrue(popup.menu.findItem(R.id.action_password).title ==
  304. targetContext.getString(R.string.share_password_title))
  305. publicShare.shareWith = ""
  306. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  307. assertTrue(popup.menu.findItem(R.id.action_password).title ==
  308. targetContext.getString(R.string.share_no_password_title))
  309. // hide download
  310. publicShare.isHideFileDownload = true
  311. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  312. assertTrue(popup.menu.findItem(R.id.action_hide_file_download).isChecked)
  313. publicShare.isHideFileDownload = false
  314. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  315. assertFalse(popup.menu.findItem(R.id.action_hide_file_download).isChecked)
  316. // expiration date
  317. publicShare.expirationDate = 1582019340000
  318. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  319. assertTrue(popup.menu.findItem(R.id.action_share_expiration_date).title.startsWith(
  320. targetContext.getString(R.string.share_expiration_date_label).split(" ")[0]))
  321. publicShare.expirationDate = 0
  322. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  323. assertTrue(popup.menu.findItem(R.id.action_share_expiration_date).title ==
  324. targetContext.getString(R.string.share_no_expiration_date_label))
  325. publicShare.isFolder = false
  326. publicShare.permissions = READ_PERMISSION_FLAG
  327. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  328. // allow editing
  329. publicShare.permissions = 17 // from server
  330. assertFalse(popup.menu.findItem(R.id.allow_editing).isChecked)
  331. publicShare.permissions = 19 // from server
  332. sut.prepareLinkOptionsMenu(popup.menu, publicShare)
  333. assertTrue(popup.menu.findItem(R.id.allow_editing).isChecked)
  334. }
  335. @Test
  336. @Suppress("MagicNumber")
  337. // also applies for
  338. // group
  339. // conversation
  340. // circle
  341. // federated share
  342. fun userOptionMenuFile() {
  343. val sut = FileDetailSharingFragment.newInstance(file, user)
  344. activity.addFragment(sut)
  345. shortSleep()
  346. sut.refreshCapabilitiesFromDB()
  347. val overflowMenuShareLink = ImageView(targetContext)
  348. val popup = PopupMenu(targetContext, overflowMenuShareLink)
  349. popup.inflate(R.menu.item_user_sharing_settings)
  350. val userShare = OCShare().apply {
  351. isFolder = false
  352. shareType = ShareType.USER
  353. permissions = 17
  354. }
  355. sut.prepareUserOptionsMenu(popup.menu, userShare)
  356. assertFalse(popup.menu.findItem(R.id.allow_creating).isVisible)
  357. assertFalse(popup.menu.findItem(R.id.allow_deleting).isVisible)
  358. // allow editing
  359. userShare.permissions = 17 // from server
  360. assertFalse(popup.menu.findItem(R.id.allow_editing).isChecked)
  361. userShare.permissions = 19 // from server
  362. sut.prepareUserOptionsMenu(popup.menu, userShare)
  363. assertTrue(popup.menu.findItem(R.id.allow_editing).isChecked)
  364. // allow reshare
  365. userShare.permissions = 1 // from server
  366. sut.prepareUserOptionsMenu(popup.menu, userShare)
  367. assertFalse(popup.menu.findItem(R.id.allow_resharing).isChecked)
  368. userShare.permissions = 17 // from server
  369. sut.prepareUserOptionsMenu(popup.menu, userShare)
  370. assertTrue(popup.menu.findItem(R.id.allow_resharing).isChecked)
  371. // set expiration date
  372. userShare.expirationDate = 1582019340000
  373. sut.prepareUserOptionsMenu(popup.menu, userShare)
  374. assertTrue(popup.menu.findItem(R.id.action_expiration_date).title.startsWith(
  375. targetContext.getString(R.string.share_expiration_date_label).split(" ")[0]))
  376. userShare.expirationDate = 0
  377. sut.prepareUserOptionsMenu(popup.menu, userShare)
  378. assertTrue(popup.menu.findItem(R.id.action_expiration_date).title ==
  379. targetContext.getString(R.string.share_no_expiration_date_label))
  380. // note
  381. assertTrue(popup.menu.findItem(R.id.action_share_send_note).isVisible)
  382. }
  383. @Test
  384. @Suppress("MagicNumber")
  385. // also applies for
  386. // group
  387. // conversation
  388. // circle
  389. // federated share
  390. fun userOptionMenuFolder() {
  391. val sut = FileDetailSharingFragment.newInstance(file, user)
  392. activity.addFragment(sut)
  393. shortSleep()
  394. sut.refreshCapabilitiesFromDB()
  395. val overflowMenuShareLink = ImageView(targetContext)
  396. val popup = PopupMenu(targetContext, overflowMenuShareLink)
  397. popup.inflate(R.menu.item_user_sharing_settings)
  398. val userShare = OCShare().apply {
  399. isFolder = true
  400. shareType = ShareType.USER
  401. permissions = 17
  402. }
  403. sut.prepareUserOptionsMenu(popup.menu, userShare)
  404. assertTrue(popup.menu.findItem(R.id.allow_creating).isVisible)
  405. assertTrue(popup.menu.findItem(R.id.allow_deleting).isVisible)
  406. // allow editing
  407. userShare.permissions = 17 // from server
  408. assertFalse(popup.menu.findItem(R.id.allow_editing).isChecked)
  409. userShare.permissions = 19 // from server
  410. sut.prepareUserOptionsMenu(popup.menu, userShare)
  411. assertTrue(popup.menu.findItem(R.id.allow_editing).isChecked)
  412. // allow reshare
  413. userShare.permissions = 1 // from server
  414. sut.prepareUserOptionsMenu(popup.menu, userShare)
  415. assertFalse(popup.menu.findItem(R.id.allow_resharing).isChecked)
  416. userShare.permissions = 17 // from server
  417. sut.prepareUserOptionsMenu(popup.menu, userShare)
  418. assertTrue(popup.menu.findItem(R.id.allow_resharing).isChecked)
  419. // set expiration date
  420. userShare.expirationDate = 1582019340000
  421. sut.prepareUserOptionsMenu(popup.menu, userShare)
  422. assertTrue(popup.menu.findItem(R.id.action_expiration_date).title.startsWith(
  423. targetContext.getString(R.string.share_expiration_date_label).split(" ")[0]))
  424. userShare.expirationDate = 0
  425. sut.prepareUserOptionsMenu(popup.menu, userShare)
  426. assertTrue(popup.menu.findItem(R.id.action_expiration_date).title ==
  427. targetContext.getString(R.string.share_no_expiration_date_label))
  428. // note
  429. assertTrue(popup.menu.findItem(R.id.action_share_send_note).isVisible)
  430. }
  431. @Test
  432. fun testUploadAndEditingSharePermissions() {
  433. val sut = FileDetailSharingFragment()
  434. val share = OCShare().apply {
  435. permissions = MAXIMUM_PERMISSIONS_FOR_FOLDER
  436. }
  437. assertTrue(sut.isUploadAndEditingAllowed(share))
  438. share.permissions = NO_PERMISSION
  439. assertFalse(sut.isUploadAndEditingAllowed(share))
  440. share.permissions = READ_PERMISSION_FLAG
  441. assertFalse(sut.isUploadAndEditingAllowed(share))
  442. share.permissions = CREATE_PERMISSION_FLAG
  443. assertFalse(sut.isUploadAndEditingAllowed(share))
  444. share.permissions = DELETE_PERMISSION_FLAG
  445. assertFalse(sut.isUploadAndEditingAllowed(share))
  446. share.permissions = SHARE_PERMISSION_FLAG
  447. assertFalse(sut.isUploadAndEditingAllowed(share))
  448. }
  449. @Test
  450. @Suppress("MagicNumber")
  451. fun testReadOnlySharePermissions() {
  452. val sut = FileDetailSharingFragment()
  453. val share = OCShare().apply {
  454. permissions = 17
  455. }
  456. assertTrue(sut.isReadOnly(share))
  457. share.permissions = NO_PERMISSION
  458. assertFalse(sut.isReadOnly(share))
  459. share.permissions = READ_PERMISSION_FLAG
  460. assertTrue(sut.isReadOnly(share))
  461. share.permissions = CREATE_PERMISSION_FLAG
  462. assertFalse(sut.isReadOnly(share))
  463. share.permissions = DELETE_PERMISSION_FLAG
  464. assertFalse(sut.isReadOnly(share))
  465. share.permissions = SHARE_PERMISSION_FLAG
  466. assertFalse(sut.isReadOnly(share))
  467. share.permissions = MAXIMUM_PERMISSIONS_FOR_FOLDER
  468. assertFalse(sut.isReadOnly(share))
  469. share.permissions = MAXIMUM_PERMISSIONS_FOR_FILE
  470. assertFalse(sut.isReadOnly(share))
  471. }
  472. @Test
  473. @Suppress("MagicNumber")
  474. fun testFileDropSharePermissions() {
  475. val sut = FileDetailSharingFragment()
  476. val share = OCShare().apply {
  477. permissions = 4
  478. }
  479. assertTrue(sut.isFileDrop(share))
  480. share.permissions = NO_PERMISSION
  481. assertFalse(sut.isFileDrop(share))
  482. share.permissions = READ_PERMISSION_FLAG
  483. assertFalse(sut.isFileDrop(share))
  484. share.permissions = CREATE_PERMISSION_FLAG
  485. assertTrue(sut.isFileDrop(share))
  486. share.permissions = DELETE_PERMISSION_FLAG
  487. assertFalse(sut.isFileDrop(share))
  488. share.permissions = SHARE_PERMISSION_FLAG
  489. assertFalse(sut.isFileDrop(share))
  490. share.permissions = MAXIMUM_PERMISSIONS_FOR_FOLDER
  491. assertFalse(sut.isFileDrop(share))
  492. share.permissions = MAXIMUM_PERMISSIONS_FOR_FILE
  493. assertFalse(sut.isFileDrop(share))
  494. }
  495. @After
  496. fun after() {
  497. activity.storageManager.cleanShares()
  498. }
  499. }