From 44c073b1e6db328195dd4e2be15e710359687617 Mon Sep 17 00:00:00 2001 From: Roeland Jago Douma Date: Mon, 25 Jan 2016 13:09:50 +0100 Subject: [PATCH] [share 2.0] manager unit tests --- tests/lib/share20/managertest.php | 246 +++++++++++++++++++++++++++++- 1 file changed, 245 insertions(+), 1 deletion(-) diff --git a/tests/lib/share20/managertest.php b/tests/lib/share20/managertest.php index 5fd3fb7cff..9773d548ff 100644 --- a/tests/lib/share20/managertest.php +++ b/tests/lib/share20/managertest.php @@ -34,6 +34,7 @@ use OCP\Security\ISecureRandom; use OCP\Security\IHasher; use OCP\Files\Mount\IMountManager; use OCP\IGroupManager; +use Sabre\VObject\Property\VCard\DateTime; /** * Class ManagerTest @@ -58,7 +59,7 @@ class ManagerTest extends \Test\TestCase { /** @var IHasher */ protected $hasher; - /** @var IShareProvider */ + /** @var IShareProvider | \PHPUnit_Framework_MockObject_MockObject */ protected $defaultProvider; /** @var IMountManager */ @@ -1549,6 +1550,249 @@ class ManagerTest extends \Test\TestCase { $this->assertTrue($this->manager->checkPassword($share, 'password')); } + + /** + * @expectedException Exception + * @expectedExceptionMessage The Share API is disabled + */ + public function testUpdateShareCantShare() { + $manager = $this->createManagerMock() + ->setMethods(['canShare']) + ->getMock(); + + $manager->expects($this->once())->method('canShare')->willReturn(false); + $share = new \OC\Share20\Share(); + $manager->updateShare($share); + } + + /** + * @expectedException Exception + * @expectedExceptionMessage Can't change share type + */ + public function testUpdateShareCantChangeShareType() { + $manager = $this->createManagerMock() + ->setMethods([ + 'canShare', + 'getShareById' + ]) + ->getMock(); + + $originalShare = new \OC\Share20\Share(); + $originalShare->setShareType(\OCP\Share::SHARE_TYPE_GROUP); + + $manager->expects($this->once())->method('canShare')->willReturn(true); + $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); + + $share = new \OC\Share20\Share(); + $share->setProviderId('foo') + ->setId('42') + ->setShareType(\OCP\Share::SHARE_TYPE_USER); + + $manager->updateShare($share); + } + + /** + * @expectedException Exception + * @expectedExceptionMessage Can only update recipient on user shares + */ + public function testUpdateShareCantChangeRecipientForGroupShare() { + $manager = $this->createManagerMock() + ->setMethods([ + 'canShare', + 'getShareById' + ]) + ->getMock(); + + $origGroup = $this->getMock('\OCP\IGroup'); + $newGroup = $this->getMock('\OCP\IGroup'); + + $originalShare = new \OC\Share20\Share(); + $originalShare->setShareType(\OCP\Share::SHARE_TYPE_GROUP) + ->setSharedWith($origGroup); + + $manager->expects($this->once())->method('canShare')->willReturn(true); + $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); + + $share = new \OC\Share20\Share(); + $share->setProviderId('foo') + ->setId('42') + ->setShareType(\OCP\Share::SHARE_TYPE_GROUP) + ->setSharedWith($newGroup); + + $manager->updateShare($share); + } + + /** + * @expectedException Exception + * @expectedExceptionMessage Can't share with the share owner + */ + public function testUpdateShareCantShareWithOwner() { + $manager = $this->createManagerMock() + ->setMethods([ + 'canShare', + 'getShareById' + ]) + ->getMock(); + + $origUser = $this->getMock('\OCP\IUser'); + $newUser = $this->getMock('\OCP\IUser'); + + $originalShare = new \OC\Share20\Share(); + $originalShare->setShareType(\OCP\Share::SHARE_TYPE_USER) + ->setSharedWith($origUser); + + $manager->expects($this->once())->method('canShare')->willReturn(true); + $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); + + $share = new \OC\Share20\Share(); + $share->setProviderId('foo') + ->setId('42') + ->setShareType(\OCP\Share::SHARE_TYPE_USER) + ->setSharedWith($newUser) + ->setShareOwner($newUser); + + $manager->updateShare($share); + } + + public function testUpdateShareUser() { + $manager = $this->createManagerMock() + ->setMethods([ + 'canShare', + 'getShareById', + 'generalCreateChecks', + 'userCreateChecks', + 'pathCreateChecks', + ]) + ->getMock(); + + $origUser = $this->getMock('\OCP\IUser'); + $newUser = $this->getMock('\OCP\IUser'); + + $originalShare = new \OC\Share20\Share(); + $originalShare->setShareType(\OCP\Share::SHARE_TYPE_USER) + ->setSharedWith($origUser); + + $manager->expects($this->once())->method('canShare')->willReturn(true); + $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); + + $share = new \OC\Share20\Share(); + $share->setProviderId('foo') + ->setId('42') + ->setShareType(\OCP\Share::SHARE_TYPE_USER) + ->setSharedWith($origUser) + ->setShareOwner($newUser); + + $this->defaultProvider->expects($this->once()) + ->method('update') + ->with($share) + ->willReturn($share); + + $hookListner = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); + \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListner, 'post'); + $hookListner->expects($this->never())->method('post'); + + + $manager->updateShare($share); + } + + public function testUpdateShareGroup() { + $manager = $this->createManagerMock() + ->setMethods([ + 'canShare', + 'getShareById', + 'generalCreateChecks', + 'groupCreateChecks', + 'pathCreateChecks', + ]) + ->getMock(); + + $origGroup = $this->getMock('\OCP\IGroup'); + $user = $this->getMock('\OCP\IUser'); + + $originalShare = new \OC\Share20\Share(); + $originalShare->setShareType(\OCP\Share::SHARE_TYPE_GROUP) + ->setSharedWith($origGroup); + + $manager->expects($this->once())->method('canShare')->willReturn(true); + $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); + + $share = new \OC\Share20\Share(); + $share->setProviderId('foo') + ->setId('42') + ->setShareType(\OCP\Share::SHARE_TYPE_GROUP) + ->setSharedWith($origGroup) + ->setShareOwner($user); + + $this->defaultProvider->expects($this->once()) + ->method('update') + ->with($share) + ->willReturn($share); + + $hookListner = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); + \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListner, 'post'); + $hookListner->expects($this->never())->method('post'); + + + $manager->updateShare($share); + } + + public function testUpdateShareLink() { + $manager = $this->createManagerMock() + ->setMethods([ + 'canShare', + 'getShareById', + 'generalCreateChecks', + 'linkCreateChecks', + 'pathCreateChecks', + 'verifyPassword', + 'validateExpiredate', + ]) + ->getMock(); + + $user = $this->getMock('\OCP\IUser'); + $user->method('getUID')->willReturn('owner'); + + $originalShare = new \OC\Share20\Share(); + $originalShare->setShareType(\OCP\Share::SHARE_TYPE_LINK); + + $tomorrow = new \DateTime(); + $tomorrow->setTime(0,0,0); + $tomorrow->add(new \DateInterval('P1D')); + + $manager->expects($this->once())->method('canShare')->willReturn(true); + $manager->expects($this->once())->method('getShareById')->with('foo:42')->willReturn($originalShare); + $manager->expects($this->once())->method('validateExpireDate')->with($tomorrow)->willReturn($tomorrow); + + $file = $this->getMock('OCP\Files\File', [], [], 'File'); + $file->method('getId')->willReturn(100); + + $share = new \OC\Share20\Share(); + $share->setProviderId('foo') + ->setId('42') + ->setShareType(\OCP\Share::SHARE_TYPE_LINK) + ->setSharedBy($user) + ->setShareOwner($user) + ->setPassword('password') + ->setExpirationDate($tomorrow) + ->setPath($file); + + $this->defaultProvider->expects($this->once()) + ->method('update') + ->with($share) + ->willReturn($share); + + $hookListner = $this->getMockBuilder('Dummy')->setMethods(['post'])->getMock(); + \OCP\Util::connectHook('OCP\Share', 'post_set_expiration_date', $hookListner, 'post'); + $hookListner->expects($this->once())->method('post')->with([ + 'itemType' => 'file', + 'itemSource' => 100, + 'date' => $tomorrow, + 'uidOwner' => 'owner', + ]); + + + $manager->updateShare($share); + } } class DummyPassword {