test: Add unit tests for removing federated group shares

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
This commit is contained in:
Daniel Calviño Sánchez 2024-03-31 03:21:42 +02:00
parent 3749b31f4e
commit 718560a4a4

View file

@ -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