bring back setEmailAddress for the user management
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
This commit is contained in:
parent
3fc75073b8
commit
0de685c562
|
@ -870,7 +870,7 @@ class OC {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function registerAccountHooks() {
|
private static function registerAccountHooks() {
|
||||||
$hookHandler = new \OC\Accounts\Hooks();
|
$hookHandler = new \OC\Accounts\Hooks(\OC::$server->getLogger());
|
||||||
\OCP\Util::connectHook('OC_User', 'changeUser', $hookHandler, 'changeUserHook');
|
\OCP\Util::connectHook('OC_User', 'changeUser', $hookHandler, 'changeUserHook');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@
|
||||||
|
|
||||||
namespace OC\Accounts;
|
namespace OC\Accounts;
|
||||||
|
|
||||||
use OCP\IConfig;
|
|
||||||
use OCP\IDBConnection;
|
use OCP\IDBConnection;
|
||||||
use OCP\IUser;
|
use OCP\IUser;
|
||||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||||
|
@ -63,9 +62,6 @@ class AccountManager {
|
||||||
/** @var EventDispatcherInterface */
|
/** @var EventDispatcherInterface */
|
||||||
private $eventDispatcher;
|
private $eventDispatcher;
|
||||||
|
|
||||||
/** @var IConfig */
|
|
||||||
private $config;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* AccountManager constructor.
|
* AccountManager constructor.
|
||||||
*
|
*
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
namespace OC\Accounts;
|
namespace OC\Accounts;
|
||||||
|
|
||||||
|
use OCP\ILogger;
|
||||||
use OCP\IUser;
|
use OCP\IUser;
|
||||||
|
|
||||||
class Hooks {
|
class Hooks {
|
||||||
|
@ -29,6 +30,18 @@ class Hooks {
|
||||||
/** @var AccountManager */
|
/** @var AccountManager */
|
||||||
private $accountManager = null;
|
private $accountManager = null;
|
||||||
|
|
||||||
|
/** @var ILogger */
|
||||||
|
private $logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Hooks constructor.
|
||||||
|
*
|
||||||
|
* @param ILogger $logger
|
||||||
|
*/
|
||||||
|
public function __construct(ILogger $logger) {
|
||||||
|
$this->logger = $logger;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* update accounts table if email address or display name was changed from outside
|
* update accounts table if email address or display name was changed from outside
|
||||||
*
|
*
|
||||||
|
@ -36,25 +49,31 @@ class Hooks {
|
||||||
*/
|
*/
|
||||||
public function changeUserHook($params) {
|
public function changeUserHook($params) {
|
||||||
|
|
||||||
$this->instantiateAccountManager();
|
$accountManager = $this->getAccountManager();
|
||||||
|
|
||||||
/** @var IUser $user */
|
/** @var IUser $user */
|
||||||
$user = $params['user'];
|
$user = isset($params['user']) ? $params['user'] : null;
|
||||||
$feature = $params['feature'];
|
$feature = isset($params['feature']) ? $params['feature'] : null;
|
||||||
$newValue = $params['value'];
|
$newValue = isset($params['value']) ? $params['value'] : null;
|
||||||
$accountData = $this->accountManager->getUser($user);
|
|
||||||
|
if (is_null($user) || is_null($feature) || is_null($newValue)) {
|
||||||
|
$this->logger->warning('Missing expected parameters in change user hook');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$accountData = $accountManager->getUser($user);
|
||||||
|
|
||||||
switch ($feature) {
|
switch ($feature) {
|
||||||
case 'eMailAddress':
|
case 'eMailAddress':
|
||||||
if ($accountData[AccountManager::PROPERTY_EMAIL]['value'] !== $newValue) {
|
if ($accountData[AccountManager::PROPERTY_EMAIL]['value'] !== $newValue) {
|
||||||
$accountData[AccountManager::PROPERTY_EMAIL]['value'] = $newValue;
|
$accountData[AccountManager::PROPERTY_EMAIL]['value'] = $newValue;
|
||||||
$this->accountManager->updateUser($user, $accountData);
|
$accountManager->updateUser($user, $accountData);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'displayName':
|
case 'displayName':
|
||||||
if ($accountData[AccountManager::PROPERTY_DISPLAYNAME]['value'] !== $newValue) {
|
if ($accountData[AccountManager::PROPERTY_DISPLAYNAME]['value'] !== $newValue) {
|
||||||
$accountData[AccountManager::PROPERTY_DISPLAYNAME]['value'] = $newValue;
|
$accountData[AccountManager::PROPERTY_DISPLAYNAME]['value'] = $newValue;
|
||||||
$this->accountManager->updateUser($user, $accountData);
|
$accountManager->updateUser($user, $accountData);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -66,13 +85,14 @@ class Hooks {
|
||||||
*
|
*
|
||||||
* @return AccountManager
|
* @return AccountManager
|
||||||
*/
|
*/
|
||||||
protected function instantiateAccountManager() {
|
protected function getAccountManager() {
|
||||||
if (is_null($this->accountManager)) {
|
if (is_null($this->accountManager)) {
|
||||||
$this->accountManager = new AccountManager(
|
$this->accountManager = new AccountManager(
|
||||||
\OC::$server->getDatabaseConnection(),
|
\OC::$server->getDatabaseConnection(),
|
||||||
\OC::$server->getEventDispatcher()
|
\OC::$server->getEventDispatcher()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
return $this->accountManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -618,10 +618,12 @@ class UsersController extends Controller {
|
||||||
if (isset($data[AccountManager::PROPERTY_EMAIL]['value'])
|
if (isset($data[AccountManager::PROPERTY_EMAIL]['value'])
|
||||||
&& $oldEmailAddress !== $data[AccountManager::PROPERTY_EMAIL]['value']
|
&& $oldEmailAddress !== $data[AccountManager::PROPERTY_EMAIL]['value']
|
||||||
) {
|
) {
|
||||||
$result = $user->setEMailAddress($data[AccountManager::PROPERTY_EMAIL]['value']);
|
// this is the only permission a backend provides and is also used
|
||||||
if ($result === false) {
|
// for the permission of setting a email address
|
||||||
throw new ForbiddenException($this->l10n->t('Unable to change mail address'));
|
if (!$user->canChangeDisplayName()) {
|
||||||
|
throw new ForbiddenException($this->l10n->t('Unable to change email address'));
|
||||||
}
|
}
|
||||||
|
$user->setEMailAddress($data[AccountManager::PROPERTY_EMAIL]['value']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->accountManager->updateUser($user, $data);
|
$this->accountManager->updateUser($user, $data);
|
||||||
|
@ -722,4 +724,95 @@ class UsersController extends Controller {
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the mail address of a user
|
||||||
|
*
|
||||||
|
* @NoAdminRequired
|
||||||
|
* @NoSubadminRequired
|
||||||
|
* @PasswordConfirmationRequired
|
||||||
|
*
|
||||||
|
* @param string $id
|
||||||
|
* @param string $mailAddress
|
||||||
|
* @return DataResponse
|
||||||
|
*/
|
||||||
|
public function setEMailAddress($id, $mailAddress) {
|
||||||
|
$user = $this->userManager->get($id);
|
||||||
|
if (!$this->isAdmin
|
||||||
|
&& !$this->groupManager->getSubAdmin()->isUserAccessible($this->userSession->getUser(), $user)
|
||||||
|
) {
|
||||||
|
return new DataResponse(
|
||||||
|
array(
|
||||||
|
'status' => 'error',
|
||||||
|
'data' => array(
|
||||||
|
'message' => (string)$this->l10n->t('Forbidden')
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Http::STATUS_FORBIDDEN
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if($mailAddress !== '' && !$this->mailer->validateMailAddress($mailAddress)) {
|
||||||
|
return new DataResponse(
|
||||||
|
array(
|
||||||
|
'status' => 'error',
|
||||||
|
'data' => array(
|
||||||
|
'message' => (string)$this->l10n->t('Invalid mail address')
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Http::STATUS_UNPROCESSABLE_ENTITY
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$user) {
|
||||||
|
return new DataResponse(
|
||||||
|
array(
|
||||||
|
'status' => 'error',
|
||||||
|
'data' => array(
|
||||||
|
'message' => (string)$this->l10n->t('Invalid user')
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Http::STATUS_UNPROCESSABLE_ENTITY
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// this is the only permission a backend provides and is also used
|
||||||
|
// for the permission of setting a email address
|
||||||
|
if (!$user->canChangeDisplayName()) {
|
||||||
|
return new DataResponse(
|
||||||
|
array(
|
||||||
|
'status' => 'error',
|
||||||
|
'data' => array(
|
||||||
|
'message' => (string)$this->l10n->t('Unable to change mail address')
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Http::STATUS_FORBIDDEN
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
$userData = $this->accountManager->getUser($user);
|
||||||
|
$userData[AccountManager::PROPERTY_EMAIL]['value'] = $mailAddress;
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->saveUserSettings($user, $userData);
|
||||||
|
return new DataResponse(
|
||||||
|
array(
|
||||||
|
'status' => 'success',
|
||||||
|
'data' => array(
|
||||||
|
'username' => $id,
|
||||||
|
'mailAddress' => $mailAddress,
|
||||||
|
'message' => (string)$this->l10n->t('Email saved')
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Http::STATUS_OK
|
||||||
|
);
|
||||||
|
} catch (ForbiddenException $e) {
|
||||||
|
return new DataResponse([
|
||||||
|
'status' => 'error',
|
||||||
|
'data' => [
|
||||||
|
'message' => $e->getMessage()
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,6 +51,7 @@ $application->registerRoutes($this, [
|
||||||
['name' => 'AppSettings#listApps', 'url' => '/settings/apps/list', 'verb' => 'GET'],
|
['name' => 'AppSettings#listApps', 'url' => '/settings/apps/list', 'verb' => 'GET'],
|
||||||
['name' => 'SecuritySettings#trustedDomains', 'url' => '/settings/admin/security/trustedDomains', 'verb' => 'POST'],
|
['name' => 'SecuritySettings#trustedDomains', 'url' => '/settings/admin/security/trustedDomains', 'verb' => 'POST'],
|
||||||
['name' => 'Users#setDisplayName', 'url' => '/settings/users/{username}/displayName', 'verb' => 'POST'],
|
['name' => 'Users#setDisplayName', 'url' => '/settings/users/{username}/displayName', 'verb' => 'POST'],
|
||||||
|
['name' => 'Users#setEMailAddress', 'url' => '/settings/users/{id}/mailAddress', 'verb' => 'PUT'],
|
||||||
['name' => 'Users#setUserSettings', 'url' => '/settings/users/{username}/settings', 'verb' => 'PUT'],
|
['name' => 'Users#setUserSettings', 'url' => '/settings/users/{username}/settings', 'verb' => 'PUT'],
|
||||||
['name' => 'Users#stats', 'url' => '/settings/users/stats', 'verb' => 'GET'],
|
['name' => 'Users#stats', 'url' => '/settings/users/stats', 'verb' => 'GET'],
|
||||||
['name' => 'LogSettings#setLogLevel', 'url' => '/settings/admin/log/level', 'verb' => 'POST'],
|
['name' => 'LogSettings#setLogLevel', 'url' => '/settings/admin/log/level', 'verb' => 'POST'],
|
||||||
|
|
|
@ -11,7 +11,6 @@
|
||||||
namespace Tests\Settings\Controller;
|
namespace Tests\Settings\Controller;
|
||||||
|
|
||||||
use OC\Accounts\AccountManager;
|
use OC\Accounts\AccountManager;
|
||||||
use OC\ForbiddenException;
|
|
||||||
use OC\Group\Manager;
|
use OC\Group\Manager;
|
||||||
use OC\Settings\Controller\UsersController;
|
use OC\Settings\Controller\UsersController;
|
||||||
use OCP\App\IAppManager;
|
use OCP\App\IAppManager;
|
||||||
|
@ -2045,7 +2044,7 @@ class UsersControllerTest extends \Test\TestCase {
|
||||||
*/
|
*/
|
||||||
public function testSetUserSettings($email, $validEmail, $expectedStatus) {
|
public function testSetUserSettings($email, $validEmail, $expectedStatus) {
|
||||||
$controller = $this->getController(false, ['saveUserSettings']);
|
$controller = $this->getController(false, ['saveUserSettings']);
|
||||||
$user = $this->getMock(IUser::class);
|
$user = $this->createMock(IUser::class);
|
||||||
|
|
||||||
$this->userSession->method('getUser')->willReturn($user);
|
$this->userSession->method('getUser')->willReturn($user);
|
||||||
|
|
||||||
|
@ -2102,10 +2101,11 @@ class UsersControllerTest extends \Test\TestCase {
|
||||||
$oldDisplayName
|
$oldDisplayName
|
||||||
) {
|
) {
|
||||||
$controller = $this->getController();
|
$controller = $this->getController();
|
||||||
$user = $this->getMock(IUser::class);
|
$user = $this->createMock(IUser::class);
|
||||||
|
|
||||||
$user->method('getDisplayName')->willReturn($oldDisplayName);
|
$user->method('getDisplayName')->willReturn($oldDisplayName);
|
||||||
$user->method('getEMailAddress')->willReturn($oldEmailAddress);
|
$user->method('getEMailAddress')->willReturn($oldEmailAddress);
|
||||||
|
$user->method('canChangeDisplayName')->willReturn(true);
|
||||||
|
|
||||||
if ($data[AccountManager::PROPERTY_EMAIL]['value'] !== $oldEmailAddress) {
|
if ($data[AccountManager::PROPERTY_EMAIL]['value'] !== $oldEmailAddress) {
|
||||||
$user->expects($this->once())->method('setEMailAddress')
|
$user->expects($this->once())->method('setEMailAddress')
|
||||||
|
@ -2174,7 +2174,7 @@ class UsersControllerTest extends \Test\TestCase {
|
||||||
* @param string $oldEmailAddress
|
* @param string $oldEmailAddress
|
||||||
* @param string $oldDisplayName
|
* @param string $oldDisplayName
|
||||||
* @param bool $setDisplayNameResult
|
* @param bool $setDisplayNameResult
|
||||||
* @param bool $setEmailResult
|
* @param bool $canChangeEmail
|
||||||
*
|
*
|
||||||
* @expectedException \OC\ForbiddenException
|
* @expectedException \OC\ForbiddenException
|
||||||
*/
|
*/
|
||||||
|
@ -2182,18 +2182,17 @@ class UsersControllerTest extends \Test\TestCase {
|
||||||
$oldEmailAddress,
|
$oldEmailAddress,
|
||||||
$oldDisplayName,
|
$oldDisplayName,
|
||||||
$setDisplayNameResult,
|
$setDisplayNameResult,
|
||||||
$setEmailResult
|
$canChangeEmail
|
||||||
) {
|
) {
|
||||||
$controller = $this->getController();
|
$controller = $this->getController();
|
||||||
$user = $this->getMock(IUser::class);
|
$user = $this->createMock(IUser::class);
|
||||||
|
|
||||||
$user->method('getDisplayName')->willReturn($oldDisplayName);
|
$user->method('getDisplayName')->willReturn($oldDisplayName);
|
||||||
$user->method('getEMailAddress')->willReturn($oldEmailAddress);
|
$user->method('getEMailAddress')->willReturn($oldEmailAddress);
|
||||||
|
|
||||||
if ($data[AccountManager::PROPERTY_EMAIL]['value'] !== $oldEmailAddress) {
|
if ($data[AccountManager::PROPERTY_EMAIL]['value'] !== $oldEmailAddress) {
|
||||||
$user->method('setEMailAddress')
|
$user->method('canChangeDisplayName')
|
||||||
->with($data[AccountManager::PROPERTY_EMAIL]['value'])
|
->willReturn($canChangeEmail);
|
||||||
->willReturn($setEmailResult);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($data[AccountManager::PROPERTY_DISPLAYNAME]['value'] !== $oldDisplayName) {
|
if ($data[AccountManager::PROPERTY_DISPLAYNAME]['value'] !== $oldDisplayName) {
|
||||||
|
@ -2241,4 +2240,57 @@ class UsersControllerTest extends \Test\TestCase {
|
||||||
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public function testSetEMailAddress($mailAddress, $isValid, $expectsUpdate, $canChangeDisplayName, $responseCode) {
|
||||||
|
$user = $this->getMockBuilder('\OC\User\User')
|
||||||
|
->disableOriginalConstructor()->getMock();
|
||||||
|
$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)
|
||||||
|
);
|
||||||
|
$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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,157 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (c) 2016 Bjoern Schiessle <bjoern@schiessle.org>
|
||||||
|
*
|
||||||
|
* @license GNU AGPL version 3 or any later version
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
namespace Test\Accounts;
|
||||||
|
|
||||||
|
|
||||||
|
use OC\Accounts\AccountManager;
|
||||||
|
use OC\Accounts\Hooks;
|
||||||
|
use OCP\ILogger;
|
||||||
|
use OCP\IUser;
|
||||||
|
use Test\TestCase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class HooksTest
|
||||||
|
*
|
||||||
|
* @package Test\Accounts
|
||||||
|
* @group DB
|
||||||
|
*/
|
||||||
|
class HooksTest extends TestCase {
|
||||||
|
|
||||||
|
/** @var ILogger | \PHPUnit_Framework_MockObject_MockObject */
|
||||||
|
private $logger;
|
||||||
|
|
||||||
|
/** @var AccountManager | \PHPUnit_Framework_MockObject_MockObject */
|
||||||
|
private $accountManager;
|
||||||
|
|
||||||
|
/** @var Hooks | \PHPUnit_Framework_MockObject_MockObject */
|
||||||
|
private $hooks;
|
||||||
|
|
||||||
|
public function setUp() {
|
||||||
|
parent::setUp();
|
||||||
|
|
||||||
|
$this->logger = $this->createMock(ILogger::class);
|
||||||
|
$this->accountManager = $this->getMockBuilder(AccountManager::class)
|
||||||
|
->disableOriginalConstructor()->getMock();
|
||||||
|
|
||||||
|
$this->hooks = $this->getMockBuilder(Hooks::class)
|
||||||
|
->setConstructorArgs([$this->logger])
|
||||||
|
->setMethods(['getAccountManager'])
|
||||||
|
->getMock();
|
||||||
|
|
||||||
|
$this->hooks->method('getAccountManager')->willReturn($this->accountManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider dataTestChangeUserHook
|
||||||
|
*
|
||||||
|
* @param $params
|
||||||
|
* @param $data
|
||||||
|
* @param $setEmail
|
||||||
|
* @param $setDisplayName
|
||||||
|
* @param $error
|
||||||
|
*/
|
||||||
|
public function testChangeUserHook($params, $data, $setEmail, $setDisplayName, $error) {
|
||||||
|
if ($error) {
|
||||||
|
$this->accountManager->expects($this->never())->method('getUser');
|
||||||
|
$this->accountManager->expects($this->never())->method('updateUser');
|
||||||
|
} else {
|
||||||
|
$this->accountManager->expects($this->once())->method('getUser')->willReturn($data);
|
||||||
|
$newData = $data;
|
||||||
|
if ($setEmail) {
|
||||||
|
$newData[AccountManager::PROPERTY_EMAIL]['value'] = $params['value'];
|
||||||
|
$this->accountManager->expects($this->once())->method('updateUser')
|
||||||
|
->with($params['user'], $newData);
|
||||||
|
} elseif ($setDisplayName) {
|
||||||
|
$newData[AccountManager::PROPERTY_DISPLAYNAME]['value'] = $params['value'];
|
||||||
|
$this->accountManager->expects($this->once())->method('updateUser')
|
||||||
|
->with($params['user'], $newData);
|
||||||
|
} else {
|
||||||
|
$this->accountManager->expects($this->never())->method('updateUser');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->hooks->changeUserHook($params);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function dataTestChangeUserHook() {
|
||||||
|
$user = $this->createMock(IUser::class);
|
||||||
|
return [
|
||||||
|
[
|
||||||
|
['feature' => '', 'value' => ''],
|
||||||
|
[
|
||||||
|
AccountManager::PROPERTY_EMAIL => ['value' => ''],
|
||||||
|
AccountManager::PROPERTY_DISPLAYNAME => ['value' => '']
|
||||||
|
],
|
||||||
|
false, false, true
|
||||||
|
],
|
||||||
|
[
|
||||||
|
['user' => $user, 'value' => ''],
|
||||||
|
[
|
||||||
|
AccountManager::PROPERTY_EMAIL => ['value' => ''],
|
||||||
|
AccountManager::PROPERTY_DISPLAYNAME => ['value' => '']
|
||||||
|
],
|
||||||
|
false, false, true
|
||||||
|
],
|
||||||
|
[
|
||||||
|
['user' => $user, 'feature' => ''],
|
||||||
|
[
|
||||||
|
AccountManager::PROPERTY_EMAIL => ['value' => ''],
|
||||||
|
AccountManager::PROPERTY_DISPLAYNAME => ['value' => '']
|
||||||
|
],
|
||||||
|
false, false, true
|
||||||
|
],
|
||||||
|
[
|
||||||
|
['user' => $user, 'feature' => 'foo', 'value' => 'bar'],
|
||||||
|
[
|
||||||
|
AccountManager::PROPERTY_EMAIL => ['value' => 'oldMail@example.com'],
|
||||||
|
AccountManager::PROPERTY_DISPLAYNAME => ['value' => 'oldDisplayName']
|
||||||
|
],
|
||||||
|
false, false, false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
['user' => $user, 'feature' => 'eMailAddress', 'value' => 'newMail@example.com'],
|
||||||
|
[
|
||||||
|
AccountManager::PROPERTY_EMAIL => ['value' => 'oldMail@example.com'],
|
||||||
|
AccountManager::PROPERTY_DISPLAYNAME => ['value' => 'oldDisplayName']
|
||||||
|
],
|
||||||
|
true, false, false
|
||||||
|
],
|
||||||
|
[
|
||||||
|
['user' => $user, 'feature' => 'displayName', 'value' => 'newDisplayName'],
|
||||||
|
[
|
||||||
|
AccountManager::PROPERTY_EMAIL => ['value' => 'oldMail@example.com'],
|
||||||
|
AccountManager::PROPERTY_DISPLAYNAME => ['value' => 'oldDisplayName']
|
||||||
|
],
|
||||||
|
false, true, false
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testGetAccountManager() {
|
||||||
|
$hooks = new Hooks($this->logger);
|
||||||
|
$result = $this->invokePrivate($hooks, 'getAccountManager');
|
||||||
|
$this->assertInstanceOf(AccountManager::class, $result);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue