diff options
Diffstat (limited to 'tests/lib/Share20/ManagerTest.php')
-rw-r--r-- | tests/lib/Share20/ManagerTest.php | 843 |
1 files changed, 404 insertions, 439 deletions
diff --git a/tests/lib/Share20/ManagerTest.php b/tests/lib/Share20/ManagerTest.php index 091a79e6d40..7859407651f 100644 --- a/tests/lib/Share20/ManagerTest.php +++ b/tests/lib/Share20/ManagerTest.php @@ -1,4 +1,5 @@ <?php + /** * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2016 ownCloud, Inc. @@ -12,10 +13,11 @@ use OC\Files\Mount\MoveableMount; use OC\Files\Utils\PathHelper; use OC\KnownUser\KnownUserService; use OC\Share20\DefaultShareProvider; -use OC\Share20\Exception; +use OC\Share20\Exception\ProviderException; use OC\Share20\Manager; use OC\Share20\Share; use OC\Share20\ShareDisableChecker; +use OCP\Constants; use OCP\EventDispatcher\Event; use OCP\EventDispatcher\IEventDispatcher; use OCP\Files\File; @@ -25,9 +27,9 @@ use OCP\Files\Mount\IMountManager; use OCP\Files\Mount\IMountPoint; use OCP\Files\Mount\IShareOwnerlessMount; use OCP\Files\Node; -use OCP\Files\NotFoundException; use OCP\Files\Storage\IStorage; use OCP\HintException; +use OCP\IAppConfig; use OCP\IConfig; use OCP\IDateTimeZone; use OCP\IGroup; @@ -55,10 +57,19 @@ use OCP\Share\IManager; use OCP\Share\IProviderFactory; use OCP\Share\IShare; use OCP\Share\IShareProvider; +use OCP\Share\IShareProviderSupportsAllSharesInFolder; +use OCP\Util; use PHPUnit\Framework\MockObject\MockBuilder; use PHPUnit\Framework\MockObject\MockObject; use Psr\Log\LoggerInterface; +class DummyShareManagerListener { + public function post() { + } + public function listener() { + } +} + /** * Class ManagerTest * @@ -109,6 +120,8 @@ class ManagerTest extends \Test\TestCase { private DateTimeZone $timezone; /** @var IDateTimeZone|MockObject */ protected $dateTimeZone; + /** @var IAppConfig|MockObject */ + protected $appConfig; protected function setUp(): void { $this->logger = $this->createMock(LoggerInterface::class); @@ -131,6 +144,8 @@ class ManagerTest extends \Test\TestCase { $this->timezone = new \DateTimeZone('Pacific/Auckland'); $this->dateTimeZone->method('getTimeZone')->willReturnCallback(fn () => $this->timezone); + $this->appConfig = $this->createMock(IAppConfig::class); + $this->l10nFactory = $this->createMock(IFactory::class); $this->l = $this->createMock(IL10N::class); $this->l->method('t') @@ -172,6 +187,7 @@ class ManagerTest extends \Test\TestCase { $this->knownUserService, $this->shareDisabledChecker, $this->dateTimeZone, + $this->appConfig, ); } @@ -199,6 +215,7 @@ class ManagerTest extends \Test\TestCase { $this->knownUserService, $this->shareDisabledChecker, $this->dateTimeZone, + $this->appConfig, ]); } @@ -219,13 +236,7 @@ class ManagerTest extends \Test\TestCase { $this->manager->deleteShare($share); } - public function dataTestDelete() { - $user = $this->createMock(IUser::class); - $user->method('getUID')->willReturn('sharedWithUser'); - - $group = $this->createMock(IGroup::class); - $group->method('getGID')->willReturn('sharedWithGroup'); - + public static function dataTestDelete(): array { return [ [IShare::TYPE_USER, 'sharedWithUser'], [IShare::TYPE_GROUP, 'sharedWithGroup'], @@ -234,12 +245,10 @@ class ManagerTest extends \Test\TestCase { ]; } - /** - * @dataProvider dataTestDelete - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestDelete')] public function testDelete($shareType, $sharedWith): void { $manager = $this->createManagerMock() - ->setMethods(['getShareById', 'deleteChildren', 'promoteReshares']) + ->onlyMethods(['getShareById', 'deleteChildren', 'promoteReshares']) ->getMock(); $manager->method('deleteChildren')->willReturn([]); @@ -264,25 +273,24 @@ class ManagerTest extends \Test\TestCase { ->method('delete') ->with($share); + $calls = [ + BeforeShareDeletedEvent::class, + ShareDeletedEvent::class, + ]; $this->dispatcher->expects($this->exactly(2)) ->method('dispatchTyped') - ->withConsecutive( - [ - $this->callBack(function (BeforeShareDeletedEvent $e) use ($share) { - return $e->getShare() === $share; - })], - [ - $this->callBack(function (ShareDeletedEvent $e) use ($share) { - return $e->getShare() === $share; - })] - ); + ->willReturnCallback(function ($event) use (&$calls, $share): void { + $expected = array_shift($calls); + $this->assertInstanceOf($expected, $event); + $this->assertEquals($share, $event->getShare()); + }); $manager->deleteShare($share); } public function testDeleteLazyShare(): void { $manager = $this->createManagerMock() - ->setMethods(['getShareById', 'deleteChildren', 'promoteReshares']) + ->onlyMethods(['getShareById', 'deleteChildren', 'promoteReshares']) ->getMock(); $manager->method('deleteChildren')->willReturn([]); @@ -308,25 +316,24 @@ class ManagerTest extends \Test\TestCase { ->method('delete') ->with($share); + $calls = [ + BeforeShareDeletedEvent::class, + ShareDeletedEvent::class, + ]; $this->dispatcher->expects($this->exactly(2)) ->method('dispatchTyped') - ->withConsecutive( - [ - $this->callBack(function (BeforeShareDeletedEvent $e) use ($share) { - return $e->getShare() === $share; - })], - [ - $this->callBack(function (ShareDeletedEvent $e) use ($share) { - return $e->getShare() === $share; - })] - ); + ->willReturnCallback(function ($event) use (&$calls, $share): void { + $expected = array_shift($calls); + $this->assertInstanceOf($expected, $event); + $this->assertEquals($share, $event->getShare()); + }); $manager->deleteShare($share); } public function testDeleteNested(): void { $manager = $this->createManagerMock() - ->setMethods(['getShareById', 'promoteReshares']) + ->onlyMethods(['getShareById', 'promoteReshares']) ->getMock(); $path = $this->createMock(File::class); @@ -368,51 +375,40 @@ class ManagerTest extends \Test\TestCase { [$share3, []], ]); - $this->defaultProvider + $deleteCalls = [ + $share3, + $share2, + $share1, + ]; + $this->defaultProvider->expects($this->exactly(3)) ->method('delete') - ->withConsecutive([$share3], [$share2], [$share1]); + ->willReturnCallback(function ($share) use (&$deleteCalls): void { + $expected = array_shift($deleteCalls); + $this->assertEquals($expected, $share); + }); + $dispatchCalls = [ + [BeforeShareDeletedEvent::class, $share1], + [BeforeShareDeletedEvent::class, $share2], + [BeforeShareDeletedEvent::class, $share3], + [ShareDeletedEvent::class, $share3], + [ShareDeletedEvent::class, $share2], + [ShareDeletedEvent::class, $share1], + ]; $this->dispatcher->expects($this->exactly(6)) ->method('dispatchTyped') - ->withConsecutive( - [ - $this->callBack(function (BeforeShareDeletedEvent $e) use ($share1) { - return $e->getShare()->getId() === $share1->getId(); - }) - ], - [ - $this->callBack(function (BeforeShareDeletedEvent $e) use ($share2) { - return $e->getShare()->getId() === $share2->getId(); - }) - ], - [ - $this->callBack(function (BeforeShareDeletedEvent $e) use ($share3) { - return $e->getShare()->getId() === $share3->getId(); - }) - ], - [ - $this->callBack(function (ShareDeletedEvent $e) use ($share3) { - return $e->getShare()->getId() === $share3->getId(); - }) - ], - [ - $this->callBack(function (ShareDeletedEvent $e) use ($share2) { - return $e->getShare()->getId() === $share2->getId(); - }) - ], - [ - $this->callBack(function (ShareDeletedEvent $e) use ($share1) { - return $e->getShare()->getId() === $share1->getId(); - }) - ], - ); + ->willReturnCallback(function ($event) use (&$dispatchCalls): void { + $expected = array_shift($dispatchCalls); + $this->assertInstanceOf($expected[0], $event); + $this->assertEquals($expected[1]->getId(), $event->getShare()->getId()); + }); $manager->deleteShare($share1); } public function testDeleteFromSelf(): void { $manager = $this->createManagerMock() - ->setMethods(['getShareById']) + ->onlyMethods(['getShareById']) ->getMock(); $recipientId = 'unshareFrom'; @@ -445,7 +441,7 @@ class ManagerTest extends \Test\TestCase { public function testDeleteChildren(): void { $manager = $this->createManagerMock() - ->setMethods(['deleteShare']) + ->onlyMethods(['deleteShare']) ->getMock(); $share = $this->createMock(IShare::class); @@ -474,10 +470,17 @@ class ManagerTest extends \Test\TestCase { return []; }); - $this->defaultProvider - ->expects($this->exactly(3)) + $calls = [ + $child1, + $child2, + $child3, + ]; + $this->defaultProvider->expects($this->exactly(3)) ->method('delete') - ->withConsecutive([$child1], [$child2], [$child3]); + ->willReturnCallback(function ($share) use (&$calls): void { + $expected = array_shift($calls); + $this->assertEquals($expected, $share); + }); $result = self::invokePrivate($manager, 'deleteChildren', [$share]); $this->assertSame($shares, $result); @@ -485,7 +488,7 @@ class ManagerTest extends \Test\TestCase { public function testPromoteReshareFile(): void { $manager = $this->createManagerMock() - ->setMethods(['updateShare', 'getSharesInFolder', 'generalCreateChecks']) + ->onlyMethods(['updateShare', 'getSharesInFolder', 'generalCreateChecks']) ->getMock(); $file = $this->createMock(File::class); @@ -522,7 +525,7 @@ class ManagerTest extends \Test\TestCase { public function testPromoteReshare(): void { $manager = $this->createManagerMock() - ->setMethods(['updateShare', 'getSharesInFolder', 'generalCreateChecks']) + ->onlyMethods(['updateShare', 'getSharesInFolder', 'generalCreateChecks']) ->getMock(); $folder = $this->createFolderMock('/path/to/folder'); @@ -565,14 +568,23 @@ class ManagerTest extends \Test\TestCase { }); $manager->method('generalCreateChecks')->willThrowException(new GenericShareException()); - $manager->expects($this->exactly(2))->method('updateShare')->withConsecutive([$reShare], [$reShareInSubFolder]); + $calls = [ + $reShare, + $reShareInSubFolder, + ]; + $manager->expects($this->exactly(2)) + ->method('updateShare') + ->willReturnCallback(function ($share) use (&$calls): void { + $expected = array_shift($calls); + $this->assertEquals($expected, $share); + }); self::invokePrivate($manager, 'promoteReshares', [$share]); } public function testPromoteReshareWhenUserHasAnotherShare(): void { $manager = $this->createManagerMock() - ->setMethods(['updateShare', 'getSharesInFolder', 'getSharedWith', 'generalCreateChecks']) + ->onlyMethods(['updateShare', 'getSharesInFolder', 'getSharedWith', 'generalCreateChecks']) ->getMock(); $folder = $this->createFolderMock('/path/to/folder'); @@ -600,7 +612,7 @@ class ManagerTest extends \Test\TestCase { public function testPromoteReshareOfUsersInGroupShare(): void { $manager = $this->createManagerMock() - ->setMethods(['updateShare', 'getSharesInFolder', 'getSharedWith', 'generalCreateChecks']) + ->onlyMethods(['updateShare', 'getSharesInFolder', 'getSharedWith', 'generalCreateChecks']) ->getMock(); $folder = $this->createFolderMock('/path/to/folder'); @@ -650,7 +662,16 @@ class ManagerTest extends \Test\TestCase { $manager->method('getSharedWith')->willReturn([]); - $manager->expects($this->exactly(2))->method('updateShare')->withConsecutive([$reShare1], [$reShare2]); + $calls = [ + $reShare1, + $reShare2, + ]; + $manager->expects($this->exactly(2)) + ->method('updateShare') + ->willReturnCallback(function ($share) use (&$calls): void { + $expected = array_shift($calls); + $this->assertEquals($expected, $share); + }); self::invokePrivate($manager, 'promoteReshares', [$share]); } @@ -668,29 +689,11 @@ class ManagerTest extends \Test\TestCase { } - public function testGetShareByIdNodeAccessible(): void { - $share = $this->createMock(IShare::class); - $share - ->expects($this->once()) - ->method('getNode') - ->willThrowException(new NotFoundException()); - - $this->defaultProvider - ->expects($this->once()) - ->method('getShareById') - ->with(42) - ->willReturn($share); - - $this->expectException(ShareNotFound::class); - $this->manager->getShareById('default:42'); - } - - public function testGetExpiredShareById(): void { - $this->expectException(\OCP\Share\Exceptions\ShareNotFound::class); + $this->expectException(ShareNotFound::class); $manager = $this->createManagerMock() - ->setMethods(['deleteShare']) + ->onlyMethods(['deleteShare']) ->getMock(); $date = new \DateTime(); @@ -772,7 +775,7 @@ class ManagerTest extends \Test\TestCase { ]); $this->dispatcher->expects($this->once())->method('dispatchTyped') - ->willReturnCallback(function (Event $event) { + ->willReturnCallback(function (Event $event): void { $this->assertInstanceOf(ValidatePasswordPolicyEvent::class, $event); /** @var ValidatePasswordPolicyEvent $event */ $this->assertSame('password', $event->getPassword()); @@ -794,7 +797,7 @@ class ManagerTest extends \Test\TestCase { ]); $this->dispatcher->expects($this->once())->method('dispatchTyped') - ->willReturnCallback(function (Event $event) { + ->willReturnCallback(function (Event $event): void { $this->assertInstanceOf(ValidatePasswordPolicyEvent::class, $event); /** @var ValidatePasswordPolicyEvent $event */ $this->assertSame('password', $event->getPassword()); @@ -889,7 +892,7 @@ class ManagerTest extends \Test\TestCase { $limitedPermssions = $this->createMock(File::class); $limitedPermssions->method('isShareable')->willReturn(true); - $limitedPermssions->method('getPermissions')->willReturn(\OCP\Constants::PERMISSION_READ); + $limitedPermssions->method('getPermissions')->willReturn(Constants::PERMISSION_READ); $limitedPermssions->method('getId')->willReturn(108); $limitedPermssions->method('getPath')->willReturn('path'); $limitedPermssions->method('getName')->willReturn('name'); @@ -905,19 +908,18 @@ class ManagerTest extends \Test\TestCase { $mount = $this->createMock(MoveableMount::class); $limitedPermssions->method('getMountPoint')->willReturn($mount); - - $data[] = [$this->createShare(null, IShare::TYPE_USER, $limitedPermssions, $user2, $user0, $user0, 31, null, null), 'Cannot increase permissions of path', true]; + // increase permissions of a re-share $data[] = [$this->createShare(null, IShare::TYPE_GROUP, $limitedPermssions, $group0, $user0, $user0, 17, null, null), 'Cannot increase permissions of path', true]; - $data[] = [$this->createShare(null, IShare::TYPE_LINK, $limitedPermssions, null, $user0, $user0, 3, null, null), 'Cannot increase permissions of path', true]; + $data[] = [$this->createShare(null, IShare::TYPE_USER, $limitedPermssions, $user2, $user0, $user0, 3, null, null), 'Cannot increase permissions of path', true]; $nonMovableStorage = $this->createMock(IStorage::class); $nonMovableStorage->method('instanceOfStorage') ->with('\OCA\Files_Sharing\External\Storage') ->willReturn(false); - $nonMovableStorage->method('getPermissions')->willReturn(\OCP\Constants::PERMISSION_ALL); + $nonMovableStorage->method('getPermissions')->willReturn(Constants::PERMISSION_ALL); $nonMoveableMountPermssions = $this->createMock(Folder::class); $nonMoveableMountPermssions->method('isShareable')->willReturn(true); - $nonMoveableMountPermssions->method('getPermissions')->willReturn(\OCP\Constants::PERMISSION_READ); + $nonMoveableMountPermssions->method('getPermissions')->willReturn(Constants::PERMISSION_READ); $nonMoveableMountPermssions->method('getId')->willReturn(108); $nonMoveableMountPermssions->method('getPath')->willReturn('path'); $nonMoveableMountPermssions->method('getName')->willReturn('name'); @@ -932,16 +934,30 @@ class ManagerTest extends \Test\TestCase { $rootFolder = $this->createMock(Folder::class); $rootFolder->method('isShareable')->willReturn(true); - $rootFolder->method('getPermissions')->willReturn(\OCP\Constants::PERMISSION_ALL); + $rootFolder->method('getPermissions')->willReturn(Constants::PERMISSION_ALL); $rootFolder->method('getId')->willReturn(42); $data[] = [$this->createShare(null, IShare::TYPE_USER, $rootFolder, $user2, $user0, $user0, 30, null, null), 'You cannot share your root folder', true]; $data[] = [$this->createShare(null, IShare::TYPE_GROUP, $rootFolder, $group0, $user0, $user0, 2, null, null), 'You cannot share your root folder', true]; $data[] = [$this->createShare(null, IShare::TYPE_LINK, $rootFolder, null, $user0, $user0, 16, null, null), 'You cannot share your root folder', true]; + $allPermssionsFiles = $this->createMock(File::class); + $allPermssionsFiles->method('isShareable')->willReturn(true); + $allPermssionsFiles->method('getPermissions')->willReturn(Constants::PERMISSION_ALL); + $allPermssionsFiles->method('getId')->willReturn(187); + $allPermssionsFiles->method('getOwner') + ->willReturn($owner); + $allPermssionsFiles->method('getStorage') + ->willReturn($storage); + + // test invalid CREATE or DELETE permissions + $data[] = [$this->createShare(null, IShare::TYPE_USER, $allPermssionsFiles, $user2, $user0, $user0, Constants::PERMISSION_ALL, null, null), 'File shares cannot have create or delete permissions', true]; + $data[] = [$this->createShare(null, IShare::TYPE_GROUP, $allPermssionsFiles, $group0, $user0, $user0, Constants::PERMISSION_READ | Constants::PERMISSION_CREATE, null, null), 'File shares cannot have create or delete permissions', true]; + $data[] = [$this->createShare(null, IShare::TYPE_LINK, $allPermssionsFiles, null, $user0, $user0, Constants::PERMISSION_READ | Constants::PERMISSION_DELETE, null, null), 'File shares cannot have create or delete permissions', true]; + $allPermssions = $this->createMock(Folder::class); $allPermssions->method('isShareable')->willReturn(true); - $allPermssions->method('getPermissions')->willReturn(\OCP\Constants::PERMISSION_ALL); + $allPermssions->method('getPermissions')->willReturn(Constants::PERMISSION_ALL); $allPermssions->method('getId')->willReturn(108); $allPermssions->method('getOwner') ->willReturn($owner); @@ -951,6 +967,12 @@ class ManagerTest extends \Test\TestCase { $data[] = [$this->createShare(null, IShare::TYPE_USER, $allPermssions, $user2, $user0, $user0, 30, null, null), 'Shares need at least read permissions', true]; $data[] = [$this->createShare(null, IShare::TYPE_GROUP, $allPermssions, $group0, $user0, $user0, 2, null, null), 'Shares need at least read permissions', true]; + // test invalid permissions + $data[] = [$this->createShare(null, IShare::TYPE_USER, $allPermssions, $user2, $user0, $user0, 32, null, null), 'Valid permissions are required for sharing', true]; + $data[] = [$this->createShare(null, IShare::TYPE_GROUP, $allPermssions, $group0, $user0, $user0, 63, null, null), 'Valid permissions are required for sharing', true]; + $data[] = [$this->createShare(null, IShare::TYPE_LINK, $allPermssions, null, $user0, $user0, -1, null, null), 'Valid permissions are required for sharing', true]; + + // working shares $data[] = [$this->createShare(null, IShare::TYPE_USER, $allPermssions, $user2, $user0, $user0, 31, null, null), null, false]; $data[] = [$this->createShare(null, IShare::TYPE_GROUP, $allPermssions, $group0, $user0, $user0, 3, null, null), null, false]; $data[] = [$this->createShare(null, IShare::TYPE_LINK, $allPermssions, null, $user0, $user0, 17, null, null), null, false]; @@ -962,7 +984,7 @@ class ManagerTest extends \Test\TestCase { ->willReturn(true); $remoteFile = $this->createMock(Folder::class); $remoteFile->method('isShareable')->willReturn(true); - $remoteFile->method('getPermissions')->willReturn(\OCP\Constants::PERMISSION_READ ^ \OCP\Constants::PERMISSION_UPDATE); + $remoteFile->method('getPermissions')->willReturn(Constants::PERMISSION_READ ^ Constants::PERMISSION_UPDATE); $remoteFile->method('getId')->willReturn(108); $remoteFile->method('getOwner') ->willReturn($owner); @@ -976,12 +998,12 @@ class ManagerTest extends \Test\TestCase { } /** - * @dataProvider dataGeneralChecks * * @param $share * @param $exceptionMessage * @param $exception */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataGeneralChecks')] public function testGeneralChecks($share, $exceptionMessage, $exception): void { $thrown = null; @@ -1011,7 +1033,7 @@ class ManagerTest extends \Test\TestCase { try { self::invokePrivate($this->manager, 'generalCreateChecks', [$share]); $thrown = false; - } catch (\OCP\Share\Exceptions\GenericShareException $e) { + } catch (GenericShareException $e) { $this->assertEquals($exceptionMessage, $e->getHint()); $thrown = true; } catch (\InvalidArgumentException $e) { @@ -1048,15 +1070,13 @@ class ManagerTest extends \Test\TestCase { self::invokePrivate($this->manager, 'generalCreateChecks', [$share]); } - public function validateExpirationDateInternalProvider() { + public static function validateExpirationDateInternalProvider() { return [[IShare::TYPE_USER], [IShare::TYPE_REMOTE], [IShare::TYPE_REMOTE_GROUP]]; } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalInPast($shareType): void { - $this->expectException(\OCP\Share\Exceptions\GenericShareException::class); + $this->expectException(GenericShareException::class); $this->expectExceptionMessage('Expiration date is in the past'); // Expire date in the past @@ -1070,9 +1090,7 @@ class ManagerTest extends \Test\TestCase { self::invokePrivate($this->manager, 'validateExpirationDateInternal', [$share]); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalEnforceButNotSet($shareType): void { $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessage('Expiration date is enforced'); @@ -1097,9 +1115,7 @@ class ManagerTest extends \Test\TestCase { self::invokePrivate($this->manager, 'validateExpirationDateInternal', [$share]); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalEnforceButNotEnabledAndNotSet($shareType): void { $share = $this->manager->newShare(); $share->setProviderId('foo')->setId('bar'); @@ -1122,9 +1138,7 @@ class ManagerTest extends \Test\TestCase { $this->assertNull($share->getExpirationDate()); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalEnforceButNotSetNewShare($shareType): void { $share = $this->manager->newShare(); $share->setShareType($shareType); @@ -1157,9 +1171,7 @@ class ManagerTest extends \Test\TestCase { $this->assertEquals($expected, $share->getExpirationDate()); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalEnforceRelaxedDefaultButNotSetNewShare($shareType): void { $share = $this->manager->newShare(); $share->setShareType($shareType); @@ -1192,11 +1204,9 @@ class ManagerTest extends \Test\TestCase { $this->assertEquals($expected, $share->getExpirationDate()); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalEnforceTooFarIntoFuture($shareType): void { - $this->expectException(\OCP\Share\Exceptions\GenericShareException::class); + $this->expectException(GenericShareException::class); $this->expectExceptionMessage('Cannot set expiration date more than 3 days in the future'); $future = new \DateTime(); @@ -1225,9 +1235,7 @@ class ManagerTest extends \Test\TestCase { self::invokePrivate($this->manager, 'validateExpirationDateInternal', [$share]); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalEnforceValid($shareType): void { $future = new \DateTime('now', $this->dateTimeZone->getTimeZone()); $future->add(new \DateInterval('P2D')); @@ -1256,8 +1264,8 @@ class ManagerTest extends \Test\TestCase { ]); } - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); $hookListener->expects($this->once())->method('listener')->with($this->callback(function ($data) use ($future) { return $data['expirationDate'] == $future; })); @@ -1267,9 +1275,7 @@ class ManagerTest extends \Test\TestCase { $this->assertEquals($expected, $share->getExpirationDate()); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalNoDefault($shareType): void { $date = new \DateTime('now', $this->dateTimeZone->getTimeZone()); $date->add(new \DateInterval('P5D')); @@ -1282,8 +1288,8 @@ class ManagerTest extends \Test\TestCase { $share->setShareType($shareType); $share->setExpirationDate($date); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); $hookListener->expects($this->once())->method('listener')->with($this->callback(function ($data) use ($expected) { return $data['expirationDate'] == $expected && $data['passwordSet'] === false; })); @@ -1293,12 +1299,10 @@ class ManagerTest extends \Test\TestCase { $this->assertEquals($expected, $share->getExpirationDate()); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalNoDateNoDefault($shareType): void { - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); $hookListener->expects($this->once())->method('listener')->with($this->callback(function ($data) { return $data['expirationDate'] === null && $data['passwordSet'] === true; })); @@ -1312,9 +1316,7 @@ class ManagerTest extends \Test\TestCase { $this->assertNull($share->getExpirationDate()); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalNoDateDefault($shareType): void { $share = $this->manager->newShare(); $share->setShareType($shareType); @@ -1340,8 +1342,8 @@ class ManagerTest extends \Test\TestCase { ]); } - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); $hookListener->expects($this->once())->method('listener')->with($this->callback(function ($data) use ($expected) { return $data['expirationDate'] == $expected; })); @@ -1351,9 +1353,7 @@ class ManagerTest extends \Test\TestCase { $this->assertEquals($expected, $share->getExpirationDate()); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalDefault($shareType): void { $future = new \DateTime('now', $this->timezone); $future->add(new \DateInterval('P5D')); @@ -1382,8 +1382,8 @@ class ManagerTest extends \Test\TestCase { ]); } - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); $hookListener->expects($this->once())->method('listener')->with($this->callback(function ($data) use ($expected) { return $data['expirationDate'] == $expected; })); @@ -1393,9 +1393,7 @@ class ManagerTest extends \Test\TestCase { $this->assertEquals($expected, $share->getExpirationDate()); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalHookModification($shareType): void { $nextWeek = new \DateTime('now', $this->timezone); $nextWeek->add(new \DateInterval('P7D')); @@ -1403,9 +1401,9 @@ class ManagerTest extends \Test\TestCase { $save = clone $nextWeek; - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); - $hookListener->expects($this->once())->method('listener')->willReturnCallback(function ($data) { + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener->expects($this->once())->method('listener')->willReturnCallback(function ($data): void { $data['expirationDate']->sub(new \DateInterval('P2D')); }); @@ -1419,9 +1417,7 @@ class ManagerTest extends \Test\TestCase { $this->assertEquals($save, $share->getExpirationDate()); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalHookException($shareType): void { $this->expectException(\Exception::class); $this->expectExceptionMessage('Invalid date!'); @@ -1434,9 +1430,9 @@ class ManagerTest extends \Test\TestCase { $share->setShareType($shareType); $share->setExpirationDate($nextWeek); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); - $hookListener->expects($this->once())->method('listener')->willReturnCallback(function ($data) { + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener->expects($this->once())->method('listener')->willReturnCallback(function ($data): void { $data['accepted'] = false; $data['message'] = 'Invalid date!'; }); @@ -1444,9 +1440,7 @@ class ManagerTest extends \Test\TestCase { self::invokePrivate($this->manager, 'validateExpirationDateInternal', [$share]); } - /** - * @dataProvider validateExpirationDateInternalProvider - */ + #[\PHPUnit\Framework\Attributes\DataProvider('validateExpirationDateInternalProvider')] public function testValidateExpirationDateInternalExistingShareNoDefault($shareType): void { $share = $this->manager->newShare(); $share->setShareType($shareType); @@ -1472,7 +1466,7 @@ class ManagerTest extends \Test\TestCase { } public function testValidateExpirationDateInPast(): void { - $this->expectException(\OCP\Share\Exceptions\GenericShareException::class); + $this->expectException(GenericShareException::class); $this->expectExceptionMessage('Expiration date is in the past'); // Expire date in the past @@ -1558,7 +1552,7 @@ class ManagerTest extends \Test\TestCase { } public function testValidateExpirationDateEnforceTooFarIntoFuture(): void { - $this->expectException(\OCP\Share\Exceptions\GenericShareException::class); + $this->expectException(GenericShareException::class); $this->expectExceptionMessage('Cannot set expiration date more than 3 days in the future'); $future = new \DateTime(); @@ -1595,8 +1589,8 @@ class ManagerTest extends \Test\TestCase { ['core', 'shareapi_default_expire_date', 'no', 'yes'], ]); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); $hookListener->expects($this->once())->method('listener')->with($this->callback(function ($data) use ($future) { return $data['expirationDate'] == $future; })); @@ -1618,8 +1612,8 @@ class ManagerTest extends \Test\TestCase { $share = $this->manager->newShare(); $share->setExpirationDate($date); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); $hookListener->expects($this->once())->method('listener')->with($this->callback(function ($data) use ($expected) { return $data['expirationDate'] == $expected && $data['passwordSet'] === false; })); @@ -1630,8 +1624,8 @@ class ManagerTest extends \Test\TestCase { } public function testValidateExpirationDateNoDateNoDefault(): void { - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); $hookListener->expects($this->once())->method('listener')->with($this->callback(function ($data) { return $data['expirationDate'] === null && $data['passwordSet'] === true; })); @@ -1659,8 +1653,8 @@ class ManagerTest extends \Test\TestCase { ['core', 'link_defaultExpDays', '3', '3'], ]); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); $hookListener->expects($this->once())->method('listener')->with($this->callback(function ($data) use ($expected) { return $data['expirationDate'] == $expected; })); @@ -1689,8 +1683,8 @@ class ManagerTest extends \Test\TestCase { ['core', 'link_defaultExpDays', '3', '1'], ]); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); $hookListener->expects($this->once())->method('listener')->with($this->callback(function ($data) use ($expected) { return $data['expirationDate'] == $expected; })); @@ -1720,8 +1714,8 @@ class ManagerTest extends \Test\TestCase { ['core', 'link_defaultExpDays', '3', '1'], ]); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); $hookListener->expects($this->once())->method('listener')->with($this->callback(function ($data) use ($expected) { return $data['expirationDate'] == $expected; })); @@ -1740,9 +1734,9 @@ class ManagerTest extends \Test\TestCase { $save->sub(new \DateInterval('P2D')); $save->setTimezone(new \DateTimeZone(date_default_timezone_get())); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); - $hookListener->expects($this->once())->method('listener')->willReturnCallback(function ($data) { + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener->expects($this->once())->method('listener')->willReturnCallback(function ($data): void { $data['expirationDate']->sub(new \DateInterval('P2D')); }); @@ -1765,9 +1759,9 @@ class ManagerTest extends \Test\TestCase { $share = $this->manager->newShare(); $share->setExpirationDate($nextWeek); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['listener'])->getMock(); - \OCP\Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); - $hookListener->expects($this->once())->method('listener')->willReturnCallback(function ($data) { + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('\OC\Share', 'verifyExpirationDate', $hookListener, 'listener'); + $hookListener->expects($this->once())->method('listener')->willReturnCallback(function ($data): void { $data['accepted'] = false; $data['message'] = 'Invalid date!'; }); @@ -2183,7 +2177,7 @@ class ManagerTest extends \Test\TestCase { public function testFileLinkCreateChecksNoPublicUpload(): void { $share = $this->manager->newShare(); - $share->setPermissions(\OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE); + $share->setPermissions(Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE); $share->setNodeType('file'); $this->config @@ -2203,7 +2197,7 @@ class ManagerTest extends \Test\TestCase { $share = $this->manager->newShare(); - $share->setPermissions(\OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE); + $share->setPermissions(Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE); $share->setNodeType('folder'); $this->config @@ -2219,7 +2213,7 @@ class ManagerTest extends \Test\TestCase { public function testLinkCreateChecksPublicUpload(): void { $share = $this->manager->newShare(); - $share->setPermissions(\OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE); + $share->setPermissions(Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE); $share->setSharedWith('sharedWith'); $folder = $this->createMock(\OC\Files\Node\Folder::class); $share->setNode($folder); @@ -2238,7 +2232,7 @@ class ManagerTest extends \Test\TestCase { public function testLinkCreateChecksReadOnly(): void { $share = $this->manager->newShare(); - $share->setPermissions(\OCP\Constants::PERMISSION_READ); + $share->setPermissions(Constants::PERMISSION_READ); $share->setSharedWith('sharedWith'); $folder = $this->createMock(\OC\Files\Node\Folder::class); $share->setNode($folder); @@ -2257,7 +2251,7 @@ class ManagerTest extends \Test\TestCase { public function testPathCreateChecksContainsSharedMount(): void { $this->expectException(\InvalidArgumentException::class); - $this->expectExceptionMessage('Path contains files shared with you'); + $this->expectExceptionMessage('You cannot share a folder that contains other shares'); $path = $this->createMock(Folder::class); $path->method('getPath')->willReturn('path'); @@ -2294,7 +2288,7 @@ class ManagerTest extends \Test\TestCase { $this->addToAssertionCount(1); } - public function dataIsSharingDisabledForUser() { + public static function dataIsSharingDisabledForUser() { $data = []; // No exclude groups @@ -2332,7 +2326,6 @@ class ManagerTest extends \Test\TestCase { } /** - * @dataProvider dataIsSharingDisabledForUser * * @param string $excludeGroups * @param string $groupList @@ -2340,6 +2333,7 @@ class ManagerTest extends \Test\TestCase { * @param string[] $groupIds * @param bool $expected */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataIsSharingDisabledForUser')] public function testIsSharingDisabledForUser($excludeGroups, $groupList, $setList, $groupIds, $expected): void { $user = $this->createMock(IUser::class); @@ -2368,7 +2362,7 @@ class ManagerTest extends \Test\TestCase { $this->assertEquals($expected, $res); } - public function dataCanShare() { + public static function dataCanShare() { $data = []; /* @@ -2384,12 +2378,12 @@ class ManagerTest extends \Test\TestCase { } /** - * @dataProvider dataCanShare * * @param bool $expected * @param string $sharingEnabled * @param bool $disabledForUser */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataCanShare')] public function testCanShare($expected, $sharingEnabled, $disabledForUser): void { $this->config->method('getAppValue') ->willReturnMap([ @@ -2397,7 +2391,7 @@ class ManagerTest extends \Test\TestCase { ]); $manager = $this->createManagerMock() - ->setMethods(['sharingDisabledForUser']) + ->onlyMethods(['sharingDisabledForUser']) ->getMock(); $manager->method('sharingDisabledForUser') @@ -2418,8 +2412,9 @@ class ManagerTest extends \Test\TestCase { } public function testCreateShareUser(): void { + /** @var Manager&MockObject $manager */ $manager = $this->createManagerMock() - ->setMethods(['canShare', 'generalCreateChecks', 'userCreateChecks', 'pathCreateChecks']) + ->onlyMethods(['canShare', 'generalCreateChecks', 'userCreateChecks', 'pathCreateChecks']) ->getMock(); $shareOwner = $this->createMock(IUser::class); @@ -2438,7 +2433,7 @@ class ManagerTest extends \Test\TestCase { 'sharedWith', 'sharedBy', null, - \OCP\Constants::PERMISSION_ALL); + Constants::PERMISSION_ALL); $manager->expects($this->once()) ->method('canShare') @@ -2474,7 +2469,7 @@ class ManagerTest extends \Test\TestCase { public function testCreateShareGroup(): void { $manager = $this->createManagerMock() - ->setMethods(['canShare', 'generalCreateChecks', 'groupCreateChecks', 'pathCreateChecks']) + ->onlyMethods(['canShare', 'generalCreateChecks', 'groupCreateChecks', 'pathCreateChecks']) ->getMock(); $shareOwner = $this->createMock(IUser::class); @@ -2493,7 +2488,7 @@ class ManagerTest extends \Test\TestCase { 'sharedWith', 'sharedBy', null, - \OCP\Constants::PERMISSION_ALL); + Constants::PERMISSION_ALL); $manager->expects($this->once()) ->method('canShare') @@ -2529,7 +2524,7 @@ class ManagerTest extends \Test\TestCase { public function testCreateShareLink(): void { $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'generalCreateChecks', 'linkCreateChecks', @@ -2556,7 +2551,7 @@ class ManagerTest extends \Test\TestCase { $share->setShareType(IShare::TYPE_LINK) ->setNode($path) ->setSharedBy('sharedBy') - ->setPermissions(\OCP\Constants::PERMISSION_ALL) + ->setPermissions(Constants::PERMISSION_ALL) ->setExpirationDate($date) ->setPassword('password'); @@ -2602,40 +2597,30 @@ class ManagerTest extends \Test\TestCase { return $share->setId(42); }); + $calls = [ + BeforeShareCreatedEvent::class, + ShareCreatedEvent::class, + ]; $this->dispatcher->expects($this->exactly(2)) ->method('dispatchTyped') - ->withConsecutive( - // Pre share - [ - $this->callback(function (BeforeShareCreatedEvent $e) use ($path, $date) { - $share = $e->getShare(); - - return $share->getShareType() === IShare::TYPE_LINK && - $share->getNode() === $path && - $share->getSharedBy() === 'sharedBy' && - $share->getPermissions() === \OCP\Constants::PERMISSION_ALL && - $share->getExpirationDate() === $date && - $share->getPassword() === 'hashed' && - $share->getToken() === 'token'; - }) - ], - // Post share - [ - $this->callback(function (ShareCreatedEvent $e) use ($path, $date) { - $share = $e->getShare(); - - return $share->getShareType() === IShare::TYPE_LINK && - $share->getNode() === $path && - $share->getSharedBy() === 'sharedBy' && - $share->getPermissions() === \OCP\Constants::PERMISSION_ALL && - $share->getExpirationDate() === $date && - $share->getPassword() === 'hashed' && - $share->getToken() === 'token' && - $share->getId() === '42' && - $share->getTarget() === '/target'; - }) - ] - ); + ->willReturnCallback(function ($event) use (&$calls, $date, $path): void { + $expected = array_shift($calls); + $this->assertInstanceOf($expected, $event); + $share = $event->getShare(); + + $this->assertEquals(IShare::TYPE_LINK, $share->getShareType(), 'getShareType'); + $this->assertEquals($path, $share->getNode(), 'getNode'); + $this->assertEquals('sharedBy', $share->getSharedBy(), 'getSharedBy'); + $this->assertEquals(Constants::PERMISSION_ALL, $share->getPermissions(), 'getPermissions'); + $this->assertEquals($date, $share->getExpirationDate(), 'getExpirationDate'); + $this->assertEquals('hashed', $share->getPassword(), 'getPassword'); + $this->assertEquals('token', $share->getToken(), 'getToken'); + + if ($expected === ShareCreatedEvent::class) { + $this->assertEquals('42', $share->getId(), 'getId'); + $this->assertEquals('/target', $share->getTarget(), 'getTarget'); + } + }); /** @var IShare $share */ $share = $manager->createShare($share); @@ -2649,7 +2634,7 @@ class ManagerTest extends \Test\TestCase { public function testCreateShareMail(): void { $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'generalCreateChecks', 'linkCreateChecks', @@ -2674,7 +2659,7 @@ class ManagerTest extends \Test\TestCase { $share->setShareType(IShare::TYPE_EMAIL) ->setNode($path) ->setSharedBy('sharedBy') - ->setPermissions(\OCP\Constants::PERMISSION_ALL); + ->setPermissions(Constants::PERMISSION_ALL); $manager->expects($this->once()) ->method('canShare') @@ -2709,38 +2694,30 @@ class ManagerTest extends \Test\TestCase { return $share->setId(42); }); + $calls = [ + BeforeShareCreatedEvent::class, + ShareCreatedEvent::class, + ]; $this->dispatcher->expects($this->exactly(2)) ->method('dispatchTyped') - ->withConsecutive( - [ - $this->callback(function (BeforeShareCreatedEvent $e) use ($path) { - $share = $e->getShare(); - - return $share->getShareType() === IShare::TYPE_EMAIL && - $share->getNode() === $path && - $share->getSharedBy() === 'sharedBy' && - $share->getPermissions() === \OCP\Constants::PERMISSION_ALL && - $share->getExpirationDate() === null && - $share->getPassword() === null && - $share->getToken() === 'token'; - }) - ], - [ - $this->callback(function (ShareCreatedEvent $e) use ($path) { - $share = $e->getShare(); - - return $share->getShareType() === IShare::TYPE_EMAIL && - $share->getNode() === $path && - $share->getSharedBy() === 'sharedBy' && - $share->getPermissions() === \OCP\Constants::PERMISSION_ALL && - $share->getExpirationDate() === null && - $share->getPassword() === null && - $share->getToken() === 'token' && - $share->getId() === '42' && - $share->getTarget() === '/target'; - }) - ], - ); + ->willReturnCallback(function ($event) use (&$calls, $path): void { + $expected = array_shift($calls); + $this->assertInstanceOf($expected, $event); + $share = $event->getShare(); + + $this->assertEquals(IShare::TYPE_EMAIL, $share->getShareType(), 'getShareType'); + $this->assertEquals($path, $share->getNode(), 'getNode'); + $this->assertEquals('sharedBy', $share->getSharedBy(), 'getSharedBy'); + $this->assertEquals(Constants::PERMISSION_ALL, $share->getPermissions(), 'getPermissions'); + $this->assertNull($share->getExpirationDate(), 'getExpirationDate'); + $this->assertNull($share->getPassword(), 'getPassword'); + $this->assertEquals('token', $share->getToken(), 'getToken'); + + if ($expected === ShareCreatedEvent::class) { + $this->assertEquals('42', $share->getId(), 'getId'); + $this->assertEquals('/target', $share->getTarget(), 'getTarget'); + } + }); /** @var IShare $share */ $share = $manager->createShare($share); @@ -2756,7 +2733,7 @@ class ManagerTest extends \Test\TestCase { $this->expectExceptionMessage('I won\'t let you share'); $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'generalCreateChecks', 'userCreateChecks', @@ -2780,7 +2757,7 @@ class ManagerTest extends \Test\TestCase { 'sharedWith', 'sharedBy', null, - \OCP\Constants::PERMISSION_ALL); + Constants::PERMISSION_ALL); $manager->expects($this->once()) ->method('canShare') @@ -2810,7 +2787,7 @@ class ManagerTest extends \Test\TestCase { ->method('dispatchTyped') ->with( $this->isInstanceOf(BeforeShareCreatedEvent::class) - )->willReturnCallback(function (BeforeShareCreatedEvent $e) { + )->willReturnCallback(function (BeforeShareCreatedEvent $e): void { $e->setError('I won\'t let you share!'); $e->stopPropagation(); } @@ -2821,7 +2798,7 @@ class ManagerTest extends \Test\TestCase { public function testCreateShareOfIncomingFederatedShare(): void { $manager = $this->createManagerMock() - ->setMethods(['canShare', 'generalCreateChecks', 'userCreateChecks', 'pathCreateChecks']) + ->onlyMethods(['canShare', 'generalCreateChecks', 'userCreateChecks', 'pathCreateChecks']) ->getMock(); $shareOwner = $this->createMock(IUser::class); @@ -2859,7 +2836,7 @@ class ManagerTest extends \Test\TestCase { 'sharedWith', 'sharedBy', null, - \OCP\Constants::PERMISSION_ALL); + Constants::PERMISSION_ALL); $manager->expects($this->once()) ->method('canShare') @@ -2894,10 +2871,9 @@ class ManagerTest extends \Test\TestCase { } public function testGetSharesBy(): void { - $node = $this->createMock(Folder::class); - $share = $this->manager->newShare(); - $share->setNode($node); + + $node = $this->createMock(Folder::class); $this->defaultProvider->expects($this->once()) ->method('getSharesBy') @@ -2950,13 +2926,11 @@ class ManagerTest extends \Test\TestCase { * deleted (as they are evaluated). but share 8 should still be there. */ public function testGetSharesByExpiredLinkShares(): void { - $node = $this->createMock(File::class); - $manager = $this->createManagerMock() - ->setMethods(['deleteShare']) + ->onlyMethods(['deleteShare']) ->getMock(); - /** @var \OCP\Share\IShare[] $shares */ + /** @var IShare[] $shares */ $shares = []; /* @@ -2965,7 +2939,6 @@ class ManagerTest extends \Test\TestCase { for ($i = 0; $i < 8; $i++) { $share = $this->manager->newShare(); $share->setId($i); - $share->setNode($node); $shares[] = $share; } @@ -2980,12 +2953,14 @@ class ManagerTest extends \Test\TestCase { $shares[4]->setExpirationDate($today); $shares[5]->setExpirationDate($today); - /** @var \OCP\Share\IShare[] $i */ + /** @var IShare[] $i */ $shares2 = []; for ($i = 0; $i < 8; $i++) { $shares2[] = clone $shares[$i]; } + $node = $this->createMock(File::class); + /* * Simulate the getSharesBy call. */ @@ -2999,7 +2974,7 @@ class ManagerTest extends \Test\TestCase { * Simulate the deleteShare call. */ $manager->method('deleteShare') - ->willReturnCallback(function ($share) use (&$shares2) { + ->willReturnCallback(function ($share) use (&$shares2): void { for ($i = 0; $i < count($shares2); $i++) { if ($shares2[$i]->getId() === $share->getId()) { array_splice($shares2, $i, 1); @@ -3073,7 +3048,7 @@ class ManagerTest extends \Test\TestCase { ->method('getProviderForType') ->willReturnCallback(function ($shareType) use ($roomShareProvider) { if ($shareType !== IShare::TYPE_ROOM) { - throw new Exception\ProviderException(); + throw new ProviderException(); } return $roomShareProvider; @@ -3103,13 +3078,17 @@ class ManagerTest extends \Test\TestCase { $share = $this->createMock(IShare::class); + $calls = [ + [IShare::TYPE_LINK], + [IShare::TYPE_REMOTE], + ]; $factory->expects($this->exactly(2)) ->method('getProviderForType') - ->withConsecutive( - [IShare::TYPE_LINK], - [IShare::TYPE_REMOTE] - ) - ->willReturn($this->defaultProvider); + ->willReturnCallback(function () use (&$calls) { + $expected = array_shift($calls); + $this->assertEquals($expected, func_get_args()); + return $this->defaultProvider; + }); $this->defaultProvider->expects($this->exactly(2)) ->method('getShareByToken') @@ -3125,7 +3104,7 @@ class ManagerTest extends \Test\TestCase { public function testGetShareByTokenHideDisabledUser(): void { - $this->expectException(\OCP\Share\Exceptions\ShareNotFound::class); + $this->expectException(ShareNotFound::class); $this->expectExceptionMessage('The requested share comes from a disabled user'); $this->config @@ -3141,16 +3120,14 @@ class ManagerTest extends \Test\TestCase { ->willReturnArgument(0); $manager = $this->createManagerMock() - ->setMethods(['deleteShare']) + ->onlyMethods(['deleteShare']) ->getMock(); $date = new \DateTime(); $date->setTime(0, 0, 0); $date->add(new \DateInterval('P2D')); - $node = $this->createMock(File::class); $share = $this->manager->newShare(); $share->setExpirationDate($date); - $share->setNode($node); $share->setShareOwner('owner'); $share->setSharedBy('sharedBy'); @@ -3182,7 +3159,7 @@ class ManagerTest extends \Test\TestCase { public function testGetShareByTokenExpired(): void { - $this->expectException(\OCP\Share\Exceptions\ShareNotFound::class); + $this->expectException(ShareNotFound::class); $this->expectExceptionMessage('The requested share does not exist anymore'); $this->config @@ -3196,7 +3173,7 @@ class ManagerTest extends \Test\TestCase { ->willReturnArgument(0); $manager = $this->createManagerMock() - ->setMethods(['deleteShare']) + ->onlyMethods(['deleteShare']) ->getMock(); $date = new \DateTime(); @@ -3228,10 +3205,8 @@ class ManagerTest extends \Test\TestCase { $date = new \DateTime(); $date->setTime(0, 0, 0); $date->add(new \DateInterval('P2D')); - $node = $this->createMock(Folder::class); $share = $this->manager->newShare(); $share->setExpirationDate($date); - $share->setNode($node); $this->defaultProvider->expects($this->once()) ->method('getShareByToken') @@ -3245,7 +3220,7 @@ class ManagerTest extends \Test\TestCase { public function testGetShareByTokenWithPublicLinksDisabled(): void { - $this->expectException(\OCP\Share\Exceptions\ShareNotFound::class); + $this->expectException(ShareNotFound::class); $this->config ->expects($this->once()) @@ -3267,7 +3242,7 @@ class ManagerTest extends \Test\TestCase { $share = $this->manager->newShare(); $share->setShareType(IShare::TYPE_LINK) - ->setPermissions(\OCP\Constants::PERMISSION_READ | \OCP\Constants::PERMISSION_CREATE | \OCP\Constants::PERMISSION_UPDATE); + ->setPermissions(Constants::PERMISSION_READ | Constants::PERMISSION_CREATE | Constants::PERMISSION_UPDATE); $share->setSharedWith('sharedWith'); $folder = $this->createMock(\OC\Files\Node\Folder::class); $share->setNode($folder); @@ -3279,7 +3254,7 @@ class ManagerTest extends \Test\TestCase { $res = $this->manager->getShareByToken('validToken'); - $this->assertSame(\OCP\Constants::PERMISSION_READ, $res->getPermissions()); + $this->assertSame(Constants::PERMISSION_READ, $res->getPermissions()); } public function testCheckPasswordNoLinkShare(): void { @@ -3331,7 +3306,7 @@ class ManagerTest extends \Test\TestCase { $this->defaultProvider->expects($this->once()) ->method('update') - ->with($this->callback(function (\OCP\Share\IShare $share) { + ->with($this->callback(function (IShare $share) { return $share->getPassword() === 'newHash'; })); @@ -3344,7 +3319,7 @@ class ManagerTest extends \Test\TestCase { $this->expectExceptionMessage('Cannot change share type'); $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById' ]) @@ -3372,7 +3347,7 @@ class ManagerTest extends \Test\TestCase { $this->expectExceptionMessage('Can only update recipient on user shares'); $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById' ]) @@ -3400,7 +3375,7 @@ class ManagerTest extends \Test\TestCase { $this->expectExceptionMessage('Cannot share with the share owner'); $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById' ]) @@ -3427,7 +3402,7 @@ class ManagerTest extends \Test\TestCase { $this->userManager->expects($this->any())->method('userExists')->willReturn(true); $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -3466,15 +3441,15 @@ class ManagerTest extends \Test\TestCase { ->with($share) ->willReturn($share); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->never())->method('post'); $this->rootFolder->method('getUserFolder')->with('newUser')->willReturnSelf(); $this->rootFolder->method('getRelativePath')->with('/newUser/files/myPath')->willReturn('/myPath'); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener2, 'post'); $hookListener2->expects($this->once())->method('post')->with([ 'itemType' => 'file', 'itemSource' => 100, @@ -3491,7 +3466,7 @@ class ManagerTest extends \Test\TestCase { public function testUpdateShareGroup(): void { $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -3524,12 +3499,12 @@ class ManagerTest extends \Test\TestCase { ->with($share) ->willReturn($share); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->never())->method('post'); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener2, 'post'); $hookListener2->expects($this->never())->method('post'); $manager->updateShare($share); @@ -3537,7 +3512,7 @@ class ManagerTest extends \Test\TestCase { public function testUpdateShareLink(): void { $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -3586,8 +3561,8 @@ class ManagerTest extends \Test\TestCase { ->with($share) ->willReturn($share); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->once())->method('post')->with([ 'itemType' => 'file', 'itemSource' => 100, @@ -3595,8 +3570,8 @@ class ManagerTest extends \Test\TestCase { 'uidOwner' => 'owner', ]); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); $hookListener2->expects($this->once())->method('post')->with([ 'itemType' => 'file', 'itemSource' => 100, @@ -3605,8 +3580,8 @@ class ManagerTest extends \Test\TestCase { 'disabled' => false, ]); - $hookListener3 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); + $hookListener3 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); $hookListener3->expects($this->never())->method('post'); @@ -3618,7 +3593,7 @@ class ManagerTest extends \Test\TestCase { $this->expectExceptionMessage('Cannot enable sending the password by Talk with an empty password'); $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -3667,16 +3642,16 @@ class ManagerTest extends \Test\TestCase { $this->defaultProvider->expects($this->never()) ->method('update'); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->never())->method('post'); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); $hookListener2->expects($this->never())->method('post'); - $hookListener3 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); + $hookListener3 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); $hookListener3->expects($this->never())->method('post'); $manager->updateShare($share); @@ -3684,7 +3659,7 @@ class ManagerTest extends \Test\TestCase { public function testUpdateShareMail(): void { $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -3697,7 +3672,7 @@ class ManagerTest extends \Test\TestCase { $originalShare = $this->manager->newShare(); $originalShare->setShareType(IShare::TYPE_EMAIL) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); + ->setPermissions(Constants::PERMISSION_ALL); $tomorrow = new \DateTime(); $tomorrow->setTime(0, 0, 0); @@ -3716,7 +3691,7 @@ class ManagerTest extends \Test\TestCase { ->setPassword('password') ->setExpirationDate($tomorrow) ->setNode($file) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); + ->setPermissions(Constants::PERMISSION_ALL); $manager->expects($this->once())->method('canShare')->willReturn(true); $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); @@ -3736,8 +3711,8 @@ class ManagerTest extends \Test\TestCase { ->with($share, 'password') ->willReturn($share); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->once())->method('post')->with([ 'itemType' => 'file', 'itemSource' => 100, @@ -3745,8 +3720,8 @@ class ManagerTest extends \Test\TestCase { 'uidOwner' => 'owner', ]); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); $hookListener2->expects($this->once())->method('post')->with([ 'itemType' => 'file', 'itemSource' => 100, @@ -3755,8 +3730,8 @@ class ManagerTest extends \Test\TestCase { 'disabled' => false, ]); - $hookListener3 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); + $hookListener3 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); $hookListener3->expects($this->never())->method('post'); $manager->updateShare($share); @@ -3764,7 +3739,7 @@ class ManagerTest extends \Test\TestCase { public function testUpdateShareMailEnableSendPasswordByTalk(): void { $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -3777,7 +3752,7 @@ class ManagerTest extends \Test\TestCase { $originalShare = $this->manager->newShare(); $originalShare->setShareType(IShare::TYPE_EMAIL) - ->setPermissions(\OCP\Constants::PERMISSION_ALL) + ->setPermissions(Constants::PERMISSION_ALL) ->setPassword(null) ->setSendPasswordByTalk(false); @@ -3799,7 +3774,7 @@ class ManagerTest extends \Test\TestCase { ->setSendPasswordByTalk(true) ->setExpirationDate($tomorrow) ->setNode($file) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); + ->setPermissions(Constants::PERMISSION_ALL); $manager->expects($this->once())->method('canShare')->willReturn(true); $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); @@ -3819,8 +3794,8 @@ class ManagerTest extends \Test\TestCase { ->with($share, 'password') ->willReturn($share); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->once())->method('post')->with([ 'itemType' => 'file', 'itemSource' => 100, @@ -3828,8 +3803,8 @@ class ManagerTest extends \Test\TestCase { 'uidOwner' => 'owner', ]); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); $hookListener2->expects($this->once())->method('post')->with([ 'itemType' => 'file', 'itemSource' => 100, @@ -3838,8 +3813,8 @@ class ManagerTest extends \Test\TestCase { 'disabled' => false, ]); - $hookListener3 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); + $hookListener3 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); $hookListener3->expects($this->never())->method('post'); $manager->updateShare($share); @@ -3847,7 +3822,7 @@ class ManagerTest extends \Test\TestCase { public function testUpdateShareMailEnableSendPasswordByTalkWithDifferentPassword(): void { $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -3860,7 +3835,7 @@ class ManagerTest extends \Test\TestCase { $originalShare = $this->manager->newShare(); $originalShare->setShareType(IShare::TYPE_EMAIL) - ->setPermissions(\OCP\Constants::PERMISSION_ALL) + ->setPermissions(Constants::PERMISSION_ALL) ->setPassword('anotherPasswordHash') ->setSendPasswordByTalk(false); @@ -3882,7 +3857,7 @@ class ManagerTest extends \Test\TestCase { ->setSendPasswordByTalk(true) ->setExpirationDate($tomorrow) ->setNode($file) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); + ->setPermissions(Constants::PERMISSION_ALL); $manager->expects($this->once())->method('canShare')->willReturn(true); $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); @@ -3907,8 +3882,8 @@ class ManagerTest extends \Test\TestCase { ->with($share, 'password') ->willReturn($share); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->once())->method('post')->with([ 'itemType' => 'file', 'itemSource' => 100, @@ -3916,8 +3891,8 @@ class ManagerTest extends \Test\TestCase { 'uidOwner' => 'owner', ]); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); $hookListener2->expects($this->once())->method('post')->with([ 'itemType' => 'file', 'itemSource' => 100, @@ -3926,8 +3901,8 @@ class ManagerTest extends \Test\TestCase { 'disabled' => false, ]); - $hookListener3 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); + $hookListener3 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); $hookListener3->expects($this->never())->method('post'); $manager->updateShare($share); @@ -3938,7 +3913,7 @@ class ManagerTest extends \Test\TestCase { $this->expectExceptionMessage('Cannot enable sending the password by Talk with an empty password'); $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -3951,7 +3926,7 @@ class ManagerTest extends \Test\TestCase { $originalShare = $this->manager->newShare(); $originalShare->setShareType(IShare::TYPE_EMAIL) - ->setPermissions(\OCP\Constants::PERMISSION_ALL) + ->setPermissions(Constants::PERMISSION_ALL) ->setPassword(null) ->setSendPasswordByTalk(false); @@ -3973,7 +3948,7 @@ class ManagerTest extends \Test\TestCase { ->setSendPasswordByTalk(true) ->setExpirationDate($tomorrow) ->setNode($file) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); + ->setPermissions(Constants::PERMISSION_ALL); $manager->expects($this->once())->method('canShare')->willReturn(true); $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); @@ -3990,16 +3965,16 @@ class ManagerTest extends \Test\TestCase { $this->defaultProvider->expects($this->never()) ->method('update'); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->never())->method('post'); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); $hookListener2->expects($this->never())->method('post'); - $hookListener3 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); + $hookListener3 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); $hookListener3->expects($this->never())->method('post'); $manager->updateShare($share); @@ -4011,7 +3986,7 @@ class ManagerTest extends \Test\TestCase { $this->expectExceptionMessage('Cannot enable sending the password by Talk with an empty password'); $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -4024,7 +3999,7 @@ class ManagerTest extends \Test\TestCase { $originalShare = $this->manager->newShare(); $originalShare->setShareType(IShare::TYPE_EMAIL) - ->setPermissions(\OCP\Constants::PERMISSION_ALL) + ->setPermissions(Constants::PERMISSION_ALL) ->setPassword('passwordHash') ->setSendPasswordByTalk(false); @@ -4046,7 +4021,7 @@ class ManagerTest extends \Test\TestCase { ->setSendPasswordByTalk(true) ->setExpirationDate($tomorrow) ->setNode($file) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); + ->setPermissions(Constants::PERMISSION_ALL); $manager->expects($this->once())->method('canShare')->willReturn(true); $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); @@ -4063,16 +4038,16 @@ class ManagerTest extends \Test\TestCase { $this->defaultProvider->expects($this->never()) ->method('update'); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->never())->method('post'); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); $hookListener2->expects($this->never())->method('post'); - $hookListener3 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); + $hookListener3 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); $hookListener3->expects($this->never())->method('post'); $manager->updateShare($share); @@ -4084,7 +4059,7 @@ class ManagerTest extends \Test\TestCase { $this->expectExceptionMessage('Cannot enable sending the password by Talk with an empty password'); $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -4097,7 +4072,7 @@ class ManagerTest extends \Test\TestCase { $originalShare = $this->manager->newShare(); $originalShare->setShareType(IShare::TYPE_EMAIL) - ->setPermissions(\OCP\Constants::PERMISSION_ALL) + ->setPermissions(Constants::PERMISSION_ALL) ->setPassword('passwordHash') ->setSendPasswordByTalk(false); @@ -4119,7 +4094,7 @@ class ManagerTest extends \Test\TestCase { ->setSendPasswordByTalk(true) ->setExpirationDate($tomorrow) ->setNode($file) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); + ->setPermissions(Constants::PERMISSION_ALL); $manager->expects($this->once())->method('canShare')->willReturn(true); $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); @@ -4136,16 +4111,16 @@ class ManagerTest extends \Test\TestCase { $this->defaultProvider->expects($this->never()) ->method('update'); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->never())->method('post'); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); $hookListener2->expects($this->never())->method('post'); - $hookListener3 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); + $hookListener3 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); $hookListener3->expects($this->never())->method('post'); $manager->updateShare($share); @@ -4157,7 +4132,7 @@ class ManagerTest extends \Test\TestCase { $this->expectExceptionMessage('Cannot enable sending the password by Talk without setting a new password'); $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -4170,7 +4145,7 @@ class ManagerTest extends \Test\TestCase { $originalShare = $this->manager->newShare(); $originalShare->setShareType(IShare::TYPE_EMAIL) - ->setPermissions(\OCP\Constants::PERMISSION_ALL) + ->setPermissions(Constants::PERMISSION_ALL) ->setPassword('password') ->setSendPasswordByTalk(false); @@ -4192,7 +4167,7 @@ class ManagerTest extends \Test\TestCase { ->setSendPasswordByTalk(true) ->setExpirationDate($tomorrow) ->setNode($file) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); + ->setPermissions(Constants::PERMISSION_ALL); $manager->expects($this->once())->method('canShare')->willReturn(true); $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); @@ -4211,16 +4186,16 @@ class ManagerTest extends \Test\TestCase { $this->defaultProvider->expects($this->never()) ->method('update'); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->never())->method('post'); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); $hookListener2->expects($this->never())->method('post'); - $hookListener3 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); + $hookListener3 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); $hookListener3->expects($this->never())->method('post'); $manager->updateShare($share); @@ -4231,7 +4206,7 @@ class ManagerTest extends \Test\TestCase { $this->expectExceptionMessage('Cannot disable sending the password by Talk without setting a new password'); $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -4244,7 +4219,7 @@ class ManagerTest extends \Test\TestCase { $originalShare = $this->manager->newShare(); $originalShare->setShareType(IShare::TYPE_EMAIL) - ->setPermissions(\OCP\Constants::PERMISSION_ALL) + ->setPermissions(Constants::PERMISSION_ALL) ->setPassword('passwordHash') ->setSendPasswordByTalk(true); @@ -4266,7 +4241,7 @@ class ManagerTest extends \Test\TestCase { ->setSendPasswordByTalk(false) ->setExpirationDate($tomorrow) ->setNode($file) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); + ->setPermissions(Constants::PERMISSION_ALL); $manager->expects($this->once())->method('canShare')->willReturn(true); $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); @@ -4285,16 +4260,16 @@ class ManagerTest extends \Test\TestCase { $this->defaultProvider->expects($this->never()) ->method('update'); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->never())->method('post'); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); $hookListener2->expects($this->never())->method('post'); - $hookListener3 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); + $hookListener3 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); $hookListener3->expects($this->never())->method('post'); $manager->updateShare($share); @@ -4305,7 +4280,7 @@ class ManagerTest extends \Test\TestCase { $this->expectExceptionMessage('Cannot disable sending the password by Talk without setting a new password'); $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'canShare', 'getShareById', 'generalCreateChecks', @@ -4318,7 +4293,7 @@ class ManagerTest extends \Test\TestCase { $originalShare = $this->manager->newShare(); $originalShare->setShareType(IShare::TYPE_EMAIL) - ->setPermissions(\OCP\Constants::PERMISSION_ALL) + ->setPermissions(Constants::PERMISSION_ALL) ->setPassword('passwordHash') ->setSendPasswordByTalk(true); @@ -4340,7 +4315,7 @@ class ManagerTest extends \Test\TestCase { ->setSendPasswordByTalk(false) ->setExpirationDate($tomorrow) ->setNode($file) - ->setPermissions(\OCP\Constants::PERMISSION_ALL); + ->setPermissions(Constants::PERMISSION_ALL); $manager->expects($this->once())->method('canShare')->willReturn(true); $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); @@ -4359,16 +4334,16 @@ class ManagerTest extends \Test\TestCase { $this->defaultProvider->expects($this->never()) ->method('update'); - $hookListener = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); + $hookListener = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListener, 'post'); $hookListener->expects($this->never())->method('post'); - $hookListener2 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); + $hookListener2 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_password', $hookListener2, 'post'); $hookListener2->expects($this->never())->method('post'); - $hookListener3 = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); - \OCP\Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); + $hookListener3 = $this->createMock(DummyShareManagerListener::class); + Util::connectHook('OCP\Share', 'post_update_permissions', $hookListener3, 'post'); $hookListener3->expects($this->never())->method('post'); $manager->updateShare($share); @@ -4471,9 +4446,7 @@ class ManagerTest extends \Test\TestCase { $this->addToAssertionCount(1); } - /** - * @dataProvider dataTestShareProviderExists - */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestShareProviderExists')] public function testShareProviderExists($shareType, $expected): void { $factory = $this->getMockBuilder('OCP\Share\IProviderFactory')->getMock(); $factory->expects($this->any())->method('getProviderForType') @@ -4481,7 +4454,7 @@ class ManagerTest extends \Test\TestCase { if ($id === IShare::TYPE_USER) { return true; } - throw new Exception\ProviderException(); + throw new ProviderException(); }); $manager = $this->createManager($factory); @@ -4490,7 +4463,7 @@ class ManagerTest extends \Test\TestCase { ); } - public function dataTestShareProviderExists() { + public static function dataTestShareProviderExists() { return [ [IShare::TYPE_USER, true], [42, false], @@ -4550,7 +4523,7 @@ class ManagerTest extends \Test\TestCase { $manager = $this->createManager($factory); $factory->setProvider($this->defaultProvider); - $extraProvider = $this->createMock(IShareProvider::class); + $extraProvider = $this->createMock(IShareProviderSupportsAllSharesInFolder::class); $factory->setSecondProvider($extraProvider); $share1 = $this->createMock(IShare::class); @@ -4558,28 +4531,20 @@ class ManagerTest extends \Test\TestCase { $mount = $this->createMock(IShareOwnerlessMount::class); - $file = $this->createMock(File::class); - $file - ->method('getId') - ->willReturn(1); - $folder = $this->createMock(Folder::class); $folder ->method('getMountPoint') ->willReturn($mount); - $folder - ->method('getDirectoryListing') - ->willReturn([$file]); $this->defaultProvider - ->method('getSharesByPath') - ->with($file) - ->willReturn([$share1]); + ->method('getAllSharesInFolder') + ->with($folder) + ->willReturn([1 => [$share1]]); $extraProvider - ->method('getSharesByPath') - ->with($file) - ->willReturn([$share2]); + ->method('getAllSharesInFolder') + ->with($folder) + ->willReturn([1 => [$share2]]); $this->assertSame([ 1 => [$share1, $share2], @@ -4829,7 +4794,7 @@ class ManagerTest extends \Test\TestCase { $this->assertSame($expects, $result); } - public function dataCurrentUserCanEnumerateTargetUser(): array { + public static function dataCurrentUserCanEnumerateTargetUser(): array { return [ 'Full match guest' => [true, true, false, false, false, false, false, true], 'Full match user' => [false, true, false, false, false, false, false, true], @@ -4852,13 +4817,13 @@ class ManagerTest extends \Test\TestCase { } /** - * @dataProvider dataCurrentUserCanEnumerateTargetUser * @param bool $expected */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataCurrentUserCanEnumerateTargetUser')] public function testCurrentUserCanEnumerateTargetUser(bool $currentUserIsGuest, bool $allowEnumerationFullMatch, bool $allowEnumeration, bool $limitEnumerationToPhone, bool $limitEnumerationToGroups, bool $isKnownToUser, bool $haveCommonGroup, bool $expected): void { /** @var IManager|MockObject $manager */ $manager = $this->createManagerMock() - ->setMethods([ + ->onlyMethods([ 'allowEnumerationFullMatch', 'allowEnumeration', 'limitEnumerationToPhone', @@ -4911,7 +4876,7 @@ class DummyFactory implements IProviderFactory { /** @var IShareProvider */ protected $provider; - public function __construct(\OCP\IServerContainer $serverContainer) { + public function __construct(IServerContainer $serverContainer) { } /** |