Skip to content

Commit

Permalink
Add unit tests for removing federated group shares
Browse files Browse the repository at this point in the history
Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
  • Loading branch information
danxuliu committed Mar 31, 2024
1 parent 7f9c1e1 commit ba420d5
Showing 1 changed file with 207 additions and 0 deletions.
207 changes: 207 additions & 0 deletions apps/files_sharing/tests/External/ManagerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -672,6 +672,213 @@ public function testDeclineThenAcceptGroupShareAgainThroughSubShare() {
$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

Expand Down

0 comments on commit ba420d5

Please sign in to comment.