diff options
author | John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com> | 2018-03-09 17:46:34 +0100 |
---|---|---|
committer | John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com> | 2018-05-16 09:50:20 +0200 |
commit | c8f670dd8f2982f455662a24be67ad89f8ca2915 (patch) | |
tree | 296e14353e3a94b33b97c50646974840d1b3c4bd /tests | |
parent | 7de6c06c66df859f6e5ffcd4e0c85580b3c4d365 (diff) | |
download | nextcloud-server-c8f670dd8f2982f455662a24be67ad89f8ca2915.tar.gz nextcloud-server-c8f670dd8f2982f455662a24be67ad89f8ca2915.zip |
Settings to vuejs
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Settings/Controller/UsersControllerTest.php | 3022 |
1 files changed, 0 insertions, 3022 deletions
diff --git a/tests/Settings/Controller/UsersControllerTest.php b/tests/Settings/Controller/UsersControllerTest.php deleted file mode 100644 index 4cfec07f78b..00000000000 --- a/tests/Settings/Controller/UsersControllerTest.php +++ /dev/null @@ -1,3022 +0,0 @@ -<?php -/** - * @author Lukas Reschke - * @copyright 2014-2015 Lukas Reschke lukas@owncloud.com - * - * This file is licensed under the Affero General Public License version 3 or - * later. - * See the COPYING-README file. - */ - -namespace Tests\Settings\Controller; - -use OC\Accounts\AccountManager; -use OC\Group\Group; -use OC\Group\Manager; -use OC\Settings\Controller\UsersController; -use OC\Settings\Mailer\NewUserMailHelper; -use OC\SubAdmin; -use OCP\App\IAppManager; -use OCP\AppFramework\Http; -use OCP\AppFramework\Http\DataResponse; -use OCP\BackgroundJob\IJobList; -use OCP\Files\Config\IUserMountCache; -use OCP\Encryption\IEncryptionModule; -use OCP\Encryption\IManager; -use OCP\IAvatar; -use OCP\IAvatarManager; -use OCP\IConfig; -use OCP\IGroup; -use OCP\IGroupManager; -use OCP\IL10N; -use OCP\ILogger; -use OCP\IRequest; -use OCP\IURLGenerator; -use OCP\IUser; -use OCP\IUserManager; -use OCP\IUserSession; -use OCP\Mail\IEMailTemplate; -use OCP\Mail\IMailer; -use OCP\Security\ISecureRandom; -use OC\User\User; -use Test\Util\User\Dummy; - -/** - * @group DB - * - * @package Tests\Settings\Controller - */ -class UsersControllerTest extends \Test\TestCase { - - /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ - private $groupManager; - /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ - private $userManager; - /** @var IUserSession|\PHPUnit_Framework_MockObject_MockObject */ - private $userSession; - /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ - private $config; - /** @var ILogger|\PHPUnit_Framework_MockObject_MockObject */ - private $logger; - /** @var IMailer|\PHPUnit_Framework_MockObject_MockObject */ - private $mailer; - /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ - private $urlGenerator; - /** @var IAppManager|\PHPUnit_Framework_MockObject_MockObject */ - private $appManager; - /** @var IAvatarManager|\PHPUnit_Framework_MockObject_MockObject */ - private $avatarManager; - /** @var IL10N|\PHPUnit_Framework_MockObject_MockObject */ - private $l; - /** @var AccountManager | \PHPUnit_Framework_MockObject_MockObject */ - private $accountManager; - /** @var ISecureRandom | \PHPUnit_Framework_MockObject_MockObject */ - private $secureRandom; - /** @var NewUserMailHelper|\PHPUnit_Framework_MockObject_MockObject */ - private $newUserMailHelper; - /** @var IJobList | \PHPUnit_Framework_MockObject_MockObject */ - private $jobList; - /** @var \OC\Security\IdentityProof\Manager |\PHPUnit_Framework_MockObject_MockObject */ - private $securityManager; - /** @var IUserMountCache |\PHPUnit_Framework_MockObject_MockObject */ - private $userMountCache; - /** @var IManager | \PHPUnit_Framework_MockObject_MockObject */ - private $encryptionManager; - /** @var IEncryptionModule | \PHPUnit_Framework_MockObject_MockObject */ - private $encryptionModule; - - protected function setUp() { - parent::setUp(); - - $this->groupManager = $this->createMock(Manager::class); - $this->userManager = $this->createMock(IUserManager::class); - $this->userSession = $this->createMock(IUserSession::class); - $this->config = $this->createMock(IConfig::class); - $this->logger = $this->createMock(ILogger::class); - $this->mailer = $this->createMock(IMailer::class); - $this->urlGenerator = $this->createMock(IURLGenerator::class); - $this->appManager = $this->createMock(IAppManager::class); - $this->avatarManager = $this->createMock(IAvatarManager::class); - $this->accountManager = $this->createMock(AccountManager::class); - $this->secureRandom = $this->createMock(ISecureRandom::class); - $this->newUserMailHelper = $this->createMock(NewUserMailHelper::class); - $this->securityManager = $this->getMockBuilder(\OC\Security\IdentityProof\Manager::class)->disableOriginalConstructor()->getMock(); - $this->jobList = $this->createMock(IJobList::class); - $this->encryptionManager = $this->createMock(IManager::class); - $this->l = $this->createMock(IL10N::class); - $this->l->method('t') - ->will($this->returnCallback(function ($text, $parameters = []) { - return vsprintf($text, $parameters); - })); - $this->userMountCache = $this->createMock(IUserMountCache::class); - - $this->encryptionModule = $this->createMock(IEncryptionModule::class); - $this->encryptionManager->expects($this->any())->method('getEncryptionModules') - ->willReturn(['encryptionModule' => ['callback' => function() { return $this->encryptionModule;}]]); - - /* - * Set default avatar behaviour for whole test suite - */ - - $avatarExists = $this->createMock(IAvatar::class); - $avatarExists->method('exists')->willReturn(true); - $avatarNotExists = $this->createMock(IAvatar::class); - $avatarNotExists->method('exists')->willReturn(false); - $this->avatarManager->method('getAvatar') - ->will($this->returnValueMap([ - ['foo', $avatarExists], - ['bar', $avatarExists], - ['admin', $avatarNotExists], - ])); - } - - /** - * @param bool $isAdmin - * @return UsersController | \PHPUnit_Framework_MockObject_MockObject - */ - protected function getController($isAdmin = false, $mockedMethods = []) { - if (empty($mockedMethods)) { - return new UsersController( - 'settings', - $this->createMock(IRequest::class), - $this->userManager, - $this->groupManager, - $this->userSession, - $this->config, - $isAdmin, - $this->l, - $this->logger, - $this->mailer, - $this->urlGenerator, - $this->appManager, - $this->avatarManager, - $this->accountManager, - $this->secureRandom, - $this->newUserMailHelper, - $this->securityManager, - $this->jobList, - $this->userMountCache, - $this->encryptionManager - ); - } else { - return $this->getMockBuilder(UsersController::class) - ->setConstructorArgs( - [ - 'settings', - $this->createMock(IRequest::class), - $this->userManager, - $this->groupManager, - $this->userSession, - $this->config, - $isAdmin, - $this->l, - $this->logger, - $this->mailer, - $this->urlGenerator, - $this->appManager, - $this->avatarManager, - $this->accountManager, - $this->secureRandom, - $this->newUserMailHelper, - $this->securityManager, - $this->jobList, - $this->userMountCache, - $this->encryptionManager - ] - )->setMethods($mockedMethods)->getMock(); - } - } - - public function testIndexAdmin() { - $controller = $this->getController(true); - - $foo = $this->createMock(User::class); - $foo - ->expects($this->exactly(2)) - ->method('getUID') - ->will($this->returnValue('foo')); - $foo - ->expects($this->once()) - ->method('getDisplayName') - ->will($this->returnValue('M. Foo')); - $foo - ->expects($this->once()) - ->method('getEMailAddress') - ->will($this->returnValue('foo@bar.com')); - $foo - ->expects($this->exactly(2)) - ->method('getQuota') - ->will($this->returnValue(1024)); - $foo - ->method('getLastLogin') - ->will($this->returnValue(500)); - $foo - ->method('getHome') - ->will($this->returnValue('/home/foo')); - $foo - ->expects($this->once()) - ->method('getBackendClassName') - ->will($this->returnValue('OC_User_Database')); - $foo->expects($this->any()) - ->method('isEnabled') - ->willReturn(true); - $admin = $this->createMock(User::class); - $admin - ->expects($this->exactly(2)) - ->method('getUID') - ->will($this->returnValue('admin')); - $admin - ->expects($this->once()) - ->method('getDisplayName') - ->will($this->returnValue('S. Admin')); - $admin - ->expects($this->once()) - ->method('getEMailAddress') - ->will($this->returnValue('admin@bar.com')); - $admin - ->expects($this->exactly(2)) - ->method('getQuota') - ->will($this->returnValue(404)); - $admin - ->expects($this->once()) - ->method('getLastLogin') - ->will($this->returnValue(12)); - $admin - ->expects($this->once()) - ->method('getHome') - ->will($this->returnValue('/home/admin')); - $admin - ->expects($this->once()) - ->method('getBackendClassName') - ->willReturn(Dummy::class); - $admin->expects($this->any()) - ->method('isEnabled') - ->willReturn(true); - $bar = $this->createMock(User::class); - $bar - ->expects($this->exactly(2)) - ->method('getUID') - ->will($this->returnValue('bar')); - $bar - ->expects($this->once()) - ->method('getDisplayName') - ->will($this->returnValue('B. Ar')); - $bar - ->expects($this->once()) - ->method('getEMailAddress') - ->will($this->returnValue('bar@dummy.com')); - $bar - ->expects($this->exactly(2)) - ->method('getQuota') - ->will($this->returnValue(2323)); - $bar - ->method('getLastLogin') - ->will($this->returnValue(3999)); - $bar - ->method('getHome') - ->will($this->returnValue('/home/bar')); - $bar - ->expects($this->once()) - ->method('getBackendClassName') - ->willReturn(Dummy::class); - $bar->expects($this->at(0)) - ->method('isEnabled') - ->willReturn(true); - $bar->expects($this->at(1)) - ->method('isEnabled') - ->willReturn(true); - $bar->expects($this->at(2)) - ->method('isEnabled') - ->willReturn(false); - - $this->groupManager - ->expects($this->once()) - ->method('displayNamesInGroup') - ->with('gid', 'pattern') - ->will($this->returnValue(array('foo' => 'M. Foo', 'admin' => 'S. Admin', 'bar' => 'B. Ar'))); - $this->groupManager - ->expects($this->exactly(3)) - ->method('getUserGroupNames') - ->will($this->onConsecutiveCalls( - array( - 'Users' => array('displayName' => 'Users'), - 'Support' => array('displayName' => 'Support') - ), - array( - 'admins' => array('displayName' => 'admins'), - 'Support' => array('displayName' => 'Support') - ), - array( - 'External Users' => array('displayName' => 'External Users') - ) - )); - $this->userManager - ->expects($this->at(0)) - ->method('get') - ->with('foo') - ->will($this->returnValue($foo)); - $this->userManager - ->expects($this->at(1)) - ->method('get') - ->with('admin') - ->will($this->returnValue($admin)); - $this->userManager - ->expects($this->at(2)) - ->method('get') - ->with('bar') - ->will($this->returnValue($bar)); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin - ->expects($this->any()) - ->method('getSubAdminsGroupsName') - ->with($foo) - ->will($this->returnValue([])); - $subadmin - ->expects($this->any()) - ->method('getSubAdminsGroupsName') - ->with($admin) - ->will($this->returnValue([])); - $subadmin - ->expects($this->any()) - ->method('getSubAdminsGroupsName') - ->with($bar) - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $this->userMountCache - ->expects($this->once()) - ->method('getUsedSpaceForUsers') - ->will($this->returnValue(['admin' => 200, 'bar' => 2000, 'foo' => 512])); - - $expectedResponse = new DataResponse( - array( - 0 => array( - 'name' => 'foo', - 'displayname' => 'M. Foo', - 'groups' => array( - 'Users' => array('displayName' => 'Users'), - 'Support' => array('displayName' => 'Support') - ), - 'subadmin' => array(), - 'quota' => 1024, - 'quota_bytes' => 1024.0, - 'storageLocation' => '/home/foo', - 'lastLogin' => 500000, - 'backend' => 'OC_User_Database', - 'email' => 'foo@bar.com', - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - 'isEnabled' => true, - 'size' => 512, - ), - 1 => array( - 'name' => 'admin', - 'displayname' => 'S. Admin', - 'groups' => array( - 'admins' => array('displayName' => 'admins'), - 'Support' => array('displayName' => 'Support') - ), - 'subadmin' => array(), - 'quota' => 404, - 'quota_bytes' => 404.0, - 'storageLocation' => '/home/admin', - 'lastLogin' => 12000, - 'backend' => Dummy::class, - 'email' => 'admin@bar.com', - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => false, - 'isEnabled' => true, - 'size' => 200, - ), - 2 => array( - 'name' => 'bar', - 'displayname' => 'B. Ar', - 'groups' => array( - 'External Users' => array('displayName' => 'External Users') - ), - 'subadmin' => array(), - 'quota' => 2323, - 'quota_bytes' => 2323.0, - 'storageLocation' => '/home/bar', - 'lastLogin' => 3999000, - 'backend' => Dummy::class, - 'email' => 'bar@dummy.com', - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - 'isEnabled' => false, - 'size' => 2000, - ), - ) - ); - $response = $controller->index(0, 10, 'gid', 'pattern'); - $this->assertEquals($expectedResponse, $response); - } - - public function testIndexSubAdmin() { - $controller = $this->getController(false); - - $user = $this->createMock(User::class); - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($user)); - - $foo = $this->createMock(User::class); - $foo - ->expects($this->exactly(2)) - ->method('getUID') - ->will($this->returnValue('foo')); - $foo - ->expects($this->once()) - ->method('getDisplayName') - ->will($this->returnValue('M. Foo')); - $foo - ->expects($this->once()) - ->method('getEMailAddress') - ->will($this->returnValue('foo@bar.com')); - $foo - ->expects($this->exactly(2)) - ->method('getQuota') - ->will($this->returnValue('1024')); - $foo - ->method('getLastLogin') - ->will($this->returnValue(500)); - $foo - ->method('getHome') - ->will($this->returnValue('/home/foo')); - $foo - ->expects($this->once()) - ->method('getBackendClassName') - ->will($this->returnValue('OC_User_Database')); - $foo->expects($this->any()) - ->method('isEnabled') - ->willReturn(true); - $admin = $this->createMock(User::class); - $admin - ->expects($this->exactly(2)) - ->method('getUID') - ->will($this->returnValue('admin')); - $admin - ->expects($this->once()) - ->method('getDisplayName') - ->will($this->returnValue('S. Admin')); - $admin - ->expects($this->once()) - ->method('getEMailAddress') - ->will($this->returnValue('admin@bar.com')); - $admin - ->expects($this->exactly(2)) - ->method('getQuota') - ->will($this->returnValue('404')); - $admin - ->expects($this->once()) - ->method('getLastLogin') - ->will($this->returnValue(12)); - $admin - ->expects($this->once()) - ->method('getHome') - ->will($this->returnValue('/home/admin')); - $admin - ->expects($this->once()) - ->method('getBackendClassName') - ->willReturn(Dummy::class); - $admin->expects($this->any()) - ->method('isEnabled') - ->willReturn(true); - $bar = $this->createMock(User::class); - $bar - ->expects($this->exactly(2)) - ->method('getUID') - ->will($this->returnValue('bar')); - $bar - ->expects($this->once()) - ->method('getDisplayName') - ->will($this->returnValue('B. Ar')); - $bar - ->expects($this->once()) - ->method('getEMailAddress') - ->will($this->returnValue('bar@dummy.com')); - $bar - ->expects($this->exactly(2)) - ->method('getQuota') - ->will($this->returnValue('2323')); - $bar - ->method('getLastLogin') - ->will($this->returnValue(3999)); - $bar - ->method('getHome') - ->will($this->returnValue('/home/bar')); - $bar - ->expects($this->once()) - ->method('getBackendClassName') - ->willReturn(Dummy::class); - $bar->expects($this->any()) - ->method('isEnabled') - ->willReturn(true); - - $this->groupManager - ->expects($this->at(2)) - ->method('displayNamesInGroup') - ->with('SubGroup2', 'pattern') - ->will($this->returnValue(['foo' => 'M. Foo', 'admin' => 'S. Admin'])); - $this->groupManager - ->expects($this->at(1)) - ->method('displayNamesInGroup') - ->with('SubGroup1', 'pattern') - ->will($this->returnValue(['bar' => 'B. Ar'])); - $this->groupManager - ->expects($this->exactly(3)) - ->method('getUserGroupIds') - ->will($this->onConsecutiveCalls( - ['admin', 'SubGroup1', 'testGroup'], - ['SubGroup2', 'SubGroup1'], - ['SubGroup2', 'Foo'] - )); - $this->userManager - ->expects($this->at(0)) - ->method('get') - ->with('bar') - ->will($this->returnValue($bar)); - $this->userManager - ->expects($this->at(1)) - ->method('get') - ->with('foo') - ->will($this->returnValue($foo)); - $this->userManager - ->expects($this->at(2)) - ->method('get') - ->with('admin') - ->will($this->returnValue($admin)); - - $subgroup1 = $this->getMockBuilder(IGroup::class) - ->disableOriginalConstructor() - ->getMock(); - $subgroup1->expects($this->any()) - ->method('getGID') - ->will($this->returnValue('SubGroup1')); - $subgroup2 = $this->getMockBuilder(IGroup::class) - ->disableOriginalConstructor() - ->getMock(); - $subgroup2->expects($this->any()) - ->method('getGID') - ->will($this->returnValue('SubGroup2')); - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin - ->expects($this->at(0)) - ->method('getSubAdminsGroups') - ->will($this->returnValue([$subgroup1, $subgroup2])); - $subadmin - ->expects($this->any()) - ->method('getSubAdminsGroupsName') - ->will($this->returnValue([])); - $subadmin - ->expects($this->any()) - ->method('getSubAdminsGroups') - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $this->userMountCache - ->expects($this->once()) - ->method('getUsedSpaceForUsers') - ->will($this->returnValue(['admin' => 200, 'bar' => 2000, 'foo' => 512])); - - $expectedResponse = new DataResponse( - [ - 0 => [ - 'name' => 'bar', - 'displayname' => 'B. Ar', - 'groups' => ['SubGroup1'], - 'subadmin' => [], - 'quota' => '2323', - 'quota_bytes' => 2323.0, - 'storageLocation' => '/home/bar', - 'lastLogin' => 3999000, - 'backend' => Dummy::class, - 'email' => 'bar@dummy.com', - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - 'isEnabled' => true, - 'size' => 2000, - ], - 1=> [ - 'name' => 'foo', - 'displayname' => 'M. Foo', - 'groups' => ['SubGroup2', 'SubGroup1'], - 'subadmin' => [], - 'quota' => '1024', - 'quota_bytes' => 1024.0, - 'storageLocation' => '/home/foo', - 'lastLogin' => 500000, - 'backend' => 'OC_User_Database', - 'email' => 'foo@bar.com', - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - 'isEnabled' => true, - 'size' => 512, - ], - 2 => [ - 'name' => 'admin', - 'displayname' => 'S. Admin', - 'groups' => ['SubGroup2'], - 'subadmin' => [], - 'quota' => '404', - 'quota_bytes' => 404.0, - 'storageLocation' => '/home/admin', - 'lastLogin' => 12000, - 'backend' => Dummy::class, - 'email' => 'admin@bar.com', - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => false, - 'isEnabled' => true, - 'size' => 200, - ], - ] - ); - - $response = $controller->index(0, 10, '', 'pattern'); - $this->assertEquals($expectedResponse, $response); - } - - /** - * TODO: Since the function uses the static OC_Subadmin class it can't be mocked - * to test for subadmins. Thus the test always assumes you have admin permissions... - */ - public function testIndexWithSearch() { - $controller = $this->getController(true); - - $foo = $this->createMock(User::class); - $foo - ->expects($this->exactly(2)) - ->method('getUID') - ->will($this->returnValue('foo')); - $foo - ->expects($this->once()) - ->method('getDisplayName') - ->will($this->returnValue('M. Foo')); - $foo - ->expects($this->once()) - ->method('getEMailAddress') - ->will($this->returnValue('foo@bar.com')); - $foo - ->expects($this->exactly(2)) - ->method('getQuota') - ->will($this->returnValue('1024')); - $foo - ->method('getLastLogin') - ->will($this->returnValue(500)); - $foo - ->method('getHome') - ->will($this->returnValue('/home/foo')); - $foo - ->expects($this->once()) - ->method('getBackendClassName') - ->will($this->returnValue('OC_User_Database')); - $foo->expects($this->any()) - ->method('isEnabled') - ->willReturn(true); - $admin = $this->createMock(User::class); - $admin - ->expects($this->exactly(2)) - ->method('getUID') - ->will($this->returnValue('admin')); - $admin - ->expects($this->once()) - ->method('getDisplayName') - ->will($this->returnValue('S. Admin')); - $admin - ->expects($this->once()) - ->method('getEMailAddress') - ->will($this->returnValue('admin@bar.com')); - $admin - ->expects($this->exactly(2)) - ->method('getQuota') - ->will($this->returnValue('404')); - $admin - ->expects($this->once()) - ->method('getLastLogin') - ->will($this->returnValue(12)); - $admin - ->expects($this->once()) - ->method('getHome') - ->will($this->returnValue('/home/admin')); - $admin - ->expects($this->once()) - ->method('getBackendClassName') - ->willReturn(Dummy::class); - $admin->expects($this->any()) - ->method('isEnabled') - ->willReturn(true); - $bar = $this->createMock(User::class); - $bar - ->expects($this->exactly(2)) - ->method('getUID') - ->will($this->returnValue('bar')); - $bar - ->expects($this->once()) - ->method('getDisplayName') - ->will($this->returnValue('B. Ar')); - $bar - ->expects($this->once()) - ->method('getEMailAddress') - ->will($this->returnValue('bar@dummy.com')); - $bar - ->expects($this->exactly(2)) - ->method('getQuota') - ->will($this->returnValue('2323')); - $bar - ->method('getLastLogin') - ->will($this->returnValue(3999)); - $bar - ->method('getHome') - ->will($this->returnValue('/home/bar')); - $bar - ->expects($this->once()) - ->method('getBackendClassName') - ->willReturn(Dummy::class); - $bar->expects($this->any()) - ->method('isEnabled') - ->willReturn(true); - - $this->userManager - ->expects($this->once()) - ->method('search') - ->with('pattern', 10, 0) - ->will($this->returnValue([$foo, $admin, $bar])); - $this->groupManager - ->expects($this->exactly(3)) - ->method('getUserGroupNames') - ->will($this->onConsecutiveCalls( - array( - 'Users' => array('displayName' => 'Users'), - 'Support' => array('displayName' => 'Support') - ), - array( - 'admins' => array('displayName' => 'admins'), - 'Support' => array('displayName' => 'Support') - ), - array( - 'External Users' => array('displayName' => 'External Users') - ) - )); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->any()) - ->method('getSubAdminsGroupsName') - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $this->userMountCache - ->expects($this->once()) - ->method('getUsedSpaceForUsers') - ->will($this->returnValue(['admin' => 200, 'bar' => 2000, 'foo' => 512])); - - $expectedResponse = new DataResponse( - array( - 0 => array( - 'name' => 'foo', - 'displayname' => 'M. Foo', - 'groups' => array( - 'Users' => array('displayName' => 'Users'), - 'Support' => array('displayName' => 'Support') - ), - 'subadmin' => array(), - 'quota' => 1024, - 'quota_bytes' => 1024, - 'storageLocation' => '/home/foo', - 'lastLogin' => 500000, - 'backend' => 'OC_User_Database', - 'email' => 'foo@bar.com', - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - 'isEnabled' => true, - 'size' => 512, - ), - 1 => array( - 'name' => 'admin', - 'displayname' => 'S. Admin', - 'groups' => array( - 'admins' => array('displayName' => 'admins'), - 'Support' => array('displayName' => 'Support') - ), - 'subadmin' => array(), - 'quota' => 404, - 'quota_bytes' => 404, - 'storageLocation' => '/home/admin', - 'lastLogin' => 12000, - 'backend' => Dummy::class, - 'email' => 'admin@bar.com', - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => false, - 'isEnabled' => true, - 'size' => 200, - ), - 2 => array( - 'name' => 'bar', - 'displayname' => 'B. Ar', - 'groups' => array( - 'External Users' => array('displayName' => 'External Users') - ), - 'subadmin' => array(), - 'quota' => 2323, - 'quota_bytes' => 2323, - 'storageLocation' => '/home/bar', - 'lastLogin' => 3999000, - 'backend' => Dummy::class, - 'email' => 'bar@dummy.com', - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - 'isEnabled' => true, - 'size' => 2000, - ), - ) - ); - $response = $controller->index(0, 10, '', 'pattern'); - $this->assertEquals($expectedResponse, $response); - } - - public function testIndexWithBackend() { - $controller = $this->getController(true); - - $user = $this->createMock(User::class); - $user - ->expects($this->exactly(2)) - ->method('getUID') - ->will($this->returnValue('foo')); - $user - ->expects($this->once()) - ->method('getDisplayName') - ->will($this->returnValue('M. Foo')); - $user - ->expects($this->once()) - ->method('getEMailAddress') - ->will($this->returnValue(null)); - $user - ->expects($this->exactly(2)) - ->method('getQuota') - ->will($this->returnValue('none')); - $user - ->method('getLastLogin') - ->will($this->returnValue(500)); - $user - ->method('getHome') - ->will($this->returnValue('/home/foo')); - $user - ->expects($this->once()) - ->method('getBackendClassName') - ->will($this->returnValue('OC_User_Database')); - $user->expects($this->any()) - ->method('isEnabled') - ->willReturn(true); - - $this->userManager - ->expects($this->once()) - ->method('getBackends') - ->will($this->returnValue([new Dummy(), new \OC\User\Database()])); - $this->userManager - ->expects($this->once()) - ->method('clearBackends'); - $this->userManager - ->expects($this->once()) - ->method('search') - ->with('') - ->will($this->returnValue([$user])); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->once()) - ->method('getSubAdminsGroupsName') - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $this->userMountCache - ->expects($this->once()) - ->method('getUsedSpaceForUsers') - ->will($this->returnValue(['foo' => 512])); - - $expectedResponse = new DataResponse( - array( - 0 => array( - 'name' => 'foo', - 'displayname' => 'M. Foo', - 'groups' => null, - 'subadmin' => array(), - 'quota' => 'none', - 'quota_bytes' => 0, - 'storageLocation' => '/home/foo', - 'lastLogin' => 500000, - 'backend' => 'OC_User_Database', - 'email' => null, - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - 'isEnabled' => true, - 'size' => 512, - ) - ) - ); - $response = $controller->index(0, 10, '','', Dummy::class); - $this->assertEquals($expectedResponse, $response); - } - - public function testIndexWithBackendNoUser() { - $controller = $this->getController(true); - - $this->userManager - ->expects($this->once()) - ->method('getBackends') - ->will($this->returnValue([new Dummy(), new \OC\User\Database()])); - $this->userManager - ->expects($this->once()) - ->method('search') - ->with('') - ->will($this->returnValue([])); - - $this->userMountCache - ->expects($this->once()) - ->method('getUsedSpaceForUsers') - ->will($this->returnValue([])); - - $expectedResponse = new DataResponse([]); - $response = $controller->index(0, 10, '','', Dummy::class); - $this->assertEquals($expectedResponse, $response); - } - - public function testCreateSuccessfulWithoutGroupAdmin() { - $controller = $this->getController(true); - - $user = $this->createMock(User::class); - $user - ->method('getHome') - ->will($this->returnValue('/home/user')); - $user - ->method('getUID') - ->will($this->returnValue('foo')); - $user - ->expects($this->once()) - ->method('getBackendClassName') - ->will($this->returnValue('bar')); - $user->expects($this->any()) - ->method('isEnabled') - ->willReturn(true); - - $this->userManager - ->expects($this->once()) - ->method('createUser') - ->will($this->onConsecutiveCalls($user)); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin - ->expects($this->any()) - ->method('getSubAdminsGroupsName') - ->with($user) - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $expectedResponse = new DataResponse( - array( - 'name' => 'foo', - 'groups' => null, - 'storageLocation' => '/home/user', - 'backend' => 'bar', - 'lastLogin' => null, - 'displayname' => null, - 'quota' => null, - 'subadmin' => array(), - 'email' => null, - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - 'isEnabled' => true, - 'quota_bytes' => false, - ), - Http::STATUS_CREATED - ); - $response = $controller->create('foo', 'password', array()); - $this->assertEquals($expectedResponse, $response); - } - - public function testCreateSuccessfulWithGroupAdmin() { - $controller = $this->getController(true); - - $user = $this->createMock(User::class); - $user - ->method('getHome') - ->will($this->returnValue('/home/user')); - $user - ->method('getHome') - ->will($this->returnValue('/home/user')); - $user - ->method('getUID') - ->will($this->returnValue('foo')); - $user - ->expects($this->once()) - ->method('getBackendClassName') - ->will($this->returnValue('bar')); - $user->expects($this->any()) - ->method('isEnabled') - ->willReturn(true); - $existingGroup = $this->getMockBuilder(IGroup::class) - ->disableOriginalConstructor()->getMock(); - $existingGroup - ->expects($this->once()) - ->method('addUser') - ->with($user); - $newGroup = $this->getMockBuilder(IGroup::class) - ->disableOriginalConstructor()->getMock(); - $newGroup - ->expects($this->once()) - ->method('addUser') - ->with($user); - - $this->userManager - ->expects($this->once()) - ->method('createUser') - ->will($this->onConsecutiveCalls($user)); - $this->groupManager - ->expects($this->exactly(2)) - ->method('get') - ->will($this->onConsecutiveCalls(null, $existingGroup)); - $this->groupManager - ->expects($this->once()) - ->method('createGroup') - ->with('NewGroup') - ->will($this->onConsecutiveCalls($newGroup)); - $this->groupManager - ->expects($this->once()) - ->method('getUserGroupNames') - ->with($user) - ->will($this->onConsecutiveCalls( - array( - 'NewGroup' => array('displayName' => 'NewGroup'), - 'ExistingGroup' => array('displayName' => 'ExistingGroup') - ) - )); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin - ->expects($this->once()) - ->method('getSubAdminsGroupsName') - ->with($user) - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $expectedResponse = new DataResponse( - array( - 'name' => 'foo', - 'groups' => array( - 'NewGroup' => array('displayName' => 'NewGroup'), - 'ExistingGroup' => array('displayName' => 'ExistingGroup') - ), - 'storageLocation' => '/home/user', - 'backend' => 'bar', - 'lastLogin' => null, - 'displayname' => null, - 'quota' => null, - 'subadmin' => array(), - 'email' => null, - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - 'isEnabled' => true, - 'quota_bytes' => false, - ), - Http::STATUS_CREATED - ); - $response = $controller->create('foo', 'password', array('NewGroup', 'ExistingGroup')); - $this->assertEquals($expectedResponse, $response); - } - - public function testCreateSuccessfulWithGroupSubAdmin() { - $controller = $this->getController(false); - $user = $this->createMock(IUser::class); - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($user)); - $newUser = $this->createMock(IUser::class); - $newUser - ->method('getHome') - ->will($this->returnValue('/home/user')); - $newUser - ->method('getHome') - ->will($this->returnValue('/home/user')); - $newUser - ->method('getUID') - ->will($this->returnValue('foo')); - $newUser - ->expects($this->once()) - ->method('getBackendClassName') - ->will($this->returnValue('bar')); - $subGroup1 = $this->createMock(IGroup::class); - $newUser->expects($this->any()) - ->method('isEnabled') - ->willReturn(true); - $subGroup1 - ->expects($this->any()) - ->method('getGID') - ->will($this->returnValue('SubGroup1')); - $subGroup1 - ->expects($this->once()) - ->method('addUser') - ->with($user); - $this->userManager - ->expects($this->once()) - ->method('createUser') - ->will($this->returnValue($newUser)); - $this->groupManager - ->expects($this->once()) - ->method('getUserGroupNames') - ->with($user) - ->will($this->onConsecutiveCalls(array('SubGroup1' => - array('displayName' => 'SubGroup1') - ))); - $this->groupManager - ->expects($this->once()) - ->method('getUserGroupNames') - ->with($newUser) - ->will($this->onConsecutiveCalls(['SubGroup1'])); - - $subadmin = $this->createMock(\OC\SubAdmin::class); - $subadmin->expects($this->atLeastOnce()) - ->method('getSubAdminsGroupsName') - ->with($user) - ->willReturnMap([ - [$user, [$subGroup1]], - [$newUser, []], - ]); - $subadmin->expects($this->atLeastOnce()) - ->method('isSubAdminofGroup') - ->willReturnMap([ - [$user, $subGroup1, true], - ]); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - $this->groupManager->expects($this->atLeastOnce()) - ->method('get') - ->willReturnMap([ - ['SubGroup1', $subGroup1], - ]); - - $expectedResponse = new DataResponse( - array( - 'name' => 'foo', - 'groups' => array('SubGroup1' => array('displayName' => 'SubGroup1')), - 'storageLocation' => '/home/user', - 'backend' => 'bar', - 'lastLogin' => 0, - 'displayname' => null, - 'quota' => null, - 'subadmin' => [], - 'email' => null, - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - 'isEnabled' => true, - 'quota_bytes' => false, - ), - Http::STATUS_CREATED - ); - $response = $controller->create('foo', 'password', ['SubGroup1', 'ExistingGroup']); - $this->assertEquals($expectedResponse, $response); - } - - public function testCreateUnsuccessfulAdmin() { - $controller = $this->getController(true); - - $this->userManager - ->method('createUser') - ->will($this->throwException(new \Exception())); - - $expectedResponse = new DataResponse( - array( - 'message' => 'Unable to create user.' - ), - Http::STATUS_FORBIDDEN - ); - $response = $controller->create('foo', 'password', array()); - $this->assertEquals($expectedResponse, $response); - } - - public function testCreateUnsuccessfulSubAdminNoGroup() { - $controller = $this->getController(false); - $user = $this->createMock(IUser::class); - $user->expects($this->any()) - ->method('getUID') - ->will($this->returnValue('username')); - $this->userSession->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($user)); - - $this->userManager->expects($this->never()) - ->method('createUser'); - - $expectedResponse = new DataResponse( - [ - 'message' => 'No valid group selected' - ], - Http::STATUS_FORBIDDEN - ); - $response = $controller->create('foo', 'password', []); - $this->assertEquals($expectedResponse, $response); - } - - public function testCreateUnsuccessfulSubAdmin() { - $controller = $this->getController(false); - $user = $this->createMock(IUser::class); - $user->expects($this->any()) - ->method('getUID') - ->will($this->returnValue('username')); - $this->userSession->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($user)); - - $this->userManager - ->method('createUser') - ->will($this->throwException(new \Exception())); - - $subgroup1 = $this->createMock(IGroup::class); - $subgroup2 = $this->createMock(IGroup::class); - $subadmin = $this->createMock(\OC\SubAdmin::class); - $subadmin->expects($this->atLeastOnce()) - ->method('isSubAdminofGroup') - ->willReturnMap([ - [$user, $subgroup1, true], - [$user, $subgroup2, true], - ]); - $this->groupManager->expects($this->any()) - ->method('getSubAdmin') - ->willReturn($subadmin); - $this->groupManager->expects($this->atLeastOnce()) - ->method('get') - ->willReturnMap([ - ['SubGroup1', $subgroup1], - ['SubGroup2', $subgroup2], - ]); - - $expectedResponse = new DataResponse( - [ - 'message' => 'Unable to create user.' - ], - Http::STATUS_FORBIDDEN - ); - $response = $controller->create('foo', 'password', array('SubGroup1', 'SubGroup2')); - $this->assertEquals($expectedResponse, $response); - } - - public function testDestroySelfAdmin() { - $controller = $this->getController(true); - - $user = $this->createMock(User::class); - $user - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('myself')); - $this->userSession - ->method('getUser') - ->will($this->returnValue($user)); - - $expectedResponse = new DataResponse( - array( - 'status' => 'error', - 'data' => array( - 'message' => 'Unable to delete user.' - ) - ), - Http::STATUS_FORBIDDEN - ); - $response = $controller->destroy('myself'); - $this->assertEquals($expectedResponse, $response); - } - - public function testDestroySelfSubadmin() { - $controller = $this->getController(false); - - $user = $this->createMock(User::class); - $user - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('myself')); - $this->userSession - ->method('getUser') - ->will($this->returnValue($user)); - - $expectedResponse = new DataResponse( - array( - 'status' => 'error', - 'data' => array( - 'message' => 'Unable to delete user.' - ) - ), - Http::STATUS_FORBIDDEN - ); - $response = $controller->destroy('myself'); - $this->assertEquals($expectedResponse, $response); - } - - public function testDestroyAdmin() { - $controller = $this->getController(true); - - $user = $this->createMock(User::class); - $user - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('Admin')); - $toDeleteUser = $this->createMock(User::class); - $toDeleteUser - ->expects($this->once()) - ->method('delete') - ->will($this->returnValue(true)); - $this->userSession - ->method('getUser') - ->will($this->returnValue($user)); - $this->userManager - ->method('get') - ->with('UserToDelete') - ->will($this->returnValue($toDeleteUser)); - - $expectedResponse = new DataResponse( - array( - 'status' => 'success', - 'data' => array( - 'username' => 'UserToDelete' - ) - ), - Http::STATUS_NO_CONTENT - ); - $response = $controller->destroy('UserToDelete'); - $this->assertEquals($expectedResponse, $response); - } - - public function testDestroySubAdmin() { - $controller = $this->getController(false); - $user = $this->createMock(User::class); - $user - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('myself')); - $this->userSession - ->method('getUser') - ->will($this->returnValue($user)); - - $user = $this->createMock(User::class); - $toDeleteUser = $this->createMock(User::class); - $toDeleteUser - ->expects($this->once()) - ->method('delete') - ->will($this->returnValue(true)); - $this->userSession - ->method('getUser') - ->will($this->returnValue($user)); - $this->userManager - ->method('get') - ->with('UserToDelete') - ->will($this->returnValue($toDeleteUser)); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->once()) - ->method('isUserAccessible') - ->with($user, $toDeleteUser) - ->will($this->returnValue(true)); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $expectedResponse = new DataResponse( - [ - 'status' => 'success', - 'data' => [ - 'username' => 'UserToDelete' - ] - ], - Http::STATUS_NO_CONTENT - ); - $response = $controller->destroy('UserToDelete'); - $this->assertEquals($expectedResponse, $response); - } - - public function testDestroyUnsuccessfulAdmin() { - $controller = $this->getController(true); - - $user = $this->createMock(User::class); - $user - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('Admin')); - $toDeleteUser = $this->createMock(User::class); - $toDeleteUser - ->expects($this->once()) - ->method('delete') - ->will($this->returnValue(false)); - $this->userSession - ->method('getUser') - ->will($this->returnValue($user)); - $this->userManager - ->method('get') - ->with('UserToDelete') - ->will($this->returnValue($toDeleteUser)); - - $expectedResponse = new DataResponse( - array( - 'status' => 'error', - 'data' => array( - 'message' => 'Unable to delete user.' - ) - ), - Http::STATUS_FORBIDDEN - ); - $response = $controller->destroy('UserToDelete'); - $this->assertEquals($expectedResponse, $response); - } - - public function testDestroyUnsuccessfulSubAdmin() { - $controller = $this->getController(false); - $user = $this->createMock(User::class); - $user - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('myself')); - $this->userSession - ->method('getUser') - ->will($this->returnValue($user)); - - $toDeleteUser = $this->createMock(User::class); - $toDeleteUser - ->expects($this->once()) - ->method('delete') - ->will($this->returnValue(false)); - $this->userSession - ->method('getUser') - ->will($this->returnValue($user)); - $this->userManager - ->method('get') - ->with('UserToDelete') - ->will($this->returnValue($toDeleteUser)); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->once()) - ->method('isUserAccessible') - ->with($user, $toDeleteUser) - ->will($this->returnValue(true)); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $expectedResponse = new DataResponse( - [ - 'status' => 'error', - 'data' => [ - 'message' => 'Unable to delete user.' - ] - ], - Http::STATUS_FORBIDDEN - ); - $response = $controller->destroy('UserToDelete'); - $this->assertEquals($expectedResponse, $response); - } - - public function testDestroyNotAccessibleToSubAdmin() { - $controller = $this->getController(false); - - $user = $this->createMock(User::class); - $user - ->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('myself')); - $this->userSession - ->method('getUser') - ->will($this->returnValue($user)); - - $toDeleteUser = $this->createMock(User::class); - $this->userSession - ->method('getUser') - ->will($this->returnValue($user)); - $this->userManager - ->method('get') - ->with('UserToDelete') - ->will($this->returnValue($toDeleteUser)); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->once()) - ->method('isUserAccessible') - ->with($user, $toDeleteUser) - ->will($this->returnValue(false)); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $expectedResponse = new DataResponse( - [ - 'status' => 'error', - 'data' => [ - 'message' => 'Authentication error' - ] - ], - Http::STATUS_FORBIDDEN - ); - $response = $controller->destroy('UserToDelete'); - $this->assertEquals($expectedResponse, $response); - } - - /** - * test if an invalid mail result in a failure response - */ - public function testCreateUnsuccessfulWithInvalidEmailAdmin() { - $controller = $this->getController(true); - - $expectedResponse = new DataResponse([ - 'message' => 'Invalid mail address', - ], - Http::STATUS_UNPROCESSABLE_ENTITY - ); - $response = $controller->create('foo', 'password', [], 'invalidMailAdress'); - $this->assertEquals($expectedResponse, $response); - } - - /** - * test if a valid mail result in a successful mail send - */ - public function testCreateSuccessfulWithValidEmailAdmin() { - $controller = $this->getController(true); - $this->mailer - ->expects($this->at(0)) - ->method('validateMailAddress') - ->with('validMail@Adre.ss') - ->will($this->returnValue(true)); - - $user = $this->createMock(User::class); - $user - ->method('getHome') - ->will($this->returnValue('/home/user')); - $user - ->method('getHome') - ->will($this->returnValue('/home/user')); - $user - ->method('getUID') - ->will($this->returnValue('foo')); - $user - ->method('getDisplayName') - ->will($this->returnValue('foo')); - $user - ->expects($this->once()) - ->method('getBackendClassName') - ->will($this->returnValue('bar')); - - $emailTemplate = $this->createMock(IEMailTemplate::class); - $this->newUserMailHelper - ->expects($this->at(0)) - ->method('generateTemplate') - ->with($user, false) - ->willReturn($emailTemplate); - $this->newUserMailHelper - ->expects($this->at(1)) - ->method('sendMail') - ->with($user, $emailTemplate); - - $this->userManager - ->expects($this->once()) - ->method('createUser') - ->will($this->onConsecutiveCalls($user)); - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->once()) - ->method('getSubAdminsGroupsName') - ->with($user) - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $response = $controller->create('foo', 'password', [], 'validMail@Adre.ss'); - $this->assertEquals(Http::STATUS_CREATED, $response->getStatus()); - } - - private function mockUser($userId = 'foo', $displayName = 'M. Foo', - $lastLogin = 500, $home = '/home/foo', - $backend = 'OC_User_Database', $enabled = true) { - $user = $this->createMock(User::class); - $user - ->expects($this->any()) - ->method('getUID') - ->will($this->returnValue($userId)); - $user - ->expects($this->once()) - ->method('getDisplayName') - ->will($this->returnValue($displayName)); - $user - ->method('getLastLogin') - ->will($this->returnValue($lastLogin)); - $user - ->method('getHome') - ->will($this->returnValue($home)); - $user - ->expects($this->once()) - ->method('getBackendClassName') - ->will($this->returnValue($backend)); - $user->expects($this->any()) - ->method('isEnabled') - ->willReturn($enabled); - - $result = [ - 'name' => $userId, - 'displayname' => $displayName, - 'groups' => null, - 'subadmin' => array(), - 'quota' => null, - 'storageLocation' => $home, - 'lastLogin' => $lastLogin * 1000, - 'backend' => $backend, - 'email' => null, - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - 'isEnabled' => $enabled, - 'quota_bytes' => false, - ]; - - return [$user, $result]; - } - - public function testRestorePossibleWithoutEncryption() { - $controller = $this->getController(true); - - list($user, $expectedResult) = $this->mockUser(); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->once()) - ->method('getSubAdminsGroupsName') - ->with($user) - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $result = self::invokePrivate($controller, 'formatUserForIndex', [$user]); - $this->assertEquals($expectedResult, $result); - } - - public function testRestorePossibleWithAdminAndUserRestore() { - list($user, $expectedResult) = $this->mockUser(); - - $this->appManager - ->expects($this->once()) - ->method('isEnabledForUser') - ->with( - $this->equalTo('encryption') - ) - ->will($this->returnValue(true)); - $this->config - ->expects($this->once()) - ->method('getAppValue') - ->with( - $this->equalTo('encryption'), - $this->equalTo('recoveryAdminEnabled'), - $this->anything() - ) - ->will($this->returnValue('1')); - - $this->config - ->expects($this->at(1)) - ->method('getUserValue') - ->with( - $this->anything(), - $this->equalTo('encryption'), - $this->equalTo('recoveryEnabled'), - $this->anything() - ) - ->will($this->returnValue('1')); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->once()) - ->method('getSubAdminsGroupsName') - ->with($user) - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $controller = $this->getController(true); - $result = self::invokePrivate($controller, 'formatUserForIndex', [$user]); - $this->assertEquals($expectedResult, $result); - } - - /** - * @dataProvider dataTestRestoreNotPossibleWithoutAdminRestore - * - * @param bool $masterKeyEnabled - */ - public function testRestoreNotPossibleWithoutAdminRestore($masterKeyEnabled) { - list($user, $expectedResult) = $this->mockUser(); - - // without the master key enabled we use per-user keys - $this->encryptionModule->expects($this->once())->method('needDetailedAccessList')->willReturn(!$masterKeyEnabled); - - $this->appManager - ->method('isEnabledForUser') - ->with( - $this->equalTo('encryption') - ) - ->will($this->returnValue(true)); - - // without the master key enabled we use per-user keys -> restore is disabled - $expectedResult['isRestoreDisabled'] = !$masterKeyEnabled; - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->once()) - ->method('getSubAdminsGroupsName') - ->with($user) - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $controller = $this->getController(true); - $result = self::invokePrivate($controller, 'formatUserForIndex', [$user]); - $this->assertEquals($expectedResult, $result); - } - - public function dataTestRestoreNotPossibleWithoutAdminRestore() { - return [ - [true], - [false] - ]; - } - - public function testRestoreNotPossibleWithoutUserRestore() { - list($user, $expectedResult) = $this->mockUser(); - - $this->appManager - ->expects($this->once()) - ->method('isEnabledForUser') - ->with( - $this->equalTo('encryption') - ) - ->will($this->returnValue(true)); - $this->config - ->expects($this->once()) - ->method('getAppValue') - ->with( - $this->equalTo('encryption'), - $this->equalTo('recoveryAdminEnabled'), - $this->anything() - ) - ->will($this->returnValue('1')); - - $this->config - ->expects($this->at(1)) - ->method('getUserValue') - ->with( - $this->anything(), - $this->equalTo('encryption'), - $this->equalTo('recoveryEnabled'), - $this->anything() - ) - ->will($this->returnValue('0')); - - $expectedResult['isRestoreDisabled'] = true; - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->once()) - ->method('getSubAdminsGroupsName') - ->with($user) - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $controller = $this->getController(true); - $result = self::invokePrivate($controller, 'formatUserForIndex', [$user]); - $this->assertEquals($expectedResult, $result); - } - - public function testNoAvatar() { - $controller = $this->getController(true); - - list($user, $expectedResult) = $this->mockUser(); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin->expects($this->once()) - ->method('getSubAdminsGroupsName') - ->with($user) - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $this->avatarManager - ->method('getAvatar') - ->will($this->throwException(new \OCP\Files\NotFoundException())); - $expectedResult['isAvatarAvailable'] = false; - - $result = self::invokePrivate($controller, 'formatUserForIndex', [$user]); - $this->assertEquals($expectedResult, $result); - } - - public function testStatsAdmin() { - $controller = $this->getController(true); - - $this->userManager - ->expects($this->at(0)) - ->method('countUsers') - ->will($this->returnValue([128, 44])); - - $expectedResponse = new DataResponse( - [ - 'totalUsers' => 172 - ] - ); - $response = $controller->stats(); - $this->assertEquals($expectedResponse, $response); - } - - /** - * Tests that the subadmin stats return unique users, even - * when a user appears in several groups. - */ - public function testStatsSubAdmin() { - $controller = $this->getController(false); - - $user = $this->createMock(User::class); - - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($user)); - - $group1 = $this->getMockBuilder(Group::class) - ->disableOriginalConstructor()->getMock(); - $group1 - ->expects($this->once()) - ->method('getUsers') - ->will($this->returnValue(['foo' => 'M. Foo', 'admin' => 'S. Admin'])); - - $group2 = $this->getMockBuilder(Group::class) - ->disableOriginalConstructor()->getMock(); - $group2 - ->expects($this->once()) - ->method('getUsers') - ->will($this->returnValue(['bar' => 'B. Ar'])); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin - ->expects($this->at(0)) - ->method('getSubAdminsGroupsName') - ->will($this->returnValue([$group1, $group2])); - $subadmin - ->expects($this->at(0)) - ->method('getSubAdminsGroups') - ->will($this->returnValue([$group1, $group2])); - - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $expectedResponse = new DataResponse( - [ - 'totalUsers' => 3 - ] - ); - - $response = $controller->stats(); - $this->assertEquals($expectedResponse, $response); - } - - public function dataSetDisplayName() { - $data = []; - - $user1 = $this->createMock(IUser::class); - $user1->method('getUID')->willReturn('user1'); - $user1->method('canChangeDisplayName')->willReturn(true); - $data[] = [$user1, $user1, false, false, true]; - - $user1 = $this->createMock(IUser::class); - $user1->method('getUID')->willReturn('user1'); - $user1->method('canChangeDisplayName')->willReturn(false); - $data[] = [$user1, $user1, false, false, false]; - - $user1 = $this->createMock(IUser::class); - $user1->method('getUID')->willReturn('user1'); - $user2 = $this->createMock(IUser::class); - $user2->method('getUID')->willReturn('user2'); - $user2->method('canChangeDisplayName')->willReturn(true); - $data[] = [$user1, $user2, false, false, false]; - - $user1 = $this->createMock(IUser::class); - $user1->method('getUID')->willReturn('user1'); - $user2 = $this->createMock(IUser::class); - $user2->method('getUID')->willReturn('user2'); - $user2->method('canChangeDisplayName')->willReturn(true); - $data[] = [$user1, $user2, true, false, true]; - - $user1 = $this->createMock(IUser::class); - $user1->method('getUID')->willReturn('user1'); - $user2 = $this->createMock(IUser::class); - $user2->method('getUID')->willReturn('user2'); - $user2->method('canChangeDisplayName')->willReturn(true); - $data[] = [$user1, $user2, false, true, true]; - - return $data; - } - - /** - * @dataProvider dataSetDisplayName - * - * @param IUser|\PHPUnit_Framework_MockObject_MockObject $currentUser - * @param IUser|\PHPUnit_Framework_MockObject_MockObject $editUser - * @param bool $isAdmin - * @param bool $isSubAdmin - * @param bool $valid - */ - public function testSetDisplayName($currentUser, $editUser, $isAdmin, $isSubAdmin, $valid) { - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->willReturn($currentUser); - $this->userManager - ->expects($this->once()) - ->method('get') - ->with($editUser->getUID()) - ->willReturn($editUser); - $this->accountManager->expects($this->any())->method('getUser')->willReturn([]); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin - ->method('isUserAccessible') - ->with($currentUser, $editUser) - ->willReturn($isSubAdmin); - - $this->groupManager - ->method('getSubAdmin') - ->willReturn($subadmin); - $this->groupManager - ->method('isAdmin') - ->with($currentUser->getUID()) - ->willReturn($isAdmin); - - if ($valid === true) { - $expectedResponse = new DataResponse( - [ - 'status' => 'success', - 'data' => [ - 'message' => 'Your full name has been changed.', - 'username' => $editUser->getUID(), - 'displayName' => 'newDisplayName', - ], - ] - ); - } else { - $expectedResponse = new DataResponse( - [ - 'status' => 'error', - 'data' => [ - 'message' => 'Authentication error', - ], - ] - ); - } - - $controller = $this->getController(true); - $response = $controller->setDisplayName($editUser->getUID(), 'newDisplayName'); - $this->assertEquals($expectedResponse, $response); - } - - public function testSetDisplayNameFails() { - /** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */ - $user = $this->createMock(IUser::class); - $user->method('canChangeDisplayname')->willReturn(true); - $user->method('getUID')->willReturn('user'); - $user->expects($this->once()) - ->method('setDisplayName') - ->with('newDisplayName') - ->willReturn(false); - $user->method('getDisplayName')->willReturn('oldDisplayName'); - - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->willReturn($user); - - $this->userManager - ->expects($this->once()) - ->method('get') - ->with($user->getUID()) - ->willReturn($user); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin - ->method('isUserAccessible') - ->with($user, $user) - ->willReturn(false); - - $this->groupManager - ->method('getSubAdmin') - ->willReturn($subadmin); - $this->groupManager - ->expects($this->once()) - ->method('isAdmin') - ->with($user->getUID()) - ->willReturn(false); - - $expectedResponse = new DataResponse( - [ - 'status' => 'error', - 'data' => [ - 'message' => 'Unable to change full name', - 'displayName' => 'oldDisplayName', - ], - ] - ); - $controller = $this->getController(true); - $response = $controller->setDisplayName($user->getUID(), 'newDisplayName'); - $this->assertEquals($expectedResponse, $response); - } - - /** - * @dataProvider dataTestSetUserSettings - * - * @param string $email - * @param bool $validEmail - * @param $expectedStatus - */ - public function testSetUserSettings($email, $validEmail, $expectedStatus) { - $controller = $this->getController(false, ['saveUserSettings']); - $user = $this->createMock(IUser::class); - - $this->userSession->method('getUser')->willReturn($user); - - if (!empty($email) && $validEmail) { - $this->mailer->expects($this->once())->method('validateMailAddress') - ->willReturn($validEmail); - } - - $saveData = (!empty($email) && $validEmail) || empty($email); - - if ($saveData) { - $this->accountManager->expects($this->once()) - ->method('getUser') - ->with($user) - ->willReturn([ - AccountManager::PROPERTY_DISPLAYNAME => - [ - 'value' => 'Display name', - 'scope' => AccountManager::VISIBILITY_CONTACTS_ONLY, - 'verified' => AccountManager::NOT_VERIFIED, - ], - AccountManager::PROPERTY_ADDRESS => - [ - 'value' => '', - 'scope' => AccountManager::VISIBILITY_PRIVATE, - 'verified' => AccountManager::NOT_VERIFIED, - ], - AccountManager::PROPERTY_WEBSITE => - [ - 'value' => '', - 'scope' => AccountManager::VISIBILITY_PRIVATE, - 'verified' => AccountManager::NOT_VERIFIED, - ], - AccountManager::PROPERTY_EMAIL => - [ - 'value' => '', - 'scope' => AccountManager::VISIBILITY_CONTACTS_ONLY, - 'verified' => AccountManager::NOT_VERIFIED, - ], - AccountManager::PROPERTY_AVATAR => - [ - 'scope' => AccountManager::VISIBILITY_CONTACTS_ONLY - ], - AccountManager::PROPERTY_PHONE => - [ - 'value' => '', - 'scope' => AccountManager::VISIBILITY_PRIVATE, - 'verified' => AccountManager::NOT_VERIFIED, - ], - AccountManager::PROPERTY_TWITTER => - [ - 'value' => '', - 'scope' => AccountManager::VISIBILITY_PRIVATE, - 'verified' => AccountManager::NOT_VERIFIED, - ], - ]); - - $controller->expects($this->once())->method('saveUserSettings'); - } else { - $controller->expects($this->never())->method('saveUserSettings'); - } - - $result = $controller->setUserSettings( - AccountManager::VISIBILITY_CONTACTS_ONLY, - 'displayName', - AccountManager::VISIBILITY_CONTACTS_ONLY, - '47658468', - AccountManager::VISIBILITY_CONTACTS_ONLY, - $email, - AccountManager::VISIBILITY_CONTACTS_ONLY, - 'nextcloud.com', - AccountManager::VISIBILITY_CONTACTS_ONLY, - 'street and city', - AccountManager::VISIBILITY_CONTACTS_ONLY, - '@nextclouders', - AccountManager::VISIBILITY_CONTACTS_ONLY - ); - - $this->assertSame($expectedStatus, $result->getStatus()); - } - - public function dataTestSetUserSettings() { - return [ - ['', true, Http::STATUS_OK], - ['', false, Http::STATUS_OK], - ['example.com', false, Http::STATUS_UNPROCESSABLE_ENTITY], - ['john@example.com', true, Http::STATUS_OK], - ]; - } - - /** - * @dataProvider dataTestSaveUserSettings - * - * @param array $data - * @param string $oldEmailAddress - * @param string $oldDisplayName - */ - public function testSaveUserSettings($data, - $oldEmailAddress, - $oldDisplayName - ) { - $controller = $this->getController(); - $user = $this->createMock(IUser::class); - - $user->method('getDisplayName')->willReturn($oldDisplayName); - $user->method('getEMailAddress')->willReturn($oldEmailAddress); - $user->method('canChangeDisplayName')->willReturn(true); - - if ($data[AccountManager::PROPERTY_EMAIL]['value'] === $oldEmailAddress || - ($oldEmailAddress === null && $data[AccountManager::PROPERTY_EMAIL]['value'] === '')) { - $user->expects($this->never())->method('setEMailAddress'); - } else { - $user->expects($this->once())->method('setEMailAddress') - ->with($data[AccountManager::PROPERTY_EMAIL]['value']) - ->willReturn(true); - } - - if ($data[AccountManager::PROPERTY_DISPLAYNAME]['value'] === $oldDisplayName || - ($oldDisplayName === null && $data[AccountManager::PROPERTY_DISPLAYNAME]['value'] === '')) { - $user->expects($this->never())->method('setDisplayName'); - } else { - $user->expects($this->once())->method('setDisplayName') - ->with($data[AccountManager::PROPERTY_DISPLAYNAME]['value']) - ->willReturn(true); - } - - $this->accountManager->expects($this->once())->method('updateUser') - ->with($user, $data); - - $this->invokePrivate($controller, 'saveUserSettings', [$user, $data]); - } - - public function dataTestSaveUserSettings() { - return [ - [ - [ - AccountManager::PROPERTY_EMAIL => ['value' => 'john@example.com'], - AccountManager::PROPERTY_DISPLAYNAME => ['value' => 'john doe'], - ], - 'john@example.com', - 'john doe' - ], - [ - [ - AccountManager::PROPERTY_EMAIL => ['value' => 'john@example.com'], - AccountManager::PROPERTY_DISPLAYNAME => ['value' => 'john doe'], - ], - 'johnNew@example.com', - 'john New doe' - ], - [ - [ - AccountManager::PROPERTY_EMAIL => ['value' => 'john@example.com'], - AccountManager::PROPERTY_DISPLAYNAME => ['value' => 'john doe'], - ], - 'johnNew@example.com', - 'john doe' - ], - [ - [ - AccountManager::PROPERTY_EMAIL => ['value' => 'john@example.com'], - AccountManager::PROPERTY_DISPLAYNAME => ['value' => 'john doe'], - ], - 'john@example.com', - 'john New doe' - ], - [ - [ - AccountManager::PROPERTY_EMAIL => ['value' => ''], - AccountManager::PROPERTY_DISPLAYNAME => ['value' => 'john doe'], - ], - null, - 'john New doe' - ], - [ - [ - AccountManager::PROPERTY_EMAIL => ['value' => 'john@example.com'], - AccountManager::PROPERTY_DISPLAYNAME => ['value' => 'john doe'], - ], - 'john@example.com', - null - ], - - ]; - } - - /** - * @dataProvider dataTestSaveUserSettingsException - * - * @param array $data - * @param string $oldEmailAddress - * @param string $oldDisplayName - * @param bool $setDisplayNameResult - * @param bool $canChangeEmail - * - * @expectedException \OC\ForbiddenException - */ - public function testSaveUserSettingsException($data, - $oldEmailAddress, - $oldDisplayName, - $setDisplayNameResult, - $canChangeEmail - ) { - $controller = $this->getController(); - $user = $this->createMock(IUser::class); - - $user->method('getDisplayName')->willReturn($oldDisplayName); - $user->method('getEMailAddress')->willReturn($oldEmailAddress); - - if ($data[AccountManager::PROPERTY_EMAIL]['value'] !== $oldEmailAddress) { - $user->method('canChangeDisplayName') - ->willReturn($canChangeEmail); - } - - if ($data[AccountManager::PROPERTY_DISPLAYNAME]['value'] !== $oldDisplayName) { - $user->method('setDisplayName') - ->with($data[AccountManager::PROPERTY_DISPLAYNAME]['value']) - ->willReturn($setDisplayNameResult); - } - - $this->invokePrivate($controller, 'saveUserSettings', [$user, $data]); - } - - - public function dataTestSaveUserSettingsException() { - return [ - [ - [ - AccountManager::PROPERTY_EMAIL => ['value' => 'john@example.com'], - AccountManager::PROPERTY_DISPLAYNAME => ['value' => 'john doe'], - ], - 'johnNew@example.com', - 'john New doe', - true, - false - ], - [ - [ - AccountManager::PROPERTY_EMAIL => ['value' => 'john@example.com'], - AccountManager::PROPERTY_DISPLAYNAME => ['value' => 'john doe'], - ], - 'johnNew@example.com', - 'john New doe', - false, - true - ], - [ - [ - AccountManager::PROPERTY_EMAIL => ['value' => 'john@example.com'], - AccountManager::PROPERTY_DISPLAYNAME => ['value' => 'john doe'], - ], - 'johnNew@example.com', - 'john New doe', - false, - false - ], - - ]; - } - - /** - * @return array - */ - public function setEmailAddressData() { - return [ - /* mailAddress, isValid, expectsUpdate, canChangeDisplayName, responseCode */ - [ '', true, true, true, Http::STATUS_OK ], - [ 'foo@local', true, true, true, Http::STATUS_OK], - [ 'foo@bar@local', false, false, true, Http::STATUS_UNPROCESSABLE_ENTITY], - [ 'foo@local', true, false, false, Http::STATUS_FORBIDDEN], - ]; - } - /** - * @dataProvider setEmailAddressData - * - * @param string $mailAddress - * @param bool $isValid - * @param bool $expectsUpdate - * @param bool $canChangeDisplayName - * @param int $responseCode - */ - public function testSetEMailAddress($mailAddress, $isValid, $expectsUpdate, $canChangeDisplayName, $responseCode) { - $user = $this->createMock(User::class); - $user - ->expects($this->any()) - ->method('getUID') - ->will($this->returnValue('foo')); - $user - ->expects($this->any()) - ->method('canChangeDisplayName') - ->will($this->returnValue($canChangeDisplayName)); - $user - ->expects($expectsUpdate ? $this->once() : $this->never()) - ->method('setEMailAddress') - ->with( - $this->equalTo($mailAddress) - ); - $user->method('getEMailAddress')->willReturn('oldEmailAddress'); - $this->mailer - ->expects($this->any()) - ->method('validateMailAddress') - ->with($mailAddress) - ->willReturn($isValid); - if ($isValid) { - $user->expects($this->atLeastOnce()) - ->method('canChangeDisplayName') - ->willReturn(true); - $this->userManager - ->expects($this->atLeastOnce()) - ->method('get') - ->with('foo') - ->will($this->returnValue($user)); - } - $controller = $this->getController(true); - $response = $controller->setEMailAddress($user->getUID(), $mailAddress); - $this->assertSame($responseCode, $response->getStatus()); - } - - public function testCreateUnsuccessfulWithoutPasswordAndEmail() { - $controller = $this->getController(true); - - $expectedResponse = new DataResponse( - array( - 'message' => 'To send a password link to the user an email address is required.' - ), - Http::STATUS_UNPROCESSABLE_ENTITY - ); - $response = $controller->create('foo', '', array(), ''); - $this->assertEquals($expectedResponse, $response); - } - - - - public function testCreateSuccessfulWithoutPasswordAndWithEmail() { - $user = $this->createMock(User::class); - $user - ->method('getHome') - ->willReturn('/home/user'); - $user - ->method('getUID') - ->willReturn('foo'); - $user - ->method('getDisplayName') - ->willReturn('John Doe'); - $user - ->method('getEmailAddress') - ->willReturn('abc@example.org'); - $user - ->expects($this->once()) - ->method('getBackendClassName') - ->willReturn('bar'); - $user - ->method('isEnabled') - ->willReturn(true); - - $this->userManager - ->expects($this->once()) - ->method('createUser') - ->will($this->onConsecutiveCalls($user)); - - $subadmin = $this->getMockBuilder(SubAdmin::class) - ->disableOriginalConstructor() - ->getMock(); - $subadmin - ->expects($this->any()) - ->method('getSubAdminsGroupsName') - ->with($user) - ->will($this->returnValue([])); - $this->groupManager - ->expects($this->any()) - ->method('getSubAdmin') - ->will($this->returnValue($subadmin)); - - $controller = $this->getController(true); - $this->mailer - ->expects($this->at(0)) - ->method('validateMailAddress') - ->with('abc@example.org') - ->will($this->returnValue(true)); - $emailTemplate = $this->createMock(IEMailTemplate::class); - $this->newUserMailHelper - ->expects($this->at(0)) - ->method('generateTemplate') - ->with($user, true) - ->willReturn($emailTemplate); - $this->newUserMailHelper - ->expects($this->at(1)) - ->method('sendMail') - ->with($user, $emailTemplate); - - $expectedResponse = new DataResponse( - [ - 'name' => 'foo', - 'groups' => null, - 'storageLocation' => '/home/user', - 'backend' => 'bar', - 'lastLogin' => 0, - 'displayname' => 'John Doe', - 'quota' => null, - 'quota_bytes' => false, - 'subadmin' => array(), - 'email' => 'abc@example.org', - 'isRestoreDisabled' => false, - 'isAvatarAvailable' => true, - 'isEnabled' => true, - ], - Http::STATUS_CREATED - ); - $response = $controller->create('foo', '', array(), 'abc@example.org'); - $this->assertEquals($expectedResponse, $response); - } - - /** - * @param string $account - * @param string $type - * @param array $dataBefore - * @param array $expectedData - * - * @dataProvider dataTestGetVerificationCode - */ - public function testGetVerificationCode($account, $type, $dataBefore, $expectedData, $onlyVerificationCode) { - - $message = 'Use my Federated Cloud ID to share with me: user@nextcloud.com'; - $signature = 'theSignature'; - - $code = $message . ' ' . $signature; - if($type === AccountManager::PROPERTY_TWITTER) { - $code = $message . ' ' . md5($signature); - } - - $controller = $this->getController(false, ['signMessage', 'getCurrentTime']); - - $user = $this->createMock(IUser::class); - $this->userSession->expects($this->once())->method('getUser')->willReturn($user); - $this->accountManager->expects($this->once())->method('getUser')->with($user)->willReturn($dataBefore); - $user->expects($this->any())->method('getCloudId')->willReturn('user@nextcloud.com'); - $user->expects($this->any())->method('getUID')->willReturn('uid'); - $controller->expects($this->once())->method('signMessage')->with($user, $message)->willReturn($signature); - $controller->expects($this->any())->method('getCurrentTime')->willReturn(1234567); - - if ($onlyVerificationCode === false) { - $this->accountManager->expects($this->once())->method('updateUser')->with($user, $expectedData); - $this->jobList->expects($this->once())->method('add') - ->with('OC\Settings\BackgroundJobs\VerifyUserData', - [ - 'verificationCode' => $code, - 'data' => $dataBefore[$type]['value'], - 'type' => $type, - 'uid' => 'uid', - 'try' => 0, - 'lastRun' => 1234567 - ]); - } - - $result = $controller->getVerificationCode($account, $onlyVerificationCode); - - $data = $result->getData(); - $this->assertSame(Http::STATUS_OK, $result->getStatus()); - $this->assertSame($code, $data['code']); - } - - public function dataTestGetVerificationCode() { - - $accountDataBefore = [ - AccountManager::PROPERTY_WEBSITE => ['value' => 'https://nextcloud.com', 'verified' => AccountManager::NOT_VERIFIED], - AccountManager::PROPERTY_TWITTER => ['value' => '@nextclouders', 'verified' => AccountManager::NOT_VERIFIED, 'signature' => 'theSignature'], - ]; - - $accountDataAfterWebsite = [ - AccountManager::PROPERTY_WEBSITE => ['value' => 'https://nextcloud.com', 'verified' => AccountManager::VERIFICATION_IN_PROGRESS, 'signature' => 'theSignature'], - AccountManager::PROPERTY_TWITTER => ['value' => '@nextclouders', 'verified' => AccountManager::NOT_VERIFIED, 'signature' => 'theSignature'], - ]; - - $accountDataAfterTwitter = [ - AccountManager::PROPERTY_WEBSITE => ['value' => 'https://nextcloud.com', 'verified' => AccountManager::NOT_VERIFIED], - AccountManager::PROPERTY_TWITTER => ['value' => '@nextclouders', 'verified' => AccountManager::VERIFICATION_IN_PROGRESS, 'signature' => 'theSignature'], - ]; - - return [ - ['verify-twitter', AccountManager::PROPERTY_TWITTER, $accountDataBefore, $accountDataAfterTwitter, false], - ['verify-website', AccountManager::PROPERTY_WEBSITE, $accountDataBefore, $accountDataAfterWebsite, false], - ['verify-twitter', AccountManager::PROPERTY_TWITTER, $accountDataBefore, $accountDataAfterTwitter, true], - ['verify-website', AccountManager::PROPERTY_WEBSITE, $accountDataBefore, $accountDataAfterWebsite, true], - ]; - } - - /** - * test get verification code in case no valid user was given - */ - public function testGetVerificationCodeInvalidUser() { - - $controller = $this->getController(); - $this->userSession->expects($this->once())->method('getUser')->willReturn(null); - $result = $controller->getVerificationCode('account', false); - - $this->assertSame(Http::STATUS_BAD_REQUEST, $result->getStatus()); - } - - public function testDisableUserFailsDueSameUser() { - $user = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('abc')); - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($user)); - $expectedResponse = new DataResponse( - [ - 'status' => 'error', - 'data' => [ - 'message' => 'Error while disabling user.', - ], - ], - Http::STATUS_FORBIDDEN - ); - $response = $this->getController(true)->setEnabled('abc', false); - $this->assertEquals($expectedResponse, $response); - } - - public function testDisableUserFailsDueNoAdminAndNoSubadmin() { - $user = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('def')); - $this->userSession - ->expects($this->exactly(2)) - ->method('getUser') - ->will($this->returnValue($user)); - $user2 = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user2->expects($this->never()) - ->method('setEnabled'); - $this->userManager - ->expects($this->once()) - ->method('get') - ->with('abc') - ->willReturn($user2); - - $subadmin = $this->createMock(SubAdmin::class); - $subadmin->expects($this->once()) - ->method('isUserAccessible') - ->will($this->returnValue(false)); - $this->groupManager - ->expects($this->once()) - ->method('getSubAdmin') - ->willReturn($subadmin); - - $expectedResponse = new DataResponse( - [ - 'status' => 'error', - 'data' => [ - 'message' => 'Authentication error', - ], - ], - Http::STATUS_FORBIDDEN - ); - $response = $this->getController(false)->setEnabled('abc', false); - $this->assertEquals($expectedResponse, $response); - } - - public function testDisableUserFailsDueNoUser() { - $user = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('def')); - $this->userSession - ->expects($this->exactly(1)) - ->method('getUser') - ->will($this->returnValue($user)); - $this->userManager - ->expects($this->once()) - ->method('get') - ->with('abc') - ->willReturn(null); - - $this->groupManager - ->expects($this->never()) - ->method('getSubAdmin'); - - $expectedResponse = new DataResponse( - [ - 'status' => 'error', - 'data' => [ - 'message' => 'Error while disabling user.', - ], - ], - Http::STATUS_FORBIDDEN - ); - $response = $this->getController(true)->setEnabled('abc', false); - $this->assertEquals($expectedResponse, $response); - } - - public function testDisableUserFailsDueNoUserForSubAdmin() { - $user = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('def')); - $this->userSession - ->expects($this->exactly(1)) - ->method('getUser') - ->will($this->returnValue($user)); - $this->userManager - ->expects($this->once()) - ->method('get') - ->with('abc') - ->willReturn(null); - - $this->groupManager - ->expects($this->never()) - ->method('getSubAdmin'); - - $expectedResponse = new DataResponse( - [ - 'status' => 'error', - 'data' => [ - 'message' => 'Error while disabling user.', - ], - ], - Http::STATUS_FORBIDDEN - ); - $response = $this->getController(false)->setEnabled('abc', false); - $this->assertEquals($expectedResponse, $response); - } - - public function testDisableUserSuccessForAdmin() { - $user = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('def')); - $this->userSession - ->expects($this->exactly(1)) - ->method('getUser') - ->will($this->returnValue($user)); - $user2 = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user2->expects($this->once()) - ->method('setEnabled') - ->with(false); - $this->userManager - ->expects($this->once()) - ->method('get') - ->with('abc') - ->willReturn($user2); - - $this->groupManager - ->expects($this->never()) - ->method('getSubAdmin'); - - $expectedResponse = new DataResponse( - [ - 'status' => 'success', - 'data' => [ - 'username' => 'abc', - 'enabled' => 0, - ], - ] - ); - $response = $this->getController(true)->setEnabled('abc', false); - $this->assertEquals($expectedResponse, $response); - } - - public function testDisableUserSuccessForSubAdmin() { - $user = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('def')); - $this->userSession - ->expects($this->exactly(2)) - ->method('getUser') - ->will($this->returnValue($user)); - $user2 = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user2->expects($this->once()) - ->method('setEnabled'); - $this->userManager - ->expects($this->once()) - ->method('get') - ->with('abc') - ->willReturn($user2); - - $subadmin = $this->createMock(SubAdmin::class); - $subadmin->expects($this->once()) - ->method('isUserAccessible') - ->will($this->returnValue(true)); - $this->groupManager - ->expects($this->once()) - ->method('getSubAdmin') - ->willReturn($subadmin); - - $expectedResponse = new DataResponse( - [ - 'status' => 'success', - 'data' => [ - 'username' => 'abc', - 'enabled' => 0, - ], - ] - ); - $response = $this->getController(false)->setEnabled('abc', false); - $this->assertEquals($expectedResponse, $response); - } - - public function testEnableUserFailsDueSameUser() { - $user = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('abc')); - $this->userSession - ->expects($this->once()) - ->method('getUser') - ->will($this->returnValue($user)); - $expectedResponse = new DataResponse( - [ - 'status' => 'error', - 'data' => [ - 'message' => 'Error while enabling user.', - ], - ], - Http::STATUS_FORBIDDEN - ); - $response = $this->getController(true)->setEnabled('abc', true); - $this->assertEquals($expectedResponse, $response); - } - - public function testEnableUserFailsDueNoAdminAndNoSubadmin() { - $user = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('def')); - $this->userSession - ->expects($this->exactly(2)) - ->method('getUser') - ->will($this->returnValue($user)); - $user2 = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user2->expects($this->never()) - ->method('setEnabled'); - $this->userManager - ->expects($this->once()) - ->method('get') - ->with('abc') - ->willReturn($user2); - - $subadmin = $this->createMock(SubAdmin::class); - $subadmin->expects($this->once()) - ->method('isUserAccessible') - ->will($this->returnValue(false)); - $this->groupManager - ->expects($this->once()) - ->method('getSubAdmin') - ->willReturn($subadmin); - - $expectedResponse = new DataResponse( - [ - 'status' => 'error', - 'data' => [ - 'message' => 'Authentication error', - ], - ], - Http::STATUS_FORBIDDEN - ); - $response = $this->getController(false)->setEnabled('abc', true); - $this->assertEquals($expectedResponse, $response); - } - - public function testEnableUserFailsDueNoUser() { - $user = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('def')); - $this->userSession - ->expects($this->exactly(1)) - ->method('getUser') - ->will($this->returnValue($user)); - $this->userManager - ->expects($this->once()) - ->method('get') - ->with('abc') - ->willReturn(null); - - $this->groupManager - ->expects($this->never()) - ->method('getSubAdmin'); - - $expectedResponse = new DataResponse( - [ - 'status' => 'error', - 'data' => [ - 'message' => 'Error while enabling user.', - ], - ], - Http::STATUS_FORBIDDEN - ); - $response = $this->getController(true)->setEnabled('abc', true); - $this->assertEquals($expectedResponse, $response); - } - - public function testEnableUserFailsDueNoUserForSubAdmin() { - $user = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('def')); - $this->userSession - ->expects($this->exactly(1)) - ->method('getUser') - ->will($this->returnValue($user)); - $this->userManager - ->expects($this->once()) - ->method('get') - ->with('abc') - ->willReturn(null); - - $this->groupManager - ->expects($this->never()) - ->method('getSubAdmin'); - - $expectedResponse = new DataResponse( - [ - 'status' => 'error', - 'data' => [ - 'message' => 'Error while enabling user.', - ], - ], - Http::STATUS_FORBIDDEN - ); - $response = $this->getController(false)->setEnabled('abc', true); - $this->assertEquals($expectedResponse, $response); - } - - public function testEnableUserSuccessForAdmin() { - $user = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('def')); - $this->userSession - ->expects($this->exactly(1)) - ->method('getUser') - ->will($this->returnValue($user)); - $user2 = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user2->expects($this->once()) - ->method('setEnabled'); - $this->userManager - ->expects($this->once()) - ->method('get') - ->with('abc') - ->willReturn($user2); - - $this->groupManager - ->expects($this->never()) - ->method('getSubAdmin'); - - $expectedResponse = new DataResponse( - [ - 'status' => 'success', - 'data' => [ - 'username' => 'abc', - 'enabled' => 1, - ], - ] - ); - $response = $this->getController(true)->setEnabled('abc', true); - $this->assertEquals($expectedResponse, $response); - } - - public function testEnableUserSuccessForSubAdmin() { - $user = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user->expects($this->once()) - ->method('getUID') - ->will($this->returnValue('def')); - $this->userSession - ->expects($this->exactly(2)) - ->method('getUser') - ->will($this->returnValue($user)); - $user2 = $this->getMockBuilder(User::class) - ->disableOriginalConstructor()->getMock(); - $user2->expects($this->once()) - ->method('setEnabled') - ->with(true); - $this->userManager - ->expects($this->once()) - ->method('get') - ->with('abc') - ->willReturn($user2); - - $subadmin = $this->createMock(SubAdmin::class); - $subadmin->expects($this->once()) - ->method('isUserAccessible') - ->will($this->returnValue(true)); - $this->groupManager - ->expects($this->once()) - ->method('getSubAdmin') - ->willReturn($subadmin); - - $expectedResponse = new DataResponse( - [ - 'status' => 'success', - 'data' => [ - 'username' => 'abc', - 'enabled' => 1, - ], - ] - ); - $response = $this->getController(false)->setEnabled('abc', true); - $this->assertEquals($expectedResponse, $response); - } -} |