Merge pull request #3272 from nextcloud/fix_user_controller

make sure that 'getCurrentUser' gets an array in order to manipulate the data to match the old API
This commit is contained in:
Lukas Reschke 2017-01-26 18:37:36 +01:00 committed by GitHub
commit dd0d469833
2 changed files with 83 additions and 36 deletions

View File

@ -194,6 +194,42 @@ class UsersController extends OCSController {
* @throws OCSException * @throws OCSException
*/ */
public function getUser($userId) { public function getUser($userId) {
$data = $this->getUserData($userId);
return new DataResponse($data);
}
/**
* @NoAdminRequired
* @NoSubAdminRequired
*
* gets user info from the currently logged in user
*
* @return DataResponse
* @throws OCSException
*/
public function getCurrentUser() {
$user = $this->userSession->getUser();
if ($user) {
$data = $this->getUserData($user->getUID());
// rename "displayname" to "display-name" only for this call to keep
// the API stable.
$data['display-name'] = $data['displayname'];
unset($data['displayname']);
return new DataResponse($data);
}
throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED);
}
/**
* creates a array with all user data
*
* @param $userId
* @return array
* @throws OCSException
*/
protected function getUserData($userId) {
$currentLoggedInUser = $this->userSession->getUser(); $currentLoggedInUser = $this->userSession->getUser();
$data = []; $data = [];
@ -227,31 +263,7 @@ class UsersController extends OCSController {
$data['webpage'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_WEBSITE]['value']; $data['webpage'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_WEBSITE]['value'];
$data['twitter'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_TWITTER]['value']; $data['twitter'] = $userAccount[\OC\Accounts\AccountManager::PROPERTY_TWITTER]['value'];
return new DataResponse($data); return $data;
}
/**
* @NoAdminRequired
* @NoSubAdminRequired
*
* gets user info from the currently logged in user
*
* @return DataResponse
* @throws OCSException
*/
public function getCurrentUser() {
$user = $this->userSession->getUser();
if ($user) {
$result = $this->getUser($user->getUID());
// rename "displayname" to "display-name" only for this call to keep
// the API stable.
$result['display-name'] = $result['displayname'];
unset($result['displayname']);
return $result;
}
throw new OCSException('', \OCP\API::RESPOND_UNAUTHORISED);
} }
/** /**

View File

@ -634,7 +634,7 @@ class UsersControllerTest extends OriginalTest {
$this->api->getUser('UserToGet'); $this->api->getUser('UserToGet');
} }
public function testGetUserAsAdmin() { public function testGetUserDataAsAdmin() {
$loggedInUser = $this->getMockBuilder('OCP\IUser') $loggedInUser = $this->getMockBuilder('OCP\IUser')
->disableOriginalConstructor() ->disableOriginalConstructor()
->getMock(); ->getMock();
@ -702,10 +702,10 @@ class UsersControllerTest extends OriginalTest {
'webpage' => 'website', 'webpage' => 'website',
'twitter' => 'twitter' 'twitter' => 'twitter'
]; ];
$this->assertEquals($expected, $this->api->getUser('UserToGet')->getData()); $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UserToGet']));
} }
public function testGetUserAsSubAdminAndUserIsAccessible() { public function testGetUserDataAsSubAdminAndUserIsAccessible() {
$loggedInUser = $this->getMockBuilder('OCP\IUser') $loggedInUser = $this->getMockBuilder('OCP\IUser')
->disableOriginalConstructor() ->disableOriginalConstructor()
->getMock(); ->getMock();
@ -786,7 +786,7 @@ class UsersControllerTest extends OriginalTest {
'webpage' => 'website', 'webpage' => 'website',
'twitter' => 'twitter' 'twitter' => 'twitter'
]; ];
$this->assertEquals($expected, $this->api->getUser('UserToGet')->getData()); $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UserToGet']));
} }
@ -794,7 +794,7 @@ class UsersControllerTest extends OriginalTest {
* @expectedException \OCP\AppFramework\OCS\OCSException * @expectedException \OCP\AppFramework\OCS\OCSException
* @expectedExceptionCode 997 * @expectedExceptionCode 997
*/ */
public function testGetUserAsSubAdminAndUserIsNotAccessible() { public function testGetUserDataAsSubAdminAndUserIsNotAccessible() {
$loggedInUser = $this->getMockBuilder('OCP\IUser') $loggedInUser = $this->getMockBuilder('OCP\IUser')
->disableOriginalConstructor() ->disableOriginalConstructor()
->getMock(); ->getMock();
@ -832,10 +832,10 @@ class UsersControllerTest extends OriginalTest {
->method('getSubAdmin') ->method('getSubAdmin')
->will($this->returnValue($subAdminManager)); ->will($this->returnValue($subAdminManager));
$this->api->getUser('UserToGet'); $this->invokePrivate($this->api, 'getUserData', ['UserToGet']);
} }
public function testGetUserAsSubAdminSelfLookup() { public function testGetUserDataAsSubAdminSelfLookup() {
$loggedInUser = $this->getMockBuilder('OCP\IUser') $loggedInUser = $this->getMockBuilder('OCP\IUser')
->disableOriginalConstructor() ->disableOriginalConstructor()
->getMock(); ->getMock();
@ -910,7 +910,7 @@ class UsersControllerTest extends OriginalTest {
'webpage' => 'website', 'webpage' => 'website',
'twitter' => 'twitter' 'twitter' => 'twitter'
]; ];
$this->assertEquals($expected, $this->api->getUser('subadmin')->getData()); $this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['subadmin']));
} }
public function testEditUserRegularUserSelfEditChangeDisplayName() { public function testEditUserRegularUserSelfEditChangeDisplayName() {
@ -2573,10 +2573,10 @@ class UsersControllerTest extends OriginalTest {
$this->accountManager, $this->accountManager,
$this->logger, $this->logger,
]) ])
->setMethods(['getUser']) ->setMethods(['getUserData'])
->getMock(); ->getMock();
$api->expects($this->once())->method('getUser')->with('UID') $api->expects($this->once())->method('getUserData')->with('UID')
->willReturn( ->willReturn(
[ [
'id' => 'UID', 'id' => 'UID',
@ -2603,7 +2603,7 @@ class UsersControllerTest extends OriginalTest {
'display-name' => 'Demo User' 'display-name' => 'Demo User'
]; ];
$this->assertSame($expected, $api->getCurrentUser()); $this->assertSame($expected, $api->getCurrentUser()->getData());
} }
/** /**
@ -2618,4 +2618,39 @@ class UsersControllerTest extends OriginalTest {
} }
public function testGetUser() {
/** @var UsersController | PHPUnit_Framework_MockObject_MockObject $api */
$api = $this->getMockBuilder('OCA\Provisioning_API\Controller\UsersController')
->setConstructorArgs([
'provisioning_api',
$this->request,
$this->userManager,
$this->config,
$this->groupManager,
$this->userSession,
$this->accountManager,
$this->logger,
])
->setMethods(['getUserData'])
->getMock();
$expected = [
'id' => 'UID',
'enabled' => 'true',
'quota' => ['DummyValue'],
'email' => 'demo@owncloud.org',
'phone' => 'phone',
'address' => 'address',
'webpage' => 'website',
'twitter' => 'twitter',
'displayname' => 'Demo User'
];
$api->expects($this->once())->method('getUserData')
->with('uid')
->willReturn($expected);
$this->assertSame($expected, $api->getUser('uid')->getData());
}
} }