diff options
author | Joas Schilling <nickvergessen@owncloud.com> | 2016-05-12 11:25:50 +0200 |
---|---|---|
committer | Joas Schilling <nickvergessen@owncloud.com> | 2016-05-25 16:04:56 +0200 |
commit | 3f5e76162d74701c35a31b5a611466dba93d9a04 (patch) | |
tree | 5dc6b119f48333057dc45e2c04ba5873c889dc67 /apps/user_ldap/tests/User | |
parent | b7fa5277915507622cc7043dc62998d849b8807d (diff) | |
download | nextcloud-server-3f5e76162d74701c35a31b5a611466dba93d9a04.tar.gz nextcloud-server-3f5e76162d74701c35a31b5a611466dba93d9a04.zip |
Move lib\user to PSR-4
Diffstat (limited to 'apps/user_ldap/tests/User')
-rw-r--r-- | apps/user_ldap/tests/User/ManagerTest.php | 260 | ||||
-rw-r--r-- | apps/user_ldap/tests/User/UserTest.php | 931 |
2 files changed, 1191 insertions, 0 deletions
diff --git a/apps/user_ldap/tests/User/ManagerTest.php b/apps/user_ldap/tests/User/ManagerTest.php new file mode 100644 index 00000000000..03a1dfbeb47 --- /dev/null +++ b/apps/user_ldap/tests/User/ManagerTest.php @@ -0,0 +1,260 @@ +<?php +/** + * @author Arthur Schiwon <blizzz@owncloud.com> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Philippe Jung <phil.jung@free.fr> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @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\User_LDAP\Tests\User; + +use OCA\User_LDAP\User\Manager; + +/** + * Class Test_User_Manager + * + * @group DB + * + * @package OCA\user_ldap\tests + */ +class ManagerTest extends \Test\TestCase { + + private function getTestInstances() { + $access = $this->getMock('\OCA\User_LDAP\User\IUserTools'); + $config = $this->getMock('\OCP\IConfig'); + $filesys = $this->getMock('\OCA\user_ldap\lib\FilesystemHelper'); + $log = $this->getMock('\OCA\user_ldap\lib\LogWrapper'); + $avaMgr = $this->getMock('\OCP\IAvatarManager'); + $image = $this->getMock('\OCP\Image'); + $dbc = $this->getMock('\OCP\IDBConnection'); + $userMgr = $this->getMock('\OCP\IUserManager'); + + $connection = new \OCA\user_ldap\lib\Connection( + $lw = $this->getMock('\OCA\user_ldap\lib\ILDAPWrapper'), + '', + null + ); + + $access->expects($this->any()) + ->method('getConnection') + ->will($this->returnValue($connection)); + + return array($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr); + } + + public function testGetByDNExisting() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + $inputDN = 'cn=foo,dc=foobar,dc=bar'; + $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e'; + + $access->expects($this->once()) + ->method('stringResemblesDN') + ->with($this->equalTo($inputDN)) + ->will($this->returnValue(true)); + + $access->expects($this->once()) + ->method('dn2username') + ->with($this->equalTo($inputDN)) + ->will($this->returnValue($uid)); + + $access->expects($this->never()) + ->method('username2dn'); + + $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc, $userMgr); + $manager->setLdapAccess($access); + $user = $manager->get($inputDN); + + // Now we fetch the user again. If this leads to a failing test, + // runtime caching the manager is broken. + $user = $manager->get($inputDN); + + $this->assertInstanceOf('\OCA\User_LDAP\User\User', $user); + } + + public function testGetByEDirectoryDN() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + $inputDN = 'uid=foo,o=foobar,c=bar'; + $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e'; + + $access->expects($this->once()) + ->method('stringResemblesDN') + ->with($this->equalTo($inputDN)) + ->will($this->returnValue(true)); + + $access->expects($this->once()) + ->method('dn2username') + ->with($this->equalTo($inputDN)) + ->will($this->returnValue($uid)); + + $access->expects($this->never()) + ->method('username2dn'); + + $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc, $userMgr); + $manager->setLdapAccess($access); + $user = $manager->get($inputDN); + + $this->assertInstanceOf('\OCA\User_LDAP\User\User', $user); + } + + public function testGetByExoticDN() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + $inputDN = 'ab=cde,f=ghei,mno=pq'; + $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e'; + + $access->expects($this->once()) + ->method('stringResemblesDN') + ->with($this->equalTo($inputDN)) + ->will($this->returnValue(true)); + + $access->expects($this->once()) + ->method('dn2username') + ->with($this->equalTo($inputDN)) + ->will($this->returnValue($uid)); + + $access->expects($this->never()) + ->method('username2dn'); + + $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc, $userMgr); + $manager->setLdapAccess($access); + $user = $manager->get($inputDN); + + $this->assertInstanceOf('\OCA\User_LDAP\User\User', $user); + } + + public function testGetByDNNotExisting() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + $inputDN = 'cn=gone,dc=foobar,dc=bar'; + + $access->expects($this->once()) + ->method('stringResemblesDN') + ->with($this->equalTo($inputDN)) + ->will($this->returnValue(true)); + + $access->expects($this->once()) + ->method('dn2username') + ->with($this->equalTo($inputDN)) + ->will($this->returnValue(false)); + + $access->expects($this->once()) + ->method('username2dn') + ->with($this->equalTo($inputDN)) + ->will($this->returnValue(false)); + + $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc, $userMgr); + $manager->setLdapAccess($access); + $user = $manager->get($inputDN); + + $this->assertNull($user); + } + + public function testGetByUidExisting() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + $dn = 'cn=foo,dc=foobar,dc=bar'; + $uid = '563418fc-423b-1033-8d1c-ad5f418ee02e'; + + $access->expects($this->never()) + ->method('dn2username'); + + $access->expects($this->once()) + ->method('username2dn') + ->with($this->equalTo($uid)) + ->will($this->returnValue($dn)); + + $access->expects($this->once()) + ->method('stringResemblesDN') + ->with($this->equalTo($uid)) + ->will($this->returnValue(false)); + + $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc, $userMgr); + $manager->setLdapAccess($access); + $user = $manager->get($uid); + + // Now we fetch the user again. If this leads to a failing test, + // runtime caching the manager is broken. + $user = $manager->get($uid); + + $this->assertInstanceOf('\OCA\User_LDAP\User\User', $user); + } + + public function testGetByUidNotExisting() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + $dn = 'cn=foo,dc=foobar,dc=bar'; + $uid = 'gone'; + + $access->expects($this->never()) + ->method('dn2username'); + + $access->expects($this->exactly(1)) + ->method('username2dn') + ->with($this->equalTo($uid)) + ->will($this->returnValue(false)); + + $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc, $userMgr); + $manager->setLdapAccess($access); + $user = $manager->get($uid); + + $this->assertNull($user); + } + + public function testGetAttributesAll() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc, $userMgr); + $manager->setLdapAccess($access); + + $connection = $access->getConnection(); + $connection->setConfiguration(array('ldapEmailAttribute' => 'mail')); + + $attributes = $manager->getAttributes(); + + $this->assertTrue(in_array('dn', $attributes)); + $this->assertTrue(in_array($access->getConnection()->ldapEmailAttribute, $attributes)); + $this->assertTrue(in_array('jpegphoto', $attributes)); + $this->assertTrue(in_array('thumbnailphoto', $attributes)); + } + + public function testGetAttributesMinimal() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + $manager = new Manager($config, $filesys, $log, $avaMgr, $image, $dbc, $userMgr); + $manager->setLdapAccess($access); + + $attributes = $manager->getAttributes(true); + + $this->assertTrue(in_array('dn', $attributes)); + $this->assertTrue(!in_array('jpegphoto', $attributes)); + $this->assertTrue(!in_array('thumbnailphoto', $attributes)); + } + +} diff --git a/apps/user_ldap/tests/User/UserTest.php b/apps/user_ldap/tests/User/UserTest.php new file mode 100644 index 00000000000..81497b4bcb8 --- /dev/null +++ b/apps/user_ldap/tests/User/UserTest.php @@ -0,0 +1,931 @@ +<?php +/** + * @author Arthur Schiwon <blizzz@owncloud.com> + * @author Joas Schilling <nickvergessen@owncloud.com> + * @author Morris Jobke <hey@morrisjobke.de> + * @author Thomas Müller <thomas.mueller@tmit.eu> + * + * @copyright Copyright (c) 2016, ownCloud, Inc. + * @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\User_LDAP\Tests\User; + +use OCA\User_LDAP\User\User; +use OCP\IUserManager; + +/** + * Class Test_User_User + * + * @group DB + * + * @package OCA\user_ldap\tests + */ +class UserTest extends \Test\TestCase { + + private function getTestInstances() { + $access = $this->getMock('\OCA\User_LDAP\User\IUserTools'); + $config = $this->getMock('\OCP\IConfig'); + $filesys = $this->getMock('\OCA\user_ldap\lib\FilesystemHelper'); + $log = $this->getMock('\OCA\user_ldap\lib\LogWrapper'); + $avaMgr = $this->getMock('\OCP\IAvatarManager'); + $image = $this->getMock('\OCP\Image'); + $dbc = $this->getMock('\OCP\IDBConnection'); + $userMgr = $this->getMock('\OCP\IUserManager'); + + return array($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr); + } + + private function getAdvancedMocks($cfMock, $fsMock, $logMock, $avaMgr, $dbc, $userMgr = null) { + static $conMethods; + static $accMethods; + static $umMethods; + + if(is_null($conMethods) || is_null($accMethods)) { + $conMethods = get_class_methods('\OCA\user_ldap\lib\Connection'); + $accMethods = get_class_methods('\OCA\user_ldap\lib\Access'); + //getConnection shall not be replaced + unset($accMethods[array_search('getConnection', $accMethods)]); + $umMethods = get_class_methods('\OCA\User_LDAP\User\Manager'); + } + $lw = $this->getMock('\OCA\user_ldap\lib\ILDAPWrapper'); + $im = $this->getMock('\OCP\Image'); + if (is_null($userMgr)) { + $userMgr = $this->getMock('\OCP\IUserManager'); + } + $um = $this->getMock('\OCA\User_LDAP\User\Manager', + $umMethods, array($cfMock, $fsMock, $logMock, $avaMgr, $im, $dbc, $userMgr)); + $connector = $this->getMock('\OCA\user_ldap\lib\Connection', + $conMethods, array($lw, null, null)); + $access = $this->getMock('\OCA\user_ldap\lib\Access', + $accMethods, array($connector, $lw, $um)); + + return array($access, $connector); + } + + public function testGetDNandUsername() { + list($access, $config, $filesys, $image, $log, $avaMgr, $db, $userMgr) = + $this->getTestInstances(); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $this->assertSame($dn, $user->getDN()); + $this->assertSame($uid, $user->getUsername()); + } + + public function testUpdateEmailProvided() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc, $userMgr); + + $connection->expects($this->once()) + ->method('__get') + ->with($this->equalTo('ldapEmailAttribute')) + ->will($this->returnValue('email')); + + $access->expects($this->once()) + ->method('readAttribute') + ->with($this->equalTo('uid=alice,dc=foo,dc=bar'), + $this->equalTo('email')) + ->will($this->returnValue(array('alice@foo.bar'))); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $uuser = $this->getMockBuilder('\OCP\IUser') + ->disableOriginalConstructor() + ->getMock(); + $uuser->expects($this->once()) + ->method('setEMailAddress') + ->with('alice@foo.bar'); + /** @var IUserManager | \PHPUnit_Framework_MockObject_MockObject $userMgr */ + $userMgr->expects($this->any()) + ->method('get') + ->willReturn($uuser); + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->updateEmail(); + } + + public function testUpdateEmailNotProvided() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $connection->expects($this->once()) + ->method('__get') + ->with($this->equalTo('ldapEmailAttribute')) + ->will($this->returnValue('email')); + + $access->expects($this->once()) + ->method('readAttribute') + ->with($this->equalTo('uid=alice,dc=foo,dc=bar'), + $this->equalTo('email')) + ->will($this->returnValue(false)); + + $config->expects($this->never()) + ->method('setUserValue'); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->updateEmail(); + } + + public function testUpdateEmailNotConfigured() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $connection->expects($this->once()) + ->method('__get') + ->with($this->equalTo('ldapEmailAttribute')) + ->will($this->returnValue('')); + + $access->expects($this->never()) + ->method('readAttribute'); + + $config->expects($this->never()) + ->method('setUserValue'); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->updateEmail(); + } + + public function testUpdateQuotaAllProvided() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $connection->expects($this->at(0)) + ->method('__get') + ->with($this->equalTo('ldapQuotaDefault')) + ->will($this->returnValue('23 GB')); + + $connection->expects($this->at(1)) + ->method('__get') + ->with($this->equalTo('ldapQuotaAttribute')) + ->will($this->returnValue('myquota')); + + $connection->expects($this->exactly(2)) + ->method('__get'); + + $access->expects($this->once()) + ->method('readAttribute') + ->with($this->equalTo('uid=alice,dc=foo,dc=bar'), + $this->equalTo('myquota')) + ->will($this->returnValue(array('42 GB'))); + + $user = $this->getMock('\OCP\IUser'); + $user->expects($this->once()) + ->method('setQuota') + ->with('42 GB'); + + $userMgr->expects($this->once()) + ->method('get') + ->with('alice') + ->will($this->returnValue($user)); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->updateQuota(); + } + + public function testUpdateQuotaDefaultProvided() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $connection->expects($this->at(0)) + ->method('__get') + ->with($this->equalTo('ldapQuotaDefault')) + ->will($this->returnValue('25 GB')); + + $connection->expects($this->at(1)) + ->method('__get') + ->with($this->equalTo('ldapQuotaAttribute')) + ->will($this->returnValue('myquota')); + + $connection->expects($this->exactly(2)) + ->method('__get'); + + $access->expects($this->once()) + ->method('readAttribute') + ->with($this->equalTo('uid=alice,dc=foo,dc=bar'), + $this->equalTo('myquota')) + ->will($this->returnValue(false)); + + $user = $this->getMock('\OCP\IUser'); + $user->expects($this->once()) + ->method('setQuota') + ->with('25 GB'); + + $userMgr->expects($this->once()) + ->method('get') + ->with('alice') + ->will($this->returnValue($user)); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->updateQuota(); + } + + public function testUpdateQuotaIndividualProvided() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $connection->expects($this->at(0)) + ->method('__get') + ->with($this->equalTo('ldapQuotaDefault')) + ->will($this->returnValue('')); + + $connection->expects($this->at(1)) + ->method('__get') + ->with($this->equalTo('ldapQuotaAttribute')) + ->will($this->returnValue('myquota')); + + $connection->expects($this->exactly(2)) + ->method('__get'); + + $access->expects($this->once()) + ->method('readAttribute') + ->with($this->equalTo('uid=alice,dc=foo,dc=bar'), + $this->equalTo('myquota')) + ->will($this->returnValue(array('27 GB'))); + + $user = $this->getMock('\OCP\IUser'); + $user->expects($this->once()) + ->method('setQuota') + ->with('27 GB'); + + $userMgr->expects($this->once()) + ->method('get') + ->with('alice') + ->will($this->returnValue($user)); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->updateQuota(); + } + + public function testUpdateQuotaNoneProvided() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $connection->expects($this->at(0)) + ->method('__get') + ->with($this->equalTo('ldapQuotaDefault')) + ->will($this->returnValue('')); + + $connection->expects($this->at(1)) + ->method('__get') + ->with($this->equalTo('ldapQuotaAttribute')) + ->will($this->returnValue('myquota')); + + $connection->expects($this->exactly(2)) + ->method('__get'); + + $access->expects($this->once()) + ->method('readAttribute') + ->with($this->equalTo('uid=alice,dc=foo,dc=bar'), + $this->equalTo('myquota')) + ->will($this->returnValue(false)); + + $config->expects($this->never()) + ->method('setUserValue'); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->updateQuota(); + } + + public function testUpdateQuotaNoneConfigured() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $connection->expects($this->at(0)) + ->method('__get') + ->with($this->equalTo('ldapQuotaDefault')) + ->will($this->returnValue('')); + + $connection->expects($this->at(1)) + ->method('__get') + ->with($this->equalTo('ldapQuotaAttribute')) + ->will($this->returnValue('')); + + $connection->expects($this->exactly(2)) + ->method('__get'); + + $access->expects($this->never()) + ->method('readAttribute'); + + $config->expects($this->never()) + ->method('setUserValue'); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->updateQuota(); + } + + public function testUpdateQuotaFromValue() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $readQuota = '19 GB'; + + $connection->expects($this->at(0)) + ->method('__get') + ->with($this->equalTo('ldapQuotaDefault')) + ->will($this->returnValue('')); + + $connection->expects($this->once(1)) + ->method('__get') + ->with($this->equalTo('ldapQuotaDefault')) + ->will($this->returnValue(null)); + + $access->expects($this->never()) + ->method('readAttribute'); + + $user = $this->getMock('\OCP\IUser'); + $user->expects($this->once()) + ->method('setQuota') + ->with($readQuota); + + $userMgr->expects($this->once()) + ->method('get') + ->with('alice') + ->will($this->returnValue($user)); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->updateQuota($readQuota); + } + + //the testUpdateAvatar series also implicitely tests getAvatarImage + public function testUpdateAvatarJpegPhotoProvided() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $access->expects($this->once()) + ->method('readAttribute') + ->with($this->equalTo('uid=alice,dc=foo,dc=bar'), + $this->equalTo('jpegPhoto')) + ->will($this->returnValue(array('this is a photo'))); + + $image->expects($this->once()) + ->method('valid') + ->will($this->returnValue(true)); + $image->expects($this->once()) + ->method('width') + ->will($this->returnValue(128)); + $image->expects($this->once()) + ->method('height') + ->will($this->returnValue(128)); + $image->expects($this->once()) + ->method('centerCrop') + ->will($this->returnValue(true)); + + $filesys->expects($this->once()) + ->method('isLoaded') + ->will($this->returnValue(true)); + + $avatar = $this->getMock('\OCP\IAvatar'); + $avatar->expects($this->once()) + ->method('set') + ->with($this->isInstanceOf($image)); + + $avaMgr->expects($this->once()) + ->method('getAvatar') + ->with($this->equalTo('alice')) + ->will($this->returnValue($avatar)); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->updateAvatar(); + } + + public function testUpdateAvatarThumbnailPhotoProvided() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $access->expects($this->at(0)) + ->method('readAttribute') + ->with($this->equalTo('uid=alice,dc=foo,dc=bar'), + $this->equalTo('jpegPhoto')) + ->will($this->returnValue(false)); + + $access->expects($this->at(1)) + ->method('readAttribute') + ->with($this->equalTo('uid=alice,dc=foo,dc=bar'), + $this->equalTo('thumbnailPhoto')) + ->will($this->returnValue(array('this is a photo'))); + + $access->expects($this->exactly(2)) + ->method('readAttribute'); + + $image->expects($this->once()) + ->method('valid') + ->will($this->returnValue(true)); + $image->expects($this->once()) + ->method('width') + ->will($this->returnValue(128)); + $image->expects($this->once()) + ->method('height') + ->will($this->returnValue(128)); + $image->expects($this->once()) + ->method('centerCrop') + ->will($this->returnValue(true)); + + $filesys->expects($this->once()) + ->method('isLoaded') + ->will($this->returnValue(true)); + + $avatar = $this->getMock('\OCP\IAvatar'); + $avatar->expects($this->once()) + ->method('set') + ->with($this->isInstanceOf($image)); + + $avaMgr->expects($this->once()) + ->method('getAvatar') + ->with($this->equalTo('alice')) + ->will($this->returnValue($avatar)); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->updateAvatar(); + } + + public function testUpdateAvatarNotProvided() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $access->expects($this->at(0)) + ->method('readAttribute') + ->with($this->equalTo('uid=alice,dc=foo,dc=bar'), + $this->equalTo('jpegPhoto')) + ->will($this->returnValue(false)); + + $access->expects($this->at(1)) + ->method('readAttribute') + ->with($this->equalTo('uid=alice,dc=foo,dc=bar'), + $this->equalTo('thumbnailPhoto')) + ->will($this->returnValue(false)); + + $access->expects($this->exactly(2)) + ->method('readAttribute'); + + $image->expects($this->never()) + ->method('valid'); + $image->expects($this->never()) + ->method('width'); + $image->expects($this->never()) + ->method('height'); + $image->expects($this->never()) + ->method('centerCrop'); + + $filesys->expects($this->never()) + ->method('isLoaded'); + + $avaMgr->expects($this->never()) + ->method('getAvatar'); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->updateAvatar(); + } + + public function testUpdateBeforeFirstLogin() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $config->expects($this->at(0)) + ->method('getUserValue') + ->with($this->equalTo('alice'), $this->equalTo('user_ldap'), + $this->equalTo(User::USER_PREFKEY_FIRSTLOGIN), + $this->equalTo(0)) + ->will($this->returnValue(0)); + + $config->expects($this->at(1)) + ->method('getUserValue') + ->with($this->equalTo('alice'), $this->equalTo('user_ldap'), + $this->equalTo(User::USER_PREFKEY_LASTREFRESH), + $this->equalTo(0)) + ->will($this->returnValue(0)); + + $config->expects($this->exactly(2)) + ->method('getUserValue'); + + $config->expects($this->never()) + ->method('setUserValue'); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->update(); + } + + public function testUpdateAfterFirstLogin() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $config->expects($this->at(0)) + ->method('getUserValue') + ->with($this->equalTo('alice'), $this->equalTo('user_ldap'), + $this->equalTo(User::USER_PREFKEY_FIRSTLOGIN), + $this->equalTo(0)) + ->will($this->returnValue(1)); + + $config->expects($this->at(1)) + ->method('getUserValue') + ->with($this->equalTo('alice'), $this->equalTo('user_ldap'), + $this->equalTo(User::USER_PREFKEY_LASTREFRESH), + $this->equalTo(0)) + ->will($this->returnValue(0)); + + $config->expects($this->exactly(2)) + ->method('getUserValue'); + + $config->expects($this->once()) + ->method('setUserValue') + ->with($this->equalTo('alice'), $this->equalTo('user_ldap'), + $this->equalTo(User::USER_PREFKEY_LASTREFRESH), + $this->anything()) + ->will($this->returnValue(true)); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->update(); + } + + public function testUpdateNoRefresh() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $config->expects($this->at(0)) + ->method('getUserValue') + ->with($this->equalTo('alice'), $this->equalTo('user_ldap'), + $this->equalTo(User::USER_PREFKEY_FIRSTLOGIN), + $this->equalTo(0)) + ->will($this->returnValue(1)); + + $config->expects($this->at(1)) + ->method('getUserValue') + ->with($this->equalTo('alice'), $this->equalTo('user_ldap'), + $this->equalTo(User::USER_PREFKEY_LASTREFRESH), + $this->equalTo(0)) + ->will($this->returnValue(time())); + + $config->expects($this->exactly(2)) + ->method('getUserValue'); + + $config->expects($this->never()) + ->method('setUserValue'); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->update(); + } + + public function testMarkLogin() { + list($access, $config, $filesys, $image, $log, $avaMgr, $db, $userMgr) = + $this->getTestInstances(); + + $config->expects($this->once()) + ->method('setUserValue') + ->with($this->equalTo('alice'), + $this->equalTo('user_ldap'), + $this->equalTo(User::USER_PREFKEY_FIRSTLOGIN), + $this->equalTo(1)) + ->will($this->returnValue(true)); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->markLogin(); + } + + public function testGetAvatarImageProvided() { + list($access, $config, $filesys, $image, $log, $avaMgr, $db, $userMgr) = + $this->getTestInstances(); + + $access->expects($this->once()) + ->method('readAttribute') + ->with($this->equalTo('uid=alice,dc=foo,dc=bar'), + $this->equalTo('jpegPhoto')) + ->will($this->returnValue(array('this is a photo'))); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $photo = $user->getAvatarImage(); + $this->assertSame('this is a photo', $photo); + //make sure readAttribute is not called again but the already fetched + //photo is returned + $photo = $user->getAvatarImage(); + } + + public function testProcessAttributes() { + list(, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $uid = 'alice'; + $dn = 'uid=alice'; + + $requiredMethods = array( + 'markRefreshTime', + 'updateQuota', + 'updateEmail', + 'composeAndStoreDisplayName', + 'storeLDAPUserName', + 'getHomePath', + 'updateAvatar' + ); + + $userMock = $this->getMockBuilder('OCA\User_LDAP\User\User') + ->setConstructorArgs(array($uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr)) + ->setMethods($requiredMethods) + ->getMock(); + + $connection->setConfiguration(array( + 'homeFolderNamingRule' => 'homeDirectory' + )); + + $connection->expects($this->any()) + ->method('__get') + //->will($this->returnArgument(0)); + ->will($this->returnCallback(function($name) { + if($name === 'homeFolderNamingRule') { + return 'attr:homeDirectory'; + } + return $name; + })); + + $record = array( + strtolower($connection->ldapQuotaAttribute) => array('4096'), + strtolower($connection->ldapEmailAttribute) => array('alice@wonderland.org'), + strtolower($connection->ldapUserDisplayName) => array('Aaaaalice'), + 'uid' => array($uid), + 'homedirectory' => array('Alice\'s Folder'), + 'memberof' => array('cn=groupOne', 'cn=groupTwo'), + 'jpegphoto' => array('here be an image') + ); + + foreach($requiredMethods as $method) { + $userMock->expects($this->once()) + ->method($method); + } + + $userMock->processAttributes($record); + \OC_Hook::emit('OC_User', 'post_login', array('uid' => $uid)); + } + + public function emptyHomeFolderAttributeValueProvider() { + return array( + 'empty' => array(''), + 'prefixOnly' => array('attr:'), + ); + } + + /** + * @dataProvider emptyHomeFolderAttributeValueProvider + */ + public function testGetHomePathNotConfigured($attributeValue) { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $connection->expects($this->any()) + ->method('__get') + ->with($this->equalTo('homeFolderNamingRule')) + ->will($this->returnValue($attributeValue)); + + $access->expects($this->never()) + ->method('readAttribute'); + + $config->expects($this->never()) + ->method('getAppValue'); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $path = $user->getHomePath(); + $this->assertSame($path, false); + } + + public function testGetHomePathConfiguredNotAvailableAllowed() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc); + + $connection->expects($this->any()) + ->method('__get') + ->with($this->equalTo('homeFolderNamingRule')) + ->will($this->returnValue('attr:foobar')); + + $access->expects($this->once()) + ->method('readAttribute') + ->will($this->returnValue(false)); + + // asks for "enforce_home_folder_naming_rule" + $config->expects($this->once()) + ->method('getAppValue') + ->will($this->returnValue(false)); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $path = $user->getHomePath(); + + $this->assertSame($path, false); + } + + /** + * @expectedException \Exception + */ + public function testGetHomePathConfiguredNotAvailableNotAllowed() { + list($access, $config, $filesys, $image, $log, $avaMgr, $dbc, $userMgr) = + $this->getTestInstances(); + + list($access, $connection) = + $this->getAdvancedMocks($config, $filesys, $log, $avaMgr, $dbc, $userMgr); + + $connection->expects($this->any()) + ->method('__get') + ->with($this->equalTo('homeFolderNamingRule')) + ->will($this->returnValue('attr:foobar')); + + $access->expects($this->once()) + ->method('readAttribute') + ->will($this->returnValue(false)); + + // asks for "enforce_home_folder_naming_rule" + $config->expects($this->once()) + ->method('getAppValue') + ->will($this->returnValue(true)); + + $uid = 'alice'; + $dn = 'uid=alice,dc=foo,dc=bar'; + + $user = new User( + $uid, $dn, $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $user->getHomePath(); + } + + public function displayNameProvider() { + return [ + ['Roland Deschain', '', 'Roland Deschain'], + ['Roland Deschain', null, 'Roland Deschain'], + ['Roland Deschain', 'gunslinger@darktower.com', 'Roland Deschain (gunslinger@darktower.com)'], + ]; + } + + /** + * @dataProvider displayNameProvider + */ + public function testComposeAndStoreDisplayName($part1, $part2, $expected) { + list($access, $config, $filesys, $image, $log, $avaMgr, , $userMgr) = + $this->getTestInstances(); + + $config->expects($this->once()) + ->method('setUserValue'); + + $user = new User( + 'user', 'cn=user', $access, $config, $filesys, $image, $log, $avaMgr, $userMgr); + + $displayName = $user->composeAndStoreDisplayName($part1, $part2); + $this->assertSame($expected, $displayName); + } +} |