aboutsummaryrefslogtreecommitdiffstats
path: root/tests/Settings/Controller/UsersControllerTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Settings/Controller/UsersControllerTest.php')
-rw-r--r--tests/Settings/Controller/UsersControllerTest.php562
1 files changed, 0 insertions, 562 deletions
diff --git a/tests/Settings/Controller/UsersControllerTest.php b/tests/Settings/Controller/UsersControllerTest.php
deleted file mode 100644
index 8294514fa50..00000000000
--- a/tests/Settings/Controller/UsersControllerTest.php
+++ /dev/null
@@ -1,562 +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\Encryption\Exceptions\ModuleDoesNotExistsException;
-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\IUser;
-use OCP\IUserManager;
-use OCP\IUserSession;
-use OCP\L10N\IFactory;
-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 IFactory|\PHPUnit_Framework_MockObject_MockObject */
- private $l10nFactory;
- /** @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 IManager | \PHPUnit_Framework_MockObject_MockObject */
- private $encryptionManager;
- /** @var IEncryptionModule | \PHPUnit_Framework_MockObject_MockObject */
- private $encryptionModule;
-
- protected function setUp() {
- parent::setUp();
-
- $this->userManager = $this->createMock(IUserManager::class);
- $this->groupManager = $this->createMock(Manager::class);
- $this->userSession = $this->createMock(IUserSession::class);
- $this->config = $this->createMock(IConfig::class);
- $this->l = $this->createMock(IL10N::class);
- $this->mailer = $this->createMock(IMailer::class);
- $this->l10nFactory = $this->createMock(IFactory::class);
- $this->appManager = $this->createMock(IAppManager::class);
- $this->accountManager = $this->createMock(AccountManager::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->method('t')
- ->will($this->returnCallback(function ($text, $parameters = []) {
- return vsprintf($text, $parameters);
- }));
-
- $this->encryptionModule = $this->createMock(IEncryptionModule::class);
- $this->encryptionManager->expects($this->any())->method('getEncryptionModules')
- ->willReturn(['encryptionModule' => ['callback' => function() { return $this->encryptionModule;}]]);
-
- }
-
- /**
- * @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->mailer,
- $this->l10nFactory,
- $this->appManager,
- $this->accountManager,
- $this->securityManager,
- $this->jobList,
- $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->mailer,
- $this->l10nFactory,
- $this->appManager,
- $this->accountManager,
- $this->securityManager,
- $this->jobList,
- $this->encryptionManager
- ]
- )->setMethods($mockedMethods)->getMock();
- }
- }
-
- /**
- * @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
- ],
-
- ];
- }
-
- /**
- * @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());
- }
-
- /**
- * @dataProvider dataTestCanAdminChangeUserPasswords
- *
- * @param bool $encryptionEnabled
- * @param bool $encryptionModuleLoaded
- * @param bool $masterKeyEnabled
- * @param bool $expected
- */
- public function testCanAdminChangeUserPasswords($encryptionEnabled,
- $encryptionModuleLoaded,
- $masterKeyEnabled,
- $expected) {
- $controller = $this->getController();
-
- $this->encryptionManager->expects($this->any())
- ->method('isEnabled')
- ->willReturn($encryptionEnabled);
- $this->encryptionManager->expects($this->any())
- ->method('getEncryptionModule')
- ->willReturnCallback(function() use ($encryptionModuleLoaded) {
- if ($encryptionModuleLoaded) return $this->encryptionModule;
- else throw new ModuleDoesNotExistsException();
- });
- $this->encryptionModule->expects($this->any())
- ->method('needDetailedAccessList')
- ->willReturn(!$masterKeyEnabled);
-
- $result = $this->invokePrivate($controller, 'canAdminChangeUserPasswords', []);
- $this->assertSame($expected, $result);
- }
-
- public function dataTestCanAdminChangeUserPasswords() {
- return [
- // encryptionEnabled, encryptionModuleLoaded, masterKeyEnabled, expectedResult
- [true, true, true, true],
- [false, true, true, true],
- [true, false, true, false],
- [false, false, true, true],
- [true, true, false, false],
- [false, true, false, false],
- [true, false, false, false],
- [false, false, false, true],
- ];
- }
-
-}