diff options
author | kondou <kondou@ts.unde.re> | 2013-07-30 16:09:54 +0200 |
---|---|---|
committer | kondou <kondou@ts.unde.re> | 2013-08-25 21:04:09 +0200 |
commit | 2bfe66223563b16a067be273e0d6979b420598ad (patch) | |
tree | dbe49438dc9c2175895eedb442e9e1630bc01b67 | |
parent | fac671b14ed06233d37ad38194ebf9a99118644a (diff) | |
download | nextcloud-server-2bfe66223563b16a067be273e0d6979b420598ad.tar.gz nextcloud-server-2bfe66223563b16a067be273e0d6979b420598ad.zip |
Add unittests & check filetype in setLocalAvatar()
TODO: Fix OC_Image->mimetype(), it always returns "image/png"
-rw-r--r-- | lib/avatar.php | 10 | ||||
-rw-r--r-- | settings/ajax/newavatar.php | 10 | ||||
-rw-r--r-- | tests/data/testavatar.png | bin | 0 -> 3705 bytes | |||
-rw-r--r-- | tests/lib/avatar.php | 61 |
4 files changed, 73 insertions, 8 deletions
diff --git a/lib/avatar.php b/lib/avatar.php index b232e9be762..f3db07142ca 100644 --- a/lib/avatar.php +++ b/lib/avatar.php @@ -43,11 +43,11 @@ class OC_Avatar { * @brief sets the users local avatar * @param $user string user to set the avatar for * @param $img mixed imagedata to set a new avatar, or false to delete the current avatar - * @param $type string fileextension + * @throws Exception if the provided file is not a jpg or png image * @throws Exception if the provided image is not valid, or not a square * @return true on success */ - public static function setLocalAvatar ($user, $img, $type) { + public static function setLocalAvatar ($user, $img) { $view = new \OC\Files\View('/'.$user); if ($img === false) { @@ -56,6 +56,12 @@ class OC_Avatar { return true; } else { $img = new OC_Image($img); + // FIXME this always says "image/png" + $type = substr($img->mimeType(), -3); + if ($type === 'peg') { $type = 'jpg'; } + if ($type !== 'jpg' && $type !== 'png') { + throw new Exception(); + } if (!( $img->valid() && ($img->height() === $img->width()) )) { throw new Exception(); diff --git a/settings/ajax/newavatar.php b/settings/ajax/newavatar.php index b52317c9678..456cd84e970 100644 --- a/settings/ajax/newavatar.php +++ b/settings/ajax/newavatar.php @@ -7,18 +7,16 @@ $user = OC_User::getUser(); if(isset($_POST['path'])) { $path = $_POST['path']; if ($path === "false") { // delete avatar - \OC_Avatar::setLocalAvatar($user, false, false); + \OC_Avatar::setLocalAvatar($user, false); } else { // select an image from own files $view = new \OC\Files\View('/'.$user.'/files'); $img = $view->file_get_contents($path); $type = substr($path, -3); - if ($type === 'peg') { $type = 'jpg'; } - - if ($type === 'jpg' or $type === 'png') { - \OC_Avatar::setLocalAvatar($user, $img, $type); + try { + \OC_Avatar::setLocalAvatar($user, $img); OC_JSON::success(); - } else { + } catch (Exception $e) { OC_JSON::error(); } } diff --git a/tests/data/testavatar.png b/tests/data/testavatar.png Binary files differnew file mode 100644 index 00000000000..24770fb634f --- /dev/null +++ b/tests/data/testavatar.png diff --git a/tests/lib/avatar.php b/tests/lib/avatar.php new file mode 100644 index 00000000000..b1d9f46ed09 --- /dev/null +++ b/tests/lib/avatar.php @@ -0,0 +1,61 @@ +<?php +/** + * Copyright (c) 2013 Christopher Schäpers <christopher@schaepers.it> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +class Test_Avatar extends PHPUnit_Framework_TestCase { + + public function testModes() { + $this->assertEquals('local', \OC_Avatar::getMode()); + + \OC_Config::setValue('avatar', 'local'); + $this->assertEquals('local', \OC_Avatar::getMode()); + + \OC_Config::setValue('avatar', 'gravatar'); + $this->assertEquals('gravatar', \OC_Avatar::getMode()); + + \OC_Config::setValue('avatar', 'none'); + $this->assertEquals('none', \OC_Avatar::getMode()); + } + + public function testDisabledAvatar() { + \OC_Config::setValue('avatar', 'none'); + $this->assertFalse(\OC_Avatar::get(\OC_User::getUser())); + $this->assertFalse(\OC_Avatar::get(\OC_User::getUser(), 32)); + } + + public function testLocalAvatar() { + \OC_Config::setValue('avatar', 'local'); + $this->assertEquals(\OC_Avatar::get(\OC_User::getUser()), \OC_Avatar::wrapIntoImg(\OC_Avatar::getDefaultAvatar(), 'png')); + + $expected = new OC_Image(\OC::$SERVERROOT.'/tests/data/testavatar.png'); + \OC_Avatar::setLocalAvatar(\OC_User::getUser(), $expected->data()); + $expected->resize(32); + $this->assertEquals($expected, \OC_Avatar::get(\OC_User::getUser())); + + \OC_Avatar::setLocalAvatar(\OC_User::getUser(), false); + $this->assertEquals(\OC_Avatar::get(\OC_User::getUser()), \OC_Avatar::wrapIntoImg(\OC_Avatar::getDefaultAvatar(), 'png')); + } + + public function testGravatar() { + \OC_Preferences::setValue(\OC_User::getUser(), 'settings', 'email', 'someone@example.com'); + \OC_Config::setValue('avatar', 'gravatar'); + $expected = "http://www.gravatar.com/avatar/".md5("someone@example.com")."?s="; + $this->assertEquals($expected."64", \OC_Avatar::get(\OC_User::getUser())); + $this->assertEquals($expected."32", \OC_Avatar::get(\OC_User::getUser(), 32)); + } + + public function testDefaultAvatar() { + $img = new \OC_Image(OC::$SERVERROOT.'/core/img/defaultavatar.png'); + $img->resize(128); + $this->assertEquals((string)$img, \OC_Avatar::getDefaultAvatar(128)); + } + + public function testWrapIntoImg() { + $expected = "data:image/test;base64,DUMMY==123=="; + $this->assertEquals($expected, \OC_Avatar::wrapIntoImg("DUMMY==123==", "test")); + } +} |