aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_sharing/tests
diff options
context:
space:
mode:
authorVincent Petry <vincent@nextcloud.com>2021-07-05 16:07:02 +0200
committerVincent Petry <vincent@nextcloud.com>2021-07-27 12:19:26 +0200
commit15f41a6b727ba437536fc727778cc41ca710d0d5 (patch)
tree00e29e357b98b4f28a9798b5086fadf46b8c93a7 /apps/files_sharing/tests
parentc1563215e6916b7e44afa464adbbe60ad3af2755 (diff)
downloadnextcloud-server-15f41a6b727ba437536fc727778cc41ca710d0d5.tar.gz
nextcloud-server-15f41a6b727ba437536fc727778cc41ca710d0d5.zip
Fix remote group share API interactions
Accepting and declining can now be done repeatedly on both the parent group share and sub-share with the same effects. Added unit tests to cover these cases, and also when the same operation is repeated. Signed-off-by: Vincent Petry <vincent@nextcloud.com>
Diffstat (limited to 'apps/files_sharing/tests')
-rw-r--r--apps/files_sharing/tests/External/ManagerTest.php166
1 files changed, 163 insertions, 3 deletions
diff --git a/apps/files_sharing/tests/External/ManagerTest.php b/apps/files_sharing/tests/External/ManagerTest.php
index 1b8b3e1cf4b..6dc9ced87a7 100644
--- a/apps/files_sharing/tests/External/ManagerTest.php
+++ b/apps/files_sharing/tests/External/ManagerTest.php
@@ -114,6 +114,9 @@ class ManagerTest extends TestCase {
->method('search')
->willReturn([]);
+ $logger = $this->createMock(ILogger::class);
+ $logger->expects($this->never())->method('logException');
+
$this->manager = $this->getMockBuilder(Manager::class)
->setConstructorArgs(
[
@@ -129,7 +132,7 @@ class ManagerTest extends TestCase {
$this->userManager,
$this->uid,
$this->eventDispatcher,
- $this->createMock(ILogger::class),
+ $logger,
]
)->setMethods(['tryOCMEndPoint'])->getMock();
@@ -156,6 +159,7 @@ class ManagerTest extends TestCase {
}
private function setupMounts() {
+ $this->mountManager->clear();
$mounts = $this->testMountProvider->getMountsForUser($this->user, new StorageFactory());
foreach ($mounts as $mount) {
$this->mountManager->addMount($mount);
@@ -248,7 +252,7 @@ class ManagerTest extends TestCase {
}
// Accept the first share
- $this->manager->acceptShare($openShares[0]['id']);
+ $this->assertTrue($this->manager->acceptShare($openShares[0]['id']));
// Check remaining shares - Accepted
$acceptedShares = self::invokePrivate($this->manager, 'getShares', [true]);
@@ -304,7 +308,7 @@ class ManagerTest extends TestCase {
}
// Decline the third share
- $this->manager->declineShare($openShares[1]['id']);
+ $this->assertTrue($this->manager->declineShare($openShares[1]['id']));
$this->setupMounts();
$this->assertMount($shareData1['name']);
@@ -380,6 +384,162 @@ class ManagerTest extends TestCase {
$this->assertNotMount('{{TemporaryMountPointName#' . $shareData1['name'] . '}}-1');
}
+ private function verifyAcceptedGroupShare($shareData) {
+ $openShares = $this->manager->getOpenShares();
+ $this->assertCount(0, $openShares);
+ $acceptedShares = self::invokePrivate($this->manager, 'getShares', [true]);
+ $this->assertCount(1, $acceptedShares);
+ $shareData['accepted'] = true;
+ $this->assertExternalShareEntry($shareData, $acceptedShares[0], 0, $shareData['name'], $this->uid);
+ $this->setupMounts();
+ $this->assertMount($shareData['name']);
+ }
+
+ private function verifyDeclinedGroupShare($shareData, $tempMount = null) {
+ if ($tempMount === null) {
+ $tempMount = '{{TemporaryMountPointName#/SharedFolder}}';
+ }
+ $openShares = $this->manager->getOpenShares();
+ $this->assertCount(1, $openShares);
+ $acceptedShares = self::invokePrivate($this->manager, 'getShares', [true]);
+ $this->assertCount(0, $acceptedShares);
+ $this->assertExternalShareEntry($shareData, $openShares[0], 0, $tempMount, $this->uid);
+ $this->setupMounts();
+ $this->assertNotMount($shareData['name']);
+ $this->assertNotMount($tempMount);
+ }
+
+ private function createTestGroupShare() {
+ $shareData = [
+ 'remote' => 'http://localhost',
+ 'token' => 'token1',
+ 'password' => '',
+ 'name' => '/SharedFolder',
+ 'owner' => 'foobar',
+ 'shareType' => IShare::TYPE_GROUP,
+ 'accepted' => false,
+ 'user' => 'group1',
+ 'remoteId' => '2342'
+ ];
+
+ $this->assertSame(null, call_user_func_array([$this->manager, 'addShare'], $shareData));
+
+ $allShares = self::invokePrivate($this->manager, 'getShares', [null]);
+ $this->assertCount(1, $allShares);
+
+ // this will hold the main group entry
+ $groupShare = $allShares[0];
+
+ return [$shareData, $groupShare];
+ }
+
+ public function testAcceptOriginalGroupShare() {
+ [$shareData, $groupShare] = $this->createTestGroupShare();
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+ $this->verifyAcceptedGroupShare($shareData);
+
+ // a second time
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+ $this->verifyAcceptedGroupShare($shareData);
+ }
+
+ public function testAcceptGroupShareAgainThroughGroupShare() {
+ [$shareData, $groupShare] = $this->createTestGroupShare();
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+ $this->verifyAcceptedGroupShare($shareData);
+
+ // decline again, this keeps the sub-share
+ $this->assertTrue($this->manager->declineShare($groupShare['id']));
+ $this->verifyDeclinedGroupShare($shareData, '/SharedFolder');
+
+ // this will return sub-entries
+ $openShares = $this->manager->getOpenShares();
+
+ // accept through sub-share
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+ $this->verifyAcceptedGroupShare($shareData, '/SharedFolder');
+
+ // accept a second time
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+ $this->verifyAcceptedGroupShare($shareData, '/SharedFolder');
+ }
+
+ public function testAcceptGroupShareAgainThroughSubShare() {
+ [$shareData, $groupShare] = $this->createTestGroupShare();
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+ $this->verifyAcceptedGroupShare($shareData);
+
+ // decline again, this keeps the sub-share
+ $this->assertTrue($this->manager->declineShare($groupShare['id']));
+ $this->verifyDeclinedGroupShare($shareData, '/SharedFolder');
+
+ // this will return sub-entries
+ $openShares = $this->manager->getOpenShares();
+
+ // accept through sub-share
+ $this->assertTrue($this->manager->acceptShare($openShares[0]['id']));
+ $this->verifyAcceptedGroupShare($shareData);
+
+ // accept a second time
+ $this->assertTrue($this->manager->acceptShare($openShares[0]['id']));
+ $this->verifyAcceptedGroupShare($shareData);
+ }
+
+ public function testDeclineOriginalGroupShare() {
+ [$shareData, $groupShare] = $this->createTestGroupShare();
+ $this->assertTrue($this->manager->declineShare($groupShare['id']));
+ $this->verifyDeclinedGroupShare($shareData);
+
+ // a second time
+ $this->assertTrue($this->manager->declineShare($groupShare['id']));
+ $this->verifyDeclinedGroupShare($shareData);
+ }
+
+ public function testDeclineGroupShareAgainThroughGroupShare() {
+ [$shareData, $groupShare] = $this->createTestGroupShare();
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+ $this->verifyAcceptedGroupShare($shareData);
+
+ // decline again, this keeps the sub-share
+ $this->assertTrue($this->manager->declineShare($groupShare['id']));
+ $this->verifyDeclinedGroupShare($shareData, '/SharedFolder');
+
+ // a second time
+ $this->assertTrue($this->manager->declineShare($groupShare['id']));
+ $this->verifyDeclinedGroupShare($shareData, '/SharedFolder');
+ }
+
+ public function testDeclineGroupShareAgainThroughSubshare() {
+ [$shareData, $groupShare] = $this->createTestGroupShare();
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+ $this->verifyAcceptedGroupShare($shareData);
+
+ // this will return sub-entries
+ $allShares = self::invokePrivate($this->manager, 'getShares', [null]);
+ $this->assertCount(1, $allShares);
+
+ // decline again through sub-share
+ $this->assertTrue($this->manager->declineShare($allShares[0]['id']));
+ $this->verifyDeclinedGroupShare($shareData, '/SharedFolder');
+
+ // a second time
+ $this->assertTrue($this->manager->declineShare($allShares[0]['id']));
+ $this->verifyDeclinedGroupShare($shareData, '/SharedFolder');
+ }
+
+ public function testDeclineGroupShareAgainThroughMountPoint() {
+ [$shareData, $groupShare] = $this->createTestGroupShare();
+ $this->assertTrue($this->manager->acceptShare($groupShare['id']));
+ $this->verifyAcceptedGroupShare($shareData);
+
+ // decline through mount point name
+ $this->assertTrue($this->manager->removeShare($this->uid . '/files/' . $shareData['name']));
+ $this->verifyDeclinedGroupShare($shareData, '/SharedFolder');
+
+ // second time must fail as the mount point is gone
+ $this->assertFalse($this->manager->removeShare($this->uid . '/files/' . $shareData['name']));
+ }
+
/**
* @param array $expected
* @param array $actual