From 728caf13f8656fa12253dd512a1fa49897a0566f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Mon, 25 Jan 2016 13:24:56 +0100
Subject: [PATCH] Adding support of -1 as size to be passed into get and
 getFile

---
 lib/private/avatar.php   | 22 +++++++++++-----------
 lib/public/iavatar.php   |  6 +++---
 tests/lib/avatartest.php | 21 +++++++++++++++++----
 3 files changed, 31 insertions(+), 18 deletions(-)

diff --git a/lib/private/avatar.php b/lib/private/avatar.php
index d4e5f5225dc..a276fb7ccf9 100644
--- a/lib/private/avatar.php
+++ b/lib/private/avatar.php
@@ -58,10 +58,8 @@ class Avatar implements \OCP\IAvatar {
 	}
 
 	/**
-	 * get the users avatar
-	 * @param int $size size in px of the avatar, avatars are square, defaults to 64
-	 * @return boolean|\OCP\IImage containing the avatar or false if there's no image
-	*/
+	 * @inheritdoc
+	 */
 	public function get ($size = 64) {
 		try {
 			$file = $this->getFile($size);
@@ -135,16 +133,16 @@ class Avatar implements \OCP\IAvatar {
 	}
 
 	/**
-	 * Get the File of an avatar of size $size.
-	 *
-	 * @param int $size
-	 * @return File
-	 * @throws NotFoundException
+	 * @inheritdoc
 	 */
 	public function getFile($size) {
 		$ext = $this->getExtention();
 
-		$path = 'avatar.' . $size . '.' . $ext;
+		if ($size === -1) {
+			$path = 'avatar.' . $ext;
+		} else {
+			$path = 'avatar.' . $size . '.' . $ext;
+		}
 
 		try {
 			$file = $this->folder->get($path);
@@ -157,7 +155,9 @@ class Avatar implements \OCP\IAvatar {
 			/** @var File $file */
 			$file = $this->folder->get('avatar.' . $ext);
 			$avatar->loadFromData($file->getContent());
-			$avatar->resize($size);
+			if ($size !== -1) {
+				$avatar->resize($size);
+			}
 			$file = $this->folder->newFile($path);
 			$file->putContent($avatar->data());
 		}
diff --git a/lib/public/iavatar.php b/lib/public/iavatar.php
index fc4058ab4f2..6203d3d5576 100644
--- a/lib/public/iavatar.php
+++ b/lib/public/iavatar.php
@@ -36,9 +36,9 @@ interface IAvatar {
 
 	/**
 	 * get the users avatar
-	 * @param int $size size in px of the avatar, avatars are square, defaults to 64
+	 * @param int $size size in px of the avatar, avatars are square, defaults to 64, -1 can be used to not scale the image
 	 * @return boolean|\OCP\IImage containing the avatar or false if there's no image
-	 * @since 6.0.0
+	 * @since 6.0.0 - size of -1 was added in 9.0.0
 	 */
 	public function get($size = 64);
 
@@ -70,7 +70,7 @@ interface IAvatar {
 
 	/**
 	 * Get the file of the avatar
-	 * @param int $size
+	 * @param int $size -1 can be used to not scale the image
 	 * @return File
 	 * @throws NotFoundException
 	 * @since 9.0.0
diff --git a/tests/lib/avatartest.php b/tests/lib/avatartest.php
index d3e615977cb..fe6d3e2fa3f 100644
--- a/tests/lib/avatartest.php
+++ b/tests/lib/avatartest.php
@@ -7,14 +7,13 @@
  * See the COPYING-README file.
  */
 
-use OC\Avatar;
 use OCP\Files\Folder;
 
 class AvatarTest extends \Test\TestCase {
-	/** @var  Folder */
+	/** @var Folder | PHPUnit_Framework_MockObject_MockObject */
 	private $folder;
 
-	/** @var  \OC\Avatar */
+	/** @var \OC\Avatar */
 	private $avatar;
 
 	public function setUp() {
@@ -24,7 +23,6 @@ class AvatarTest extends \Test\TestCase {
 		$l = $this->getMock('\OCP\IL10N');
 		$l->method('t')->will($this->returnArgument(0));
 		$this->avatar = new \OC\Avatar($this->folder, $l);
-
 	}
 
 	public function testGetNoAvatar() {
@@ -47,6 +45,21 @@ class AvatarTest extends \Test\TestCase {
 		$this->assertEquals($expected->data(), $this->avatar->get(128)->data());
 	}
 
+	public function testGetAvatarSizeMinusOne() {
+		$this->folder->method('nodeExists')
+			->will($this->returnValueMap([
+				['avatar.jpg', true],
+			]));
+
+		$expected = new OC_Image(\OC::$SERVERROOT . '/tests/data/testavatar.png');
+
+		$file = $this->getMock('\OCP\Files\File');
+		$file->method('getContent')->willReturn($expected->data());
+		$this->folder->method('get')->with('avatar.jpg')->willReturn($file);
+
+		$this->assertEquals($expected->data(), $this->avatar->get(-1)->data());
+	}
+
 	public function testGetAvatarNoSizeMatch() {
 		$this->folder->method('nodeExists')
 			->will($this->returnValueMap([
-- 
GitLab