diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2017-03-21 23:10:39 +0100 |
---|---|---|
committer | Roeland Jago Douma <roeland@famdouma.nl> | 2017-03-29 00:04:29 +0200 |
commit | 3e93f491f260b79987d90b5123f07d1a7d1298cd (patch) | |
tree | 611e4988de81e7bdb389f0d17f6a6674f4e49506 /apps/dav | |
parent | 73007255ceac2364f8563c84d6b46e113ff44d82 (diff) | |
download | nextcloud-server-3e93f491f260b79987d90b5123f07d1a7d1298cd.tar.gz nextcloud-server-3e93f491f260b79987d90b5123f07d1a7d1298cd.zip |
Adding AvatarHomeTest
Signed-off-by: Morris Jobke <hey@morrisjobke.de>
Diffstat (limited to 'apps/dav')
-rw-r--r-- | apps/dav/lib/Avatars/AvatarHome.php | 22 | ||||
-rw-r--r-- | apps/dav/lib/Avatars/RootCollection.php | 5 | ||||
-rw-r--r-- | apps/dav/tests/unit/Avatars/AvatarHomeTest.php | 125 | ||||
-rw-r--r-- | apps/dav/tests/unit/phpunit.xml | 4 |
4 files changed, 147 insertions, 9 deletions
diff --git a/apps/dav/lib/Avatars/AvatarHome.php b/apps/dav/lib/Avatars/AvatarHome.php index d3fb2b95f34..9e00fe2e8f4 100644 --- a/apps/dav/lib/Avatars/AvatarHome.php +++ b/apps/dav/lib/Avatars/AvatarHome.php @@ -23,6 +23,7 @@ namespace OCA\DAV\Avatars; +use OCP\IAvatarManager; use Sabre\DAV\Exception\Forbidden; use Sabre\DAV\Exception\MethodNotAllowed; use Sabre\DAV\Exception\NotFound; @@ -30,15 +31,20 @@ use Sabre\DAV\ICollection; use Sabre\HTTP\URLUtil; class AvatarHome implements ICollection { + + /** @var array */ private $principalInfo; + /** @var IAvatarManager */ + private $avatarManager; /** * AvatarHome constructor. * * @param array $principalInfo */ - public function __construct($principalInfo) { + public function __construct($principalInfo, IAvatarManager $avatarManager) { $this->principalInfo = $principalInfo; + $this->avatarManager = $avatarManager; } function createFile($name, $data = null) { @@ -59,8 +65,8 @@ class AvatarHome implements ICollection { if ($size <= 0 || $size > 1024) { throw new MethodNotAllowed('Invalid image size'); } - $avatar = \OC::$server->getAvatarManager()->getAvatar($this->getName()); - if (!$avatar->exists()) { + $avatar = $this->avatarManager->getAvatar($this->getName()); + if ($avatar === null || !$avatar->exists()) { throw new NotFound(); } return new AvatarNode($size, $ext, $avatar); @@ -77,8 +83,14 @@ class AvatarHome implements ICollection { } function childExists($name) { - $ret = $this->getChild($name); - return !is_null($ret); + try { + $ret = $this->getChild($name); + return !is_null($ret); + } catch (NotFound $ex) { + return false; + } catch (MethodNotAllowed $ex) { + return false; + } } function delete() { diff --git a/apps/dav/lib/Avatars/RootCollection.php b/apps/dav/lib/Avatars/RootCollection.php index 8cad3d3721a..8614d5d22b0 100644 --- a/apps/dav/lib/Avatars/RootCollection.php +++ b/apps/dav/lib/Avatars/RootCollection.php @@ -15,10 +15,11 @@ class RootCollection extends AbstractPrincipalCollection { * supplied by the authentication backend. * * @param array $principalInfo - * @return IPrincipal + * @return AvatarHome */ function getChildForPrincipal(array $principalInfo) { - return new AvatarHome($principalInfo); + $avatarManager = \OC::$server->getAvatarManager(); + return new AvatarHome($principalInfo, $avatarManager); } function getName() { diff --git a/apps/dav/tests/unit/Avatars/AvatarHomeTest.php b/apps/dav/tests/unit/Avatars/AvatarHomeTest.php new file mode 100644 index 00000000000..ca8306e79a8 --- /dev/null +++ b/apps/dav/tests/unit/Avatars/AvatarHomeTest.php @@ -0,0 +1,125 @@ +<?php +/** + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2017, ownCloud GmbH + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + + +namespace OCA\DAV\Tests\Unit\Avatars; + + +use OCA\DAV\Avatars\AvatarHome; +use OCA\DAV\Avatars\AvatarNode; +use OCP\IAvatar; +use OCP\IAvatarManager; +use Sabre\DAV\Exception\MethodNotAllowed; +use Sabre\DAV\Exception\NotFound; +use Test\TestCase; + +class AvatarHomeTest extends TestCase { + + /** @var AvatarHome */ + private $home; + + /** @var IAvatarManager | \PHPUnit_Framework_MockObject_MockObject */ + private $avatarManager; + + public function setUp() { + $this->avatarManager = $this->createMock(IAvatarManager::class); + $this->home = new AvatarHome(['uri' => 'principals/users/admin'], $this->avatarManager); + } + + /** + * @expectedException \Sabre\DAV\Exception\Forbidden + * @dataProvider providesForbiddenMethods + */ + public function testForbiddenMethods($method) { + $this->home->$method(''); + } + + public function providesForbiddenMethods() { + return [ + ['createFile'], + ['createDirectory'], + ['delete'], + ['setName'] + ]; + } + + public function testGetName() { + $n = $this->home->getName(); + self::assertEquals('admin', $n); + } + + public function providesTestGetChild() { + return [ + [MethodNotAllowed::class, false, ''], + [MethodNotAllowed::class, false, 'bla.foo'], + [MethodNotAllowed::class, false, 'bla.png'], + [NotFound::class, false, '512.png'], + [null, true, '512.png'], + ]; + } + + /** + * @dataProvider providesTestGetChild + */ + public function testGetChild($expectedException, $hasAvatar, $path) { + if ($expectedException !== null) { + $this->expectException($expectedException); + } + $avatar = null; + if ($hasAvatar) { + $avatar = $this->createMock(IAvatar::class); + $avatar->expects($this->once())->method('exists')->willReturn(true); + } + $this->avatarManager->expects($this->any())->method('getAvatar')->with('admin')->willReturn($avatar); + $avatarNode = $this->home->getChild($path); + $this->assertInstanceOf(AvatarNode::class, $avatarNode); + } + + public function testGetChildren() { + $avatarNodes = $this->home->getChildren(); + self::assertEquals(0, count($avatarNodes)); + + $avatar = $this->createMock(IAvatar::class); + $avatar->expects($this->once())->method('exists')->willReturn(true); + $this->avatarManager->expects($this->any())->method('getAvatar')->with('admin')->willReturn($avatar); + $avatarNodes = $this->home->getChildren(); + self::assertEquals(1, count($avatarNodes)); + } + + /** + * @dataProvider providesTestGetChild + */ + public function testChildExists($expectedException, $hasAvatar, $path) { + $avatar = null; + if ($hasAvatar) { + $avatar = $this->createMock(IAvatar::class); + $avatar->expects($this->once())->method('exists')->willReturn(true); + } + $this->avatarManager->expects($this->any())->method('getAvatar')->with('admin')->willReturn($avatar); + $childExists = $this->home->childExists($path); + $this->assertEquals($hasAvatar, $childExists); + } + + public function testGetLastModified() { + self::assertNull($this->home->getLastModified()); + } + +} diff --git a/apps/dav/tests/unit/phpunit.xml b/apps/dav/tests/unit/phpunit.xml index e483515ca7a..3f0a9107aaa 100644 --- a/apps/dav/tests/unit/phpunit.xml +++ b/apps/dav/tests/unit/phpunit.xml @@ -11,9 +11,9 @@ <!-- filters for code coverage --> <filter> <whitelist> - <directory suffix=".php">../../dav</directory> + <directory suffix=".php">../../../dav</directory> <exclude> - <directory suffix=".php">../../dav/tests</directory> + <directory suffix=".php">../../../dav/tests</directory> </exclude> </whitelist> </filter> |