]> source.dussan.org Git - nextcloud-server.git/commitdiff
[Avatar] Make the avatar controller use the avatar node
authorRoeland Jago Douma <rullzer@owncloud.com>
Wed, 16 Dec 2015 19:29:17 +0000 (20:29 +0100)
committerRoeland Jago Douma <rullzer@owncloud.com>
Wed, 16 Dec 2015 20:41:58 +0000 (21:41 +0100)
core/avatar/avatarcontroller.php
tests/core/avatar/avatarcontrollertest.php

index 6c0321e6b5e1e82468970912311df40a6a7ab958..e8139aa50ae639f94a153c1962f63b08a4dcbeb2 100644 (file)
@@ -30,6 +30,7 @@ use OCP\AppFramework\Controller;
 use OCP\AppFramework\Http;
 use OCP\AppFramework\Http\DataResponse;
 use OCP\AppFramework\Http\DataDisplayResponse;
+use OCP\Files\NotFoundException;
 use OCP\IAvatarManager;
 use OCP\ILogger;
 use OCP\IL10N;
@@ -112,20 +113,23 @@ class AvatarController extends Controller {
                        $size = 64;
                }
 
-               $avatar = $this->avatarManager->getAvatar($userId);
-               $image = $avatar->get($size);
-
-               if ($image instanceof \OCP\IImage) {
-                       $resp = new DataDisplayResponse($image->data(),
+               try {
+                       $avatar = $this->avatarManager->getAvatar($userId)->getFile($size);
+                       $resp = new DataDisplayResponse($avatar->getContent(),
                                Http::STATUS_OK,
-                               ['Content-Type' => $image->mimeType()]);
-                       $resp->setETag(crc32($image->data()));
-               } else {
+                               ['Content-Type' => $avatar->getMimeType()]);
+                       $resp->setETag($avatar->getEtag());
+               } catch (NotFoundException $e) {
                        $user = $this->userManager->get($userId);
-                       $userName = $user ? $user->getDisplayName() : '';
                        $resp = new DataResponse([
                                'data' => [
-                                       'displayname' => $userName,
+                                       'displayname' => $user->getDisplayName(),
+                               ],
+                       ]);
+               } catch (\Exception $e) {
+                       $resp = new DataResponse([
+                               'data' => [
+                                       'displayname' => '',
                                ],
                        ]);
                }
index a113add72b9cca25e5cca4bc91ab9f6311e45b09..7f69ba0aadb7c1bb4e0aa11fabdfe6a295a00a3a 100644 (file)
@@ -26,8 +26,10 @@ use OCP\AppFramework\IAppContainer;
 use OCP\AppFramework\Http;
 use OCP\Files\Folder;
 use OCP\Files\File;
+use OCP\Files\NotFoundException;
 use OCP\IUser;
 use OCP\IAvatar;
+use Punic\Exception;
 use Test\Traits\UserTrait;
 
 /**
@@ -56,6 +58,8 @@ class AvatarControllerTest extends \Test\TestCase {
        private $avatarMock;
        /** @var IUser */
        private $userMock;
+       /** @var File */
+       private $avatarFile;
        
        protected function setUp() {
                parent::setUp();
@@ -88,6 +92,10 @@ class AvatarControllerTest extends \Test\TestCase {
                        ->willReturnMap([['userId', $this->userMock]]);
                $this->container['UserSession']->method('getUser')->willReturn($this->userMock);
 
+               $this->avatarFile = $this->getMock('OCP\Files\File');
+               $this->avatarFile->method('getContnet')->willReturn('image data');
+               $this->avatarFile->method('getMimeType')->willReturn('image type');
+               $this->avatarFile->method('getEtag')->willReturn('my etag');
        }
 
        public function tearDown() {
@@ -100,6 +108,7 @@ class AvatarControllerTest extends \Test\TestCase {
         */
        public function testGetAvatarNoAvatar() {
                $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock);
+               $this->avatarMock->method('getFile')->will($this->throwException(new NotFoundException()));
                $response = $this->avatarController->getAvatar('userId', 32);
 
                //Comment out until JS is fixed
@@ -112,12 +121,8 @@ class AvatarControllerTest extends \Test\TestCase {
         * Fetch the user's avatar
         */
        public function testGetAvatar() {
-               $image = $this->getMock('OCP\IImage');
-               $image->method('data')->willReturn('image data');
-               $image->method('mimeType')->willReturn('image type');
-
-               $this->avatarMock->method('get')->willReturn($image);
-               $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock);
+               $this->avatarMock->method('getFile')->willReturn($this->avatarFile);
+               $this->container['AvatarManager']->method('getAvatar')->with('userId')->willReturn($this->avatarMock);
 
                $response = $this->avatarController->getAvatar('userId', 32);
 
@@ -125,17 +130,19 @@ class AvatarControllerTest extends \Test\TestCase {
                $this->assertArrayHasKey('Content-Type', $response->getHeaders());
                $this->assertEquals('image type', $response->getHeaders()['Content-Type']);
 
-               $this->assertEquals(crc32('image data'), $response->getEtag());
+               $this->assertEquals('my etag', $response->getEtag());
        }
 
        /**
         * Fetch the avatar of a non-existing user
         */
        public function testGetAvatarNoUser() {
-               $this->avatarMock->method('get')->willReturn(null);
-               $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock);
+               $this->container['AvatarManager']
+                       ->method('getAvatar')
+                       ->with('userDoesNotExist')
+                       ->will($this->throwException(new \Exception('user does not exist')));
 
-               $response = $this->avatarController->getAvatar('userDoesnotexist', 32);
+               $response = $this->avatarController->getAvatar('userDoesNotExist', 32);
 
                //Comment out until JS is fixed
                //$this->assertEquals(Http::STATUS_NOT_FOUND, $response->getStatus());
@@ -148,8 +155,9 @@ class AvatarControllerTest extends \Test\TestCase {
         */
        public function testGetAvatarSize() {
                $this->avatarMock->expects($this->once())
-                                                ->method('get')
-                                                ->with($this->equalTo(32));
+                       ->method('getFile')
+                       ->with($this->equalTo(32))
+                       ->willReturn($this->avatarFile);
 
                $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock);
 
@@ -161,8 +169,9 @@ class AvatarControllerTest extends \Test\TestCase {
         */
        public function testGetAvatarSizeMin() {
                $this->avatarMock->expects($this->once())
-                                                ->method('get')
-                                                ->with($this->equalTo(64));
+                       ->method('getFile')
+                       ->with($this->equalTo(64))
+                       ->willReturn($this->avatarFile);
 
                $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock);
 
@@ -174,8 +183,9 @@ class AvatarControllerTest extends \Test\TestCase {
         */
        public function testGetAvatarSizeMax() {
                $this->avatarMock->expects($this->once())
-                                                ->method('get')
-                                                ->with($this->equalTo(2048));
+                       ->method('getFile')
+                       ->with($this->equalTo(2048))
+                       ->willReturn($this->avatarFile);
 
                $this->container['AvatarManager']->method('getAvatar')->willReturn($this->avatarMock);