aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Calviño Sánchez <danxuliu@gmail.com>2024-03-31 03:21:42 +0200
committerDaniel Calviño Sánchez <danxuliu@gmail.com>2024-04-02 03:02:19 +0200
commit718560a4a4e16b0af9cfc7edce80fe23364fb2f5 (patch)
tree0d3756df006a4f2fbedec3148013ebbde39b9ca0
parent3749b31f4e5f03f775cf997f3daea75d0e165dbd (diff)
downloadnextcloud-server-fix-federated-group-shares-when-no-longer-found-in-remote-server.tar.gz
nextcloud-server-fix-federated-group-shares-when-no-longer-found-in-remote-server.zip
test: Add unit tests for removing federated group sharesfix-federated-group-shares-when-no-longer-found-in-remote-server
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
-rw-r--r--apps/files_sharing/tests/External/ManagerTest.php207
1 files changed, 207 insertions, 0 deletions
diff --git a/apps/files_sharing/tests/External/ManagerTest.php b/apps/files_sharing/tests/External/ManagerTest.php
index 349c24f77c8..da8f336014c 100644
--- a/apps/files_sharing/tests/External/ManagerTest.php
+++ b/apps/files_sharing/tests/External/ManagerTest.php
@@ -672,6 +672,213 @@ class ManagerTest extends TestCase {
$this->verifyAcceptedGroupShare($shareData);
}
+ public function testRemoveGroupShare() {
+ [$shareData, $groupShare] = $this->createTestGroupShare();
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+
+ // Setup mounts to remove share through mountpoint
+ $this->setupMounts();
+
+ $this->manager->removeShare($this->uid . '/files/' . $groupShare['name']);
+
+ // Refresh mounts after removing share
+ $this->setupMounts();
+
+ $this->assertNotMount($groupShare['name']);
+
+ $openShares = $this->manager->getOpenShares();
+ $this->assertCount(1, $openShares);
+ // After removing/declining a group share the sub-share of the user
+ // rather than the group share is listed, so the mountpoint is no longer
+ // a temporary one, even if it was removed.
+ $this->assertExternalShareEntry($shareData, $openShares[0], 1, $shareData['name'], $this->uid);
+
+ $acceptedShares = $this->manager->getAcceptedShares();
+ $this->assertCount(0, $acceptedShares);
+ }
+
+ public function testRemoveGroupShareWhenAcceptedByOtherUser() {
+ $manager2 = $this->createManagerForUser($this->uid2);
+
+ [$shareData, $groupShare] = $this->createTestGroupShare();
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+ $this->assertTrue($manager2->acceptShare($groupShare['id']));
+
+ // Setup mounts to remove share through mountpoint
+ $this->setupMounts();
+
+ $this->manager->removeShare($this->uid . '/files/' . $groupShare['name']);
+
+ // Refresh mounts after removing share
+ $this->setupMounts();
+
+ $openShares = $this->manager->getOpenShares();
+ $this->assertCount(1, $openShares);
+ // After removing/declining a group share the sub-share of the user
+ // rather than the group share is listed, so the mountpoint is no longer
+ // a temporary one, even if it was removed.
+ $this->assertExternalShareEntry($shareData, $openShares[0], 1, $shareData['name'], $this->uid);
+
+ $acceptedShares = $this->manager->getAcceptedShares();
+ $this->assertCount(0, $acceptedShares);
+
+ $user2OpenShares = $manager2->getOpenShares();
+ $this->assertCount(0, $user2OpenShares);
+
+ $user2ShareData = $shareData;
+ $user2ShareData['accepted'] = true;
+
+ $user2AcceptedShares = $manager2->getAcceptedShares();
+ $this->assertCount(1, $user2AcceptedShares);
+ $this->assertExternalShareEntry($user2ShareData, $user2AcceptedShares[0], 1, $shareData['name'], $this->uid2);
+ }
+
+ public function testRemoveGroupShareWhenThereAreSeveralShares() {
+ $manager2 = $this->createManagerForUser($this->uid2);
+
+ [$shareData1, $groupShare1] = $this->createTestGroupShare('group1', 'token1', '/SharedFolder', '2341');
+ $this->assertTrue($this->manager->acceptShare($groupShare1['id']));
+ [$shareData2, $groupShare2] = $this->createTestGroupShare('group1', 'token2', '/SharedFolder2', '2342');
+ $this->assertTrue($this->manager->acceptShare($groupShare2['id']));
+ [$shareData3, $groupShare3] = $this->createTestGroupShare('group1', 'token3', '/SharedFolder3', '2343');
+ [$shareData4, $groupShare4] = $this->createTestGroupShare('group2', 'token4', '/SharedFolder4', '2344');
+ [$shareData5, $groupShare5] = $this->createTestGroupShare('group3', 'token1', '/SharedFolder', '2341', $manager2);
+ $this->assertTrue($manager2->acceptShare($groupShare5['id']));
+
+ // Setup mounts to remove share through mountpoint
+ $this->setupMounts();
+
+ $this->manager->removeShare($this->uid . '/files/' . $groupShare2['name']);
+
+ // Refresh mounts after removing share
+ $this->setupMounts();
+
+ $this->assertNotMount($groupShare2['name']);
+
+ $openShares = $this->manager->getOpenShares();
+ $this->assertCount(3, $openShares);
+ // After removing/declining a group share the sub-share of the user
+ // rather than the group share is listed, so the mountpoint is no longer
+ // a temporary one, even if it was removed.
+ $this->assertExternalShareEntry($shareData2, $openShares[0], 2, $shareData2['name'], $this->uid);
+ $this->assertExternalShareEntry($shareData3, $openShares[1], 3, '{{TemporaryMountPointName#' . $shareData3['name'] . '}}', 'group1');
+ $this->assertExternalShareEntry($shareData4, $openShares[2], 4, '{{TemporaryMountPointName#' . $shareData4['name'] . '}}', 'group2');
+
+ $user1ShareData1 = $shareData1;
+ $user1ShareData1['accepted'] = true;
+
+ $acceptedShares = $this->manager->getAcceptedShares();
+ $this->assertCount(1, $acceptedShares);
+ $this->assertExternalShareEntry($user1ShareData1, $acceptedShares[0], 1, $user1ShareData1['name'], $this->uid);
+
+ $user2OpenShares = $manager2->getOpenShares();
+ $this->assertCount(3, $user2OpenShares);
+ $this->assertExternalShareEntry($shareData1, $user2OpenShares[0], 1, '{{TemporaryMountPointName#' . $shareData1['name'] . '}}', 'group1');
+ $this->assertExternalShareEntry($shareData2, $user2OpenShares[1], 2, '{{TemporaryMountPointName#' . $shareData2['name'] . '}}', 'group1');
+ $this->assertExternalShareEntry($shareData3, $user2OpenShares[2], 3, '{{TemporaryMountPointName#' . $shareData3['name'] . '}}', 'group1');
+
+ $shareData5['accepted'] = true;
+
+ $user2AcceptedShares = $manager2->getAcceptedShares();
+ $this->assertCount(1, $user2AcceptedShares);
+ $this->assertExternalShareEntry($shareData5, $user2AcceptedShares[0], 5, $shareData1['name'], $this->uid2);
+ }
+
+ public function testForceRemoveGroupShare() {
+ [$shareData, $groupShare] = $this->createTestGroupShare();
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+
+ // Setup mounts to remove share through mountpoint
+ $this->setupMounts();
+
+ $this->manager->removeShare($this->uid . '/files/' . $groupShare['name'], true);
+
+ // Refresh mounts after removing share
+ $this->setupMounts();
+
+ $this->assertNotMount($groupShare['name']);
+
+ $openShares = $this->manager->getOpenShares();
+ $this->assertCount(0, $openShares);
+
+ $acceptedShares = $this->manager->getAcceptedShares();
+ $this->assertCount(0, $acceptedShares);
+ }
+
+ public function testForceRemoveGroupShareWhenAcceptedByOtherUser() {
+ $manager2 = $this->createManagerForUser($this->uid2);
+
+ [$shareData, $groupShare] = $this->createTestGroupShare();
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+ $this->assertTrue($manager2->acceptShare($groupShare['id']));
+
+ // Setup mounts to remove share through mountpoint
+ $this->setupMounts();
+
+ $this->manager->removeShare($this->uid . '/files/' . $groupShare['name'], true);
+
+ // Refresh mounts after removing share
+ $this->setupMounts();
+
+ $openShares = $this->manager->getOpenShares();
+ $this->assertCount(0, $openShares);
+
+ $acceptedShares = $this->manager->getAcceptedShares();
+ $this->assertCount(0, $acceptedShares);
+
+ $user2OpenShares = $manager2->getOpenShares();
+ $this->assertCount(0, $openShares);
+
+ $user2AcceptedShares = $manager2->getAcceptedShares();
+ $this->assertCount(0, $user2AcceptedShares);
+ }
+
+ public function testForceRemoveGroupShareWhenThereAreSeveralShares() {
+ $manager2 = $this->createManagerForUser($this->uid2);
+
+ [$shareData1, $groupShare1] = $this->createTestGroupShare('group1', 'token1', '/SharedFolder', '2341');
+ $this->assertTrue($this->manager->acceptShare($groupShare1['id']));
+ [$shareData2, $groupShare2] = $this->createTestGroupShare('group1', 'token2', '/SharedFolder2', '2342');
+ $this->assertTrue($this->manager->acceptShare($groupShare2['id']));
+ [$shareData3, $groupShare3] = $this->createTestGroupShare('group1', 'token3', '/SharedFolder3', '2343');
+ [$shareData4, $groupShare4] = $this->createTestGroupShare('group2', 'token4', '/SharedFolder4', '2344');
+ [$shareData5, $groupShare5] = $this->createTestGroupShare('group3', 'token1', '/SharedFolder', '2341', $manager2);
+ $this->assertTrue($manager2->acceptShare($groupShare5['id']));
+
+ // Setup mounts to remove share through mountpoint
+ $this->setupMounts();
+
+ $this->manager->removeShare($this->uid . '/files/' . $groupShare2['name'], true);
+
+ // Refresh mounts after removing share
+ $this->setupMounts();
+
+ $this->assertNotMount($groupShare2['name']);
+
+ $openShares = $this->manager->getOpenShares();
+ $this->assertCount(2, $openShares);
+ $this->assertExternalShareEntry($shareData3, $openShares[0], 3, '{{TemporaryMountPointName#' . $shareData3['name'] . '}}', 'group1');
+ $this->assertExternalShareEntry($shareData4, $openShares[1], 4, '{{TemporaryMountPointName#' . $shareData4['name'] . '}}', 'group2');
+
+ $user1ShareData1 = $shareData1;
+ $user1ShareData1['accepted'] = true;
+
+ $acceptedShares = $this->manager->getAcceptedShares();
+ $this->assertCount(1, $acceptedShares);
+ $this->assertExternalShareEntry($user1ShareData1, $acceptedShares[0], 1, $user1ShareData1['name'], $this->uid);
+
+ $user2OpenShares = $manager2->getOpenShares();
+ $this->assertCount(2, $user2OpenShares);
+ $this->assertExternalShareEntry($shareData1, $user2OpenShares[0], 1, '{{TemporaryMountPointName#' . $shareData1['name'] . '}}', 'group1');
+ $this->assertExternalShareEntry($shareData3, $user2OpenShares[1], 3, '{{TemporaryMountPointName#' . $shareData3['name'] . '}}', 'group1');
+
+ $shareData5['accepted'] = true;
+
+ $user2AcceptedShares = $manager2->getAcceptedShares();
+ $this->assertCount(1, $user2AcceptedShares);
+ $this->assertExternalShareEntry($shareData5, $user2AcceptedShares[0], 5, $shareData1['name'], $this->uid2);
+ }
+
public function testDeleteUserShares() {
// user 1 shares