diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index d45a376b71..1300245f32 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -564,9 +564,10 @@ class Manager implements IManager { //Shares are not identical } - // Identical share already existst + // Identical share already exists if ($existingShare->getSharedWith() === $share->getSharedWith() && $existingShare->getShareType() === $share->getShareType()) { - throw new AlreadySharedException('Path is already shared with this user', $existingShare); + $message = $this->l->t('Sharing %s failed, because this item is already shared with user %s', [$share->getNode()->getName(), $share->getSharedWithDisplayName()]); + throw new AlreadySharedException($message, $existingShare); } // The share is already shared with this user via a group share @@ -576,7 +577,8 @@ class Manager implements IManager { $user = $this->userManager->get($share->getSharedWith()); if ($group->inGroup($user) && $existingShare->getShareOwner() !== $share->getShareOwner()) { - throw new AlreadySharedException('Path is already shared with this user', $existingShare); + $message = $this->l->t('Sharing %s failed, because this item is already shared with user %s', [$share->getNode()->getName(), $share->getSharedWithDisplayName()]); + throw new AlreadySharedException($message, $existingShare); } } } diff --git a/tests/lib/Share20/ManagerTest.php b/tests/lib/Share20/ManagerTest.php index 372f49ddf8..e6042ca844 100644 --- a/tests/lib/Share20/ManagerTest.php +++ b/tests/lib/Share20/ManagerTest.php @@ -50,6 +50,7 @@ use OCP\Mail\IMailer; use OCP\Security\Events\ValidatePasswordPolicyEvent; use OCP\Security\IHasher; use OCP\Security\ISecureRandom; +use OCP\Share\Exceptions\AlreadySharedException; use OCP\Share\Exceptions\ShareNotFound; use OCP\Share\IProviderFactory; use OCP\Share\IShare; @@ -1415,10 +1416,11 @@ class ManagerTest extends \Test\TestCase { public function testUserCreateChecksIdenticalShareExists() { - $this->expectException(\Exception::class); - $this->expectExceptionMessage('Path is already shared with this user'); + $this->expectException(AlreadySharedException::class); + $this->expectExceptionMessage('Sharing name.txt failed, because this item is already shared with user user'); $share = $this->manager->newShare(); + $share->setSharedWithDisplayName('user'); $share2 = $this->manager->newShare(); $sharedWith = $this->createMock(IUser::class); @@ -1435,13 +1437,16 @@ class ManagerTest extends \Test\TestCase { ->with($path) ->willReturn([$share2]); + $path->method('getName') + ->willReturn('name.txt'); + self::invokePrivate($this->manager, 'userCreateChecks', [$share]); } public function testUserCreateChecksIdenticalPathSharedViaGroup() { - $this->expectException(\Exception::class); - $this->expectExceptionMessage('Path is already shared with this user'); + $this->expectException(AlreadySharedException::class); + $this->expectExceptionMessage('Sharing name2.txt failed, because this item is already shared with user userName'); $share = $this->manager->newShare(); @@ -1455,6 +1460,7 @@ class ManagerTest extends \Test\TestCase { $share->setSharedWith('sharedWith') ->setNode($path) ->setShareOwner('shareOwner') + ->setSharedWithDisplayName('userName') ->setProviderId('foo') ->setId('bar'); @@ -1477,6 +1483,9 @@ class ManagerTest extends \Test\TestCase { ->with($path) ->willReturn([$share2]); + $path->method('getName') + ->willReturn('name2.txt'); + self::invokePrivate($this->manager, 'userCreateChecks', [$share]); }