2013-05-29 01:46:57 +04:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
|
|
|
|
* This file is licensed under the Affero General Public License version 3 or
|
|
|
|
* later.
|
|
|
|
* See the COPYING-README file.
|
|
|
|
*/
|
|
|
|
|
|
|
|
namespace Test\User;
|
|
|
|
|
|
|
|
use OC\Hooks\PublicEmitter;
|
2016-12-19 23:24:36 +03:00
|
|
|
use OC\User\User;
|
2016-09-29 16:01:38 +03:00
|
|
|
use OCP\Comments\ICommentsManager;
|
|
|
|
use OCP\IConfig;
|
2016-12-19 23:24:36 +03:00
|
|
|
use OCP\IUser;
|
2016-09-29 16:01:38 +03:00
|
|
|
use OCP\Notification\IManager as INotificationManager;
|
|
|
|
use OCP\Notification\INotification;
|
2016-12-19 23:24:36 +03:00
|
|
|
use Test\TestCase;
|
2013-05-29 01:46:57 +04:00
|
|
|
|
2015-12-01 13:22:09 +03:00
|
|
|
/**
|
2016-05-20 16:38:20 +03:00
|
|
|
* Class UserTest
|
2015-12-01 13:22:09 +03:00
|
|
|
*
|
|
|
|
* @group DB
|
|
|
|
*
|
|
|
|
* @package Test\User
|
|
|
|
*/
|
2016-12-19 23:24:36 +03:00
|
|
|
class UserTest extends TestCase {
|
2013-05-29 01:46:57 +04:00
|
|
|
public function testDisplayName() {
|
|
|
|
/**
|
2016-05-04 10:09:01 +03:00
|
|
|
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\OC\User\Backend::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
$backend->expects($this->once())
|
|
|
|
->method('getDisplayName')
|
|
|
|
->with($this->equalTo('foo'))
|
|
|
|
->will($this->returnValue('Foo'));
|
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
2016-05-04 10:09:01 +03:00
|
|
|
->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
|
2013-05-29 01:46:57 +04:00
|
|
|
->will($this->returnValue(true));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->assertEquals('Foo', $user->getDisplayName());
|
|
|
|
}
|
|
|
|
|
2014-10-15 16:05:18 +04:00
|
|
|
/**
|
|
|
|
* if the display name contain whitespaces only, we expect the uid as result
|
|
|
|
*/
|
|
|
|
public function testDisplayNameEmpty() {
|
|
|
|
/**
|
2016-05-04 10:09:01 +03:00
|
|
|
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2014-10-15 16:05:18 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\OC\User\Backend::class);
|
2014-10-15 16:05:18 +04:00
|
|
|
$backend->expects($this->once())
|
|
|
|
->method('getDisplayName')
|
|
|
|
->with($this->equalTo('foo'))
|
|
|
|
->will($this->returnValue(' '));
|
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
2016-05-04 10:09:01 +03:00
|
|
|
->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
|
2014-10-15 16:05:18 +04:00
|
|
|
->will($this->returnValue(true));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2014-10-15 16:05:18 +04:00
|
|
|
$this->assertEquals('foo', $user->getDisplayName());
|
|
|
|
}
|
|
|
|
|
2013-05-29 01:46:57 +04:00
|
|
|
public function testDisplayNameNotSupported() {
|
|
|
|
/**
|
2016-05-04 10:09:01 +03:00
|
|
|
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\OC\User\Backend::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
$backend->expects($this->never())
|
|
|
|
->method('getDisplayName');
|
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
2016-05-04 10:09:01 +03:00
|
|
|
->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
|
2013-05-29 01:46:57 +04:00
|
|
|
->will($this->returnValue(false));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->assertEquals('foo', $user->getDisplayName());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testSetPassword() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
$backend->expects($this->once())
|
|
|
|
->method('setPassword')
|
|
|
|
->with($this->equalTo('foo'), $this->equalTo('bar'));
|
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnCallback(function ($actions) {
|
2016-05-04 10:09:01 +03:00
|
|
|
if ($actions === \OC\User\Backend::SET_PASSWORD) {
|
2013-05-29 01:46:57 +04:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->assertTrue($user->setPassword('bar',''));
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testSetPasswordNotSupported() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
$backend->expects($this->never())
|
|
|
|
->method('setPassword');
|
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnValue(false));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->assertFalse($user->setPassword('bar',''));
|
|
|
|
}
|
|
|
|
|
2013-11-22 16:24:11 +04:00
|
|
|
public function testChangeAvatarSupportedYes() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-11-22 16:24:11 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(AvatarUserDummy::class);
|
2013-11-22 16:24:11 +04:00
|
|
|
$backend->expects($this->once())
|
|
|
|
->method('canChangeAvatar')
|
|
|
|
->with($this->equalTo('foo'))
|
|
|
|
->will($this->returnValue(true));
|
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnCallback(function ($actions) {
|
2016-05-04 10:09:01 +03:00
|
|
|
if ($actions === \OC\User\Backend::PROVIDE_AVATAR) {
|
2013-11-22 16:24:11 +04:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-11-22 16:24:11 +04:00
|
|
|
$this->assertTrue($user->canChangeAvatar());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testChangeAvatarSupportedNo() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-11-22 16:24:11 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(AvatarUserDummy::class);
|
2013-11-22 16:24:11 +04:00
|
|
|
$backend->expects($this->once())
|
|
|
|
->method('canChangeAvatar')
|
|
|
|
->with($this->equalTo('foo'))
|
|
|
|
->will($this->returnValue(false));
|
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnCallback(function ($actions) {
|
2016-05-04 10:09:01 +03:00
|
|
|
if ($actions === \OC\User\Backend::PROVIDE_AVATAR) {
|
2013-11-22 16:24:11 +04:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-11-22 16:24:11 +04:00
|
|
|
$this->assertFalse($user->canChangeAvatar());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testChangeAvatarNotSupported() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-11-22 16:24:11 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(AvatarUserDummy::class);
|
2013-11-22 16:24:11 +04:00
|
|
|
$backend->expects($this->never())
|
|
|
|
->method('canChangeAvatar');
|
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
2016-09-29 16:01:38 +03:00
|
|
|
->willReturn(false);
|
2013-11-22 16:24:11 +04:00
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-11-22 16:24:11 +04:00
|
|
|
$this->assertTrue($user->canChangeAvatar());
|
|
|
|
}
|
|
|
|
|
2013-05-29 01:46:57 +04:00
|
|
|
public function testDelete() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
$backend->expects($this->once())
|
|
|
|
->method('deleteUser')
|
|
|
|
->with($this->equalTo('foo'));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->assertTrue($user->delete());
|
|
|
|
}
|
|
|
|
|
2016-12-20 18:12:51 +03:00
|
|
|
public function testDeleteWithDifferentHome() {
|
|
|
|
/**
|
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
|
|
|
*/
|
2017-04-20 13:48:51 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2016-12-20 18:12:51 +03:00
|
|
|
|
|
|
|
$backend->expects($this->at(0))
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnCallback(function ($actions) {
|
2017-04-20 13:48:51 +03:00
|
|
|
if ($actions === \OC\User\Backend::GET_HOME) {
|
2016-12-20 18:12:51 +03:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
|
|
|
// important: getHome MUST be called before deleteUser because
|
|
|
|
// once the user is deleted, getHome implementations might not
|
|
|
|
// return anything
|
|
|
|
$backend->expects($this->at(1))
|
|
|
|
->method('getHome')
|
|
|
|
->with($this->equalTo('foo'))
|
|
|
|
->will($this->returnValue('/home/foo'));
|
|
|
|
|
|
|
|
$backend->expects($this->at(2))
|
|
|
|
->method('deleteUser')
|
|
|
|
->with($this->equalTo('foo'));
|
|
|
|
|
|
|
|
$user = new User('foo', $backend);
|
|
|
|
$this->assertTrue($user->delete());
|
|
|
|
}
|
|
|
|
|
2013-05-29 01:46:57 +04:00
|
|
|
public function testGetHome() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
$backend->expects($this->once())
|
|
|
|
->method('getHome')
|
|
|
|
->with($this->equalTo('foo'))
|
|
|
|
->will($this->returnValue('/home/foo'));
|
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnCallback(function ($actions) {
|
2016-05-04 10:09:01 +03:00
|
|
|
if ($actions === \OC\User\Backend::GET_HOME) {
|
2013-05-29 01:46:57 +04:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->assertEquals('/home/foo', $user->getHome());
|
|
|
|
}
|
|
|
|
|
Expose backend type via REST API
This change will expose the user backend via the REST API which is a pre-requisite for https://github.com/owncloud/core/issues/12620.
For example:
````json
[{"name":"9707A09E-CA9A-4ABE-A66A-3F632F16C409","displayname":"Document Conversion User Account","groups":[],"subadmin":[],"quota":"default","storageLocation":"\/Users\/lreschke\/Programming\/core\/data\/9707A09E-CA9A-4ABE-A66A-3F632F16C409","lastLogin":0,"backend":"OCA\\user_ldap\\USER_LDAP"},{"name":"ED86733E-745C-4E4D-90CB-278A9737DB3C","displayname":"Hacker","groups":[],"subadmin":[],"quota":"default","storageLocation":"\/Users\/lreschke\/Programming\/core\/data\/ED86733E-745C-4E4D-90CB-278A9737DB3C","lastLogin":0,"backend":"OCA\\user_ldap\\USER_LDAP"},{"name":"71CDF45B-E125-450D-983C-D9192F36EC88","displayname":"admin","groups":[],"subadmin":[],"quota":"default","storageLocation":"\/Users\/lreschke\/Programming\/core\/data\/71CDF45B-E125-450D-983C-D9192F36EC88","lastLogin":0,"backend":"OCA\\user_ldap\\USER_LDAP"},{"name":"admin","displayname":"admin","groups":["admin"],"subadmin":[],"quota":"default","storageLocation":"\/Users\/lreschke\/Programming\/core\/data\/admin","lastLogin":"1418057287","backend":"OC_User_Database"},{"name":"test","displayname":"test","groups":[],"subadmin":[],"quota":"default","storageLocation":"\/Users\/lreschke\/Programming\/core\/data\/test","lastLogin":0,"backend":"OC_User_Database"}]
```
2014-12-09 00:38:54 +03:00
|
|
|
public function testGetBackendClassName() {
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', new \Test\Util\User\Dummy());
|
2014-12-12 19:25:03 +03:00
|
|
|
$this->assertEquals('Dummy', $user->getBackendClassName());
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', new \OC\User\Database());
|
2014-12-12 19:25:03 +03:00
|
|
|
$this->assertEquals('Database', $user->getBackendClassName());
|
Expose backend type via REST API
This change will expose the user backend via the REST API which is a pre-requisite for https://github.com/owncloud/core/issues/12620.
For example:
````json
[{"name":"9707A09E-CA9A-4ABE-A66A-3F632F16C409","displayname":"Document Conversion User Account","groups":[],"subadmin":[],"quota":"default","storageLocation":"\/Users\/lreschke\/Programming\/core\/data\/9707A09E-CA9A-4ABE-A66A-3F632F16C409","lastLogin":0,"backend":"OCA\\user_ldap\\USER_LDAP"},{"name":"ED86733E-745C-4E4D-90CB-278A9737DB3C","displayname":"Hacker","groups":[],"subadmin":[],"quota":"default","storageLocation":"\/Users\/lreschke\/Programming\/core\/data\/ED86733E-745C-4E4D-90CB-278A9737DB3C","lastLogin":0,"backend":"OCA\\user_ldap\\USER_LDAP"},{"name":"71CDF45B-E125-450D-983C-D9192F36EC88","displayname":"admin","groups":[],"subadmin":[],"quota":"default","storageLocation":"\/Users\/lreschke\/Programming\/core\/data\/71CDF45B-E125-450D-983C-D9192F36EC88","lastLogin":0,"backend":"OCA\\user_ldap\\USER_LDAP"},{"name":"admin","displayname":"admin","groups":["admin"],"subadmin":[],"quota":"default","storageLocation":"\/Users\/lreschke\/Programming\/core\/data\/admin","lastLogin":"1418057287","backend":"OC_User_Database"},{"name":"test","displayname":"test","groups":[],"subadmin":[],"quota":"default","storageLocation":"\/Users\/lreschke\/Programming\/core\/data\/test","lastLogin":0,"backend":"OC_User_Database"}]
```
2014-12-09 00:38:54 +03:00
|
|
|
}
|
|
|
|
|
2013-05-29 01:46:57 +04:00
|
|
|
public function testGetHomeNotSupported() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
$backend->expects($this->never())
|
|
|
|
->method('getHome');
|
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnValue(false));
|
|
|
|
|
2014-11-27 20:19:14 +03:00
|
|
|
$allConfig = $this->getMockBuilder('\OCP\IConfig')
|
2014-11-27 18:40:12 +03:00
|
|
|
->disableOriginalConstructor()
|
|
|
|
->getMock();
|
|
|
|
$allConfig->expects($this->any())
|
|
|
|
->method('getUserValue')
|
|
|
|
->will($this->returnValue(true));
|
|
|
|
$allConfig->expects($this->any())
|
|
|
|
->method('getSystemValue')
|
|
|
|
->with($this->equalTo('datadirectory'))
|
|
|
|
->will($this->returnValue('arbitrary/path'));
|
2013-12-20 16:57:22 +04:00
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend, null, $allConfig);
|
2014-11-27 18:40:12 +03:00
|
|
|
$this->assertEquals('arbitrary/path/foo', $user->getHome());
|
2013-05-29 01:46:57 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
public function testCanChangePassword() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnCallback(function ($actions) {
|
2016-05-04 10:09:01 +03:00
|
|
|
if ($actions === \OC\User\Backend::SET_PASSWORD) {
|
2013-05-29 01:46:57 +04:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->assertTrue($user->canChangePassword());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testCanChangePasswordNotSupported() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnValue(false));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->assertFalse($user->canChangePassword());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testCanChangeDisplayName() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnCallback(function ($actions) {
|
2016-05-04 10:09:01 +03:00
|
|
|
if ($actions === \OC\User\Backend::SET_DISPLAYNAME) {
|
2013-05-29 01:46:57 +04:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->assertTrue($user->canChangeDisplayName());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testCanChangeDisplayNameNotSupported() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnValue(false));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->assertFalse($user->canChangeDisplayName());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testSetDisplayNameSupported() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-12-19 23:24:36 +03:00
|
|
|
$backend = $this->createMock(\OC\User\Database::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnCallback(function ($actions) {
|
2016-05-04 10:09:01 +03:00
|
|
|
if ($actions === \OC\User\Backend::SET_DISPLAYNAME) {
|
2013-05-29 01:46:57 +04:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
|
|
|
$backend->expects($this->once())
|
|
|
|
->method('setDisplayName')
|
2016-01-18 22:27:43 +03:00
|
|
|
->with('foo','Foo')
|
|
|
|
->willReturn(true);
|
2013-05-29 01:46:57 +04:00
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->assertTrue($user->setDisplayName('Foo'));
|
|
|
|
$this->assertEquals('Foo',$user->getDisplayName());
|
|
|
|
}
|
|
|
|
|
2014-10-15 16:05:18 +04:00
|
|
|
/**
|
|
|
|
* don't allow display names containing whitespaces only
|
|
|
|
*/
|
|
|
|
public function testSetDisplayNameEmpty() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2014-10-15 16:05:18 +04:00
|
|
|
*/
|
2016-12-19 23:24:36 +03:00
|
|
|
$backend = $this->createMock(\OC\User\Database::class);
|
2014-10-15 16:05:18 +04:00
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnCallback(function ($actions) {
|
2016-05-04 10:09:01 +03:00
|
|
|
if ($actions === \OC\User\Backend::SET_DISPLAYNAME) {
|
2014-10-15 16:05:18 +04:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2014-10-15 16:05:18 +04:00
|
|
|
$this->assertFalse($user->setDisplayName(' '));
|
|
|
|
$this->assertEquals('foo',$user->getDisplayName());
|
|
|
|
}
|
|
|
|
|
2013-05-29 01:46:57 +04:00
|
|
|
public function testSetDisplayNameNotSupported() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-12-19 23:24:36 +03:00
|
|
|
$backend = $this->createMock(\OC\User\Database::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
2016-09-29 16:01:38 +03:00
|
|
|
->willReturn(false);
|
2013-05-29 01:46:57 +04:00
|
|
|
|
|
|
|
$backend->expects($this->never())
|
|
|
|
->method('setDisplayName');
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend);
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->assertFalse($user->setDisplayName('Foo'));
|
|
|
|
$this->assertEquals('foo',$user->getDisplayName());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testSetPasswordHooks() {
|
|
|
|
$hooksCalled = 0;
|
|
|
|
$test = $this;
|
|
|
|
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
$backend->expects($this->once())
|
|
|
|
->method('setPassword');
|
|
|
|
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @param User $user
|
2013-05-29 01:46:57 +04:00
|
|
|
* @param string $password
|
|
|
|
*/
|
|
|
|
$hook = function ($user, $password) use ($test, &$hooksCalled) {
|
|
|
|
$hooksCalled++;
|
|
|
|
$test->assertEquals('foo', $user->getUID());
|
|
|
|
$test->assertEquals('bar', $password);
|
|
|
|
};
|
|
|
|
|
|
|
|
$emitter = new PublicEmitter();
|
|
|
|
$emitter->listen('\OC\User', 'preSetPassword', $hook);
|
|
|
|
$emitter->listen('\OC\User', 'postSetPassword', $hook);
|
|
|
|
|
|
|
|
$backend->expects($this->any())
|
|
|
|
->method('implementsActions')
|
|
|
|
->will($this->returnCallback(function ($actions) {
|
2016-05-04 10:09:01 +03:00
|
|
|
if ($actions === \OC\User\Backend::SET_PASSWORD) {
|
2013-05-29 01:46:57 +04:00
|
|
|
return true;
|
|
|
|
} else {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend, $emitter);
|
2013-05-29 01:46:57 +04:00
|
|
|
|
|
|
|
$user->setPassword('bar','');
|
|
|
|
$this->assertEquals(2, $hooksCalled);
|
|
|
|
}
|
|
|
|
|
2016-09-29 16:01:38 +03:00
|
|
|
public function dataDeleteHooks() {
|
|
|
|
return [
|
2016-09-29 16:05:47 +03:00
|
|
|
[true, 2],
|
|
|
|
[false, 1],
|
2016-09-29 16:01:38 +03:00
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider dataDeleteHooks
|
|
|
|
* @param bool $result
|
2016-09-29 16:05:47 +03:00
|
|
|
* @param int $expectedHooks
|
2016-09-29 16:01:38 +03:00
|
|
|
*/
|
2016-09-29 16:05:47 +03:00
|
|
|
public function testDeleteHooks($result, $expectedHooks) {
|
2013-05-29 01:46:57 +04:00
|
|
|
$hooksCalled = 0;
|
|
|
|
$test = $this;
|
|
|
|
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2013-05-29 01:46:57 +04:00
|
|
|
$backend->expects($this->once())
|
2016-09-29 16:01:38 +03:00
|
|
|
->method('deleteUser')
|
|
|
|
->willReturn($result);
|
|
|
|
$emitter = new PublicEmitter();
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend, $emitter);
|
2013-05-29 01:46:57 +04:00
|
|
|
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @param User $user
|
2013-05-29 01:46:57 +04:00
|
|
|
*/
|
|
|
|
$hook = function ($user) use ($test, &$hooksCalled) {
|
|
|
|
$hooksCalled++;
|
|
|
|
$test->assertEquals('foo', $user->getUID());
|
|
|
|
};
|
|
|
|
|
|
|
|
$emitter->listen('\OC\User', 'preDelete', $hook);
|
|
|
|
$emitter->listen('\OC\User', 'postDelete', $hook);
|
|
|
|
|
2016-09-29 16:01:38 +03:00
|
|
|
$config = $this->createMock(IConfig::class);
|
|
|
|
$commentsManager = $this->createMock(ICommentsManager::class);
|
|
|
|
$notificationManager = $this->createMock(INotificationManager::class);
|
|
|
|
|
|
|
|
if ($result) {
|
|
|
|
$config->expects($this->once())
|
|
|
|
->method('deleteAllUserValues')
|
|
|
|
->with('foo');
|
|
|
|
|
|
|
|
$commentsManager->expects($this->once())
|
|
|
|
->method('deleteReferencesOfActor')
|
|
|
|
->with('users', 'foo');
|
|
|
|
$commentsManager->expects($this->once())
|
|
|
|
->method('deleteReadMarksFromUser')
|
|
|
|
->with($user);
|
|
|
|
|
|
|
|
$notification = $this->createMock(INotification::class);
|
|
|
|
$notification->expects($this->once())
|
|
|
|
->method('setUser')
|
|
|
|
->with('foo');
|
|
|
|
|
|
|
|
$notificationManager->expects($this->once())
|
|
|
|
->method('createNotification')
|
|
|
|
->willReturn($notification);
|
|
|
|
$notificationManager->expects($this->once())
|
|
|
|
->method('markProcessed')
|
|
|
|
->with($notification);
|
|
|
|
} else {
|
|
|
|
$config->expects($this->never())
|
|
|
|
->method('deleteAllUserValues');
|
|
|
|
|
|
|
|
$commentsManager->expects($this->never())
|
|
|
|
->method('deleteReferencesOfActor');
|
|
|
|
$commentsManager->expects($this->never())
|
|
|
|
->method('deleteReadMarksFromUser');
|
|
|
|
|
|
|
|
$notificationManager->expects($this->never())
|
|
|
|
->method('createNotification');
|
|
|
|
$notificationManager->expects($this->never())
|
|
|
|
->method('markProcessed');
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->overwriteService('NotificationManager', $notificationManager);
|
|
|
|
$this->overwriteService('CommentsManager', $commentsManager);
|
|
|
|
$this->overwriteService('AllConfig', $config);
|
|
|
|
|
|
|
|
$this->assertSame($result, $user->delete());
|
|
|
|
|
|
|
|
$this->restoreService('AllConfig');
|
|
|
|
$this->restoreService('CommentsManager');
|
|
|
|
$this->restoreService('NotificationManager');
|
|
|
|
|
2016-09-29 16:05:47 +03:00
|
|
|
$this->assertEquals($expectedHooks, $hooksCalled);
|
2013-05-29 01:46:57 +04:00
|
|
|
}
|
2015-12-01 13:22:09 +03:00
|
|
|
|
|
|
|
public function testGetCloudId() {
|
|
|
|
/**
|
2016-12-19 23:24:36 +03:00
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
2015-12-01 13:22:09 +03:00
|
|
|
*/
|
2016-09-12 22:53:21 +03:00
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
2015-12-01 13:22:09 +03:00
|
|
|
$urlGenerator = $this->getMockBuilder('\OC\URLGenerator')
|
2015-12-01 16:50:13 +03:00
|
|
|
->setMethods(['getAbsoluteURL'])
|
2015-12-01 13:22:09 +03:00
|
|
|
->disableOriginalConstructor()->getMock();
|
2015-12-01 16:50:13 +03:00
|
|
|
$urlGenerator
|
|
|
|
->expects($this->any())
|
|
|
|
->method('getAbsoluteURL')
|
|
|
|
->withAnyParameters()
|
|
|
|
->willReturn('http://localhost:8888/owncloud');
|
2016-12-19 23:24:36 +03:00
|
|
|
$user = new User('foo', $backend, null, null, $urlGenerator);
|
|
|
|
$this->assertEquals('foo@localhost:8888/owncloud', $user->getCloudId());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testSetEMailAddressEmpty() {
|
|
|
|
/**
|
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
|
|
|
*/
|
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
|
|
|
|
|
|
|
$test = $this;
|
|
|
|
$hooksCalled = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param IUser $user
|
|
|
|
* @param string $feature
|
|
|
|
* @param string $value
|
|
|
|
*/
|
|
|
|
$hook = function (IUser $user, $feature, $value) use ($test, &$hooksCalled) {
|
|
|
|
$hooksCalled++;
|
|
|
|
$test->assertEquals('eMailAddress', $feature);
|
|
|
|
$test->assertEquals('', $value);
|
|
|
|
};
|
|
|
|
|
|
|
|
$emitter = new PublicEmitter();
|
|
|
|
$emitter->listen('\OC\User', 'changeUser', $hook);
|
|
|
|
|
|
|
|
$config = $this->createMock(IConfig::class);
|
|
|
|
$config->expects($this->once())
|
|
|
|
->method('deleteUserValue')
|
|
|
|
->with(
|
|
|
|
'foo',
|
|
|
|
'settings',
|
|
|
|
'email'
|
|
|
|
);
|
|
|
|
|
|
|
|
$user = new User('foo', $backend, $emitter, $config);
|
|
|
|
$user->setEMailAddress('');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testSetEMailAddress() {
|
|
|
|
/**
|
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
|
|
|
*/
|
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
|
|
|
|
|
|
|
$test = $this;
|
|
|
|
$hooksCalled = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @param IUser $user
|
|
|
|
* @param string $feature
|
|
|
|
* @param string $value
|
|
|
|
*/
|
|
|
|
$hook = function (IUser $user, $feature, $value) use ($test, &$hooksCalled) {
|
|
|
|
$hooksCalled++;
|
|
|
|
$test->assertEquals('eMailAddress', $feature);
|
|
|
|
$test->assertEquals('foo@bar.com', $value);
|
|
|
|
};
|
|
|
|
|
|
|
|
$emitter = new PublicEmitter();
|
|
|
|
$emitter->listen('\OC\User', 'changeUser', $hook);
|
|
|
|
|
|
|
|
$config = $this->createMock(IConfig::class);
|
|
|
|
$config->expects($this->once())
|
|
|
|
->method('setUserValue')
|
|
|
|
->with(
|
|
|
|
'foo',
|
|
|
|
'settings',
|
|
|
|
'email',
|
|
|
|
'foo@bar.com'
|
|
|
|
);
|
|
|
|
|
|
|
|
$user = new User('foo', $backend, $emitter, $config);
|
|
|
|
$user->setEMailAddress('foo@bar.com');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testGetLastLogin() {
|
|
|
|
/**
|
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
|
|
|
*/
|
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
|
|
|
|
|
|
|
$config = $this->createMock(IConfig::class);
|
|
|
|
$config->method('getUserValue')
|
|
|
|
->will($this->returnCallback(function ($uid, $app, $key, $default) {
|
|
|
|
if ($uid === 'foo' && $app === 'login' && $key === 'lastLogin') {
|
|
|
|
return 42;
|
|
|
|
} else {
|
|
|
|
return $default;
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
|
|
|
$user = new User('foo', $backend, null, $config);
|
|
|
|
$this->assertSame(42, $user->getLastLogin());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testSetEnabled() {
|
|
|
|
/**
|
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
|
|
|
*/
|
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
|
|
|
|
|
|
|
$config = $this->createMock(IConfig::class);
|
|
|
|
$config->expects($this->once())
|
|
|
|
->method('setUserValue')
|
|
|
|
->with(
|
|
|
|
$this->equalTo('foo'),
|
|
|
|
$this->equalTo('core'),
|
|
|
|
$this->equalTo('enabled'),
|
|
|
|
'true'
|
|
|
|
);
|
|
|
|
|
|
|
|
$user = new User('foo', $backend, null, $config);
|
|
|
|
$user->setEnabled(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testSetDisabled() {
|
|
|
|
/**
|
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
|
|
|
*/
|
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
|
|
|
|
|
|
|
$config = $this->createMock(IConfig::class);
|
|
|
|
$config->expects($this->once())
|
|
|
|
->method('setUserValue')
|
|
|
|
->with(
|
|
|
|
$this->equalTo('foo'),
|
|
|
|
$this->equalTo('core'),
|
|
|
|
$this->equalTo('enabled'),
|
|
|
|
'false'
|
|
|
|
);
|
|
|
|
|
2017-04-25 18:11:57 +03:00
|
|
|
$user = $this->getMockBuilder(User::class)
|
|
|
|
->setConstructorArgs([
|
|
|
|
'foo',
|
|
|
|
$backend,
|
|
|
|
null,
|
|
|
|
$config,
|
|
|
|
])
|
|
|
|
->setMethods(['isEnabled', 'triggerChange'])
|
|
|
|
->getMock();
|
|
|
|
|
|
|
|
$user->expects($this->once())
|
|
|
|
->method('isEnabled')
|
|
|
|
->willReturn(true);
|
|
|
|
$user->expects($this->once())
|
|
|
|
->method('triggerChange')
|
|
|
|
->with(
|
|
|
|
'enabled',
|
|
|
|
'false'
|
|
|
|
);
|
|
|
|
|
|
|
|
$user->setEnabled(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testSetDisabledAlreadyDisabled() {
|
|
|
|
/**
|
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
|
|
|
*/
|
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
|
|
|
|
|
|
|
$config = $this->createMock(IConfig::class);
|
|
|
|
$config->expects($this->never())
|
|
|
|
->method('setUserValue');
|
|
|
|
|
|
|
|
$user = $this->getMockBuilder(User::class)
|
|
|
|
->setConstructorArgs([
|
|
|
|
'foo',
|
|
|
|
$backend,
|
|
|
|
null,
|
|
|
|
$config,
|
|
|
|
])
|
|
|
|
->setMethods(['isEnabled', 'triggerChange'])
|
|
|
|
->getMock();
|
|
|
|
|
|
|
|
$user->expects($this->once())
|
|
|
|
->method('isEnabled')
|
|
|
|
->willReturn(false);
|
|
|
|
$user->expects($this->never())
|
|
|
|
->method('triggerChange');
|
|
|
|
|
2016-12-19 23:24:36 +03:00
|
|
|
$user->setEnabled(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testGetEMailAddress() {
|
|
|
|
/**
|
|
|
|
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
|
|
|
|
*/
|
|
|
|
$backend = $this->createMock(\Test\Util\User\Dummy::class);
|
|
|
|
|
|
|
|
$config = $this->createMock(IConfig::class);
|
|
|
|
$config->method('getUserValue')
|
|
|
|
->will($this->returnCallback(function ($uid, $app, $key, $default) {
|
|
|
|
if ($uid === 'foo' && $app === 'settings' && $key === 'email') {
|
|
|
|
return 'foo@bar.com';
|
|
|
|
} else {
|
|
|
|
return $default;
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
|
|
|
|
$user = new User('foo', $backend, null, $config);
|
|
|
|
$this->assertSame('foo@bar.com', $user->getEMailAddress());
|
2015-12-01 13:22:09 +03:00
|
|
|
}
|
2013-05-29 01:46:57 +04:00
|
|
|
}
|