123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731 |
- <?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;
- use OC\User\User;
- use OCP\Comments\ICommentsManager;
- use OCP\IConfig;
- use OCP\IUser;
- use OCP\Notification\IManager as INotificationManager;
- use OCP\Notification\INotification;
- use Test\TestCase;
- /**
- * Class UserTest
- *
- * @group DB
- *
- * @package Test\User
- */
- class UserTest extends TestCase {
- public function testDisplayName() {
- /**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\OC\User\Backend::class);
- $backend->expects($this->once())
- ->method('getDisplayName')
- ->with($this->equalTo('foo'))
- ->will($this->returnValue('Foo'));
- $backend->expects($this->any())
- ->method('implementsActions')
- ->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
- ->will($this->returnValue(true));
- $user = new User('foo', $backend);
- $this->assertEquals('Foo', $user->getDisplayName());
- }
- /**
- * if the display name contain whitespaces only, we expect the uid as result
- */
- public function testDisplayNameEmpty() {
- /**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\OC\User\Backend::class);
- $backend->expects($this->once())
- ->method('getDisplayName')
- ->with($this->equalTo('foo'))
- ->will($this->returnValue(' '));
- $backend->expects($this->any())
- ->method('implementsActions')
- ->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
- ->will($this->returnValue(true));
- $user = new User('foo', $backend);
- $this->assertEquals('foo', $user->getDisplayName());
- }
- public function testDisplayNameNotSupported() {
- /**
- * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\OC\User\Backend::class);
- $backend->expects($this->never())
- ->method('getDisplayName');
- $backend->expects($this->any())
- ->method('implementsActions')
- ->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
- ->will($this->returnValue(false));
- $user = new User('foo', $backend);
- $this->assertEquals('foo', $user->getDisplayName());
- }
- public function testSetPassword() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->once())
- ->method('setPassword')
- ->with($this->equalTo('foo'), $this->equalTo('bar'));
- $backend->expects($this->any())
- ->method('implementsActions')
- ->will($this->returnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::SET_PASSWORD) {
- return true;
- } else {
- return false;
- }
- }));
- $user = new User('foo', $backend);
- $this->assertTrue($user->setPassword('bar',''));
- }
- public function testSetPasswordNotSupported() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->never())
- ->method('setPassword');
- $backend->expects($this->any())
- ->method('implementsActions')
- ->will($this->returnValue(false));
- $user = new User('foo', $backend);
- $this->assertFalse($user->setPassword('bar',''));
- }
- public function testChangeAvatarSupportedYes() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(AvatarUserDummy::class);
- $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) {
- if ($actions === \OC\User\Backend::PROVIDE_AVATAR) {
- return true;
- } else {
- return false;
- }
- }));
- $user = new User('foo', $backend);
- $this->assertTrue($user->canChangeAvatar());
- }
- public function testChangeAvatarSupportedNo() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(AvatarUserDummy::class);
- $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) {
- if ($actions === \OC\User\Backend::PROVIDE_AVATAR) {
- return true;
- } else {
- return false;
- }
- }));
- $user = new User('foo', $backend);
- $this->assertFalse($user->canChangeAvatar());
- }
- public function testChangeAvatarNotSupported() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(AvatarUserDummy::class);
- $backend->expects($this->never())
- ->method('canChangeAvatar');
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturn(false);
- $user = new User('foo', $backend);
- $this->assertTrue($user->canChangeAvatar());
- }
- public function testDelete() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->once())
- ->method('deleteUser')
- ->with($this->equalTo('foo'));
- $user = new User('foo', $backend);
- $this->assertTrue($user->delete());
- }
- public function testDeleteWithDifferentHome() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(Dummy::class);
- $backend->expects($this->at(0))
- ->method('implementsActions')
- ->will($this->returnCallback(function ($actions) {
- if ($actions === Backend::GET_HOME) {
- 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());
- }
- public function testGetHome() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $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) {
- if ($actions === \OC\User\Backend::GET_HOME) {
- return true;
- } else {
- return false;
- }
- }));
- $user = new User('foo', $backend);
- $this->assertEquals('/home/foo', $user->getHome());
- }
- public function testGetBackendClassName() {
- $user = new User('foo', new \Test\Util\User\Dummy());
- $this->assertEquals('Dummy', $user->getBackendClassName());
- $user = new User('foo', new \OC\User\Database());
- $this->assertEquals('Database', $user->getBackendClassName());
- }
- public function testGetHomeNotSupported() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->never())
- ->method('getHome');
- $backend->expects($this->any())
- ->method('implementsActions')
- ->will($this->returnValue(false));
- $allConfig = $this->getMockBuilder('\OCP\IConfig')
- ->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'));
- $user = new User('foo', $backend, null, $allConfig);
- $this->assertEquals('arbitrary/path/foo', $user->getHome());
- }
- public function testCanChangePassword() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->will($this->returnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::SET_PASSWORD) {
- return true;
- } else {
- return false;
- }
- }));
- $user = new User('foo', $backend);
- $this->assertTrue($user->canChangePassword());
- }
- public function testCanChangePasswordNotSupported() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->will($this->returnValue(false));
- $user = new User('foo', $backend);
- $this->assertFalse($user->canChangePassword());
- }
- public function testCanChangeDisplayName() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->will($this->returnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::SET_DISPLAYNAME) {
- return true;
- } else {
- return false;
- }
- }));
- $user = new User('foo', $backend);
- $this->assertTrue($user->canChangeDisplayName());
- }
- public function testCanChangeDisplayNameNotSupported() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->will($this->returnValue(false));
- $user = new User('foo', $backend);
- $this->assertFalse($user->canChangeDisplayName());
- }
- public function testSetDisplayNameSupported() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\OC\User\Database::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->will($this->returnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::SET_DISPLAYNAME) {
- return true;
- } else {
- return false;
- }
- }));
- $backend->expects($this->once())
- ->method('setDisplayName')
- ->with('foo','Foo')
- ->willReturn(true);
- $user = new User('foo', $backend);
- $this->assertTrue($user->setDisplayName('Foo'));
- $this->assertEquals('Foo',$user->getDisplayName());
- }
- /**
- * don't allow display names containing whitespaces only
- */
- public function testSetDisplayNameEmpty() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\OC\User\Database::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->will($this->returnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::SET_DISPLAYNAME) {
- return true;
- } else {
- return false;
- }
- }));
- $user = new User('foo', $backend);
- $this->assertFalse($user->setDisplayName(' '));
- $this->assertEquals('foo',$user->getDisplayName());
- }
- public function testSetDisplayNameNotSupported() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\OC\User\Database::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturn(false);
- $backend->expects($this->never())
- ->method('setDisplayName');
- $user = new User('foo', $backend);
- $this->assertFalse($user->setDisplayName('Foo'));
- $this->assertEquals('foo',$user->getDisplayName());
- }
- public function testSetPasswordHooks() {
- $hooksCalled = 0;
- $test = $this;
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->once())
- ->method('setPassword');
- /**
- * @param User $user
- * @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) {
- if ($actions === \OC\User\Backend::SET_PASSWORD) {
- return true;
- } else {
- return false;
- }
- }));
- $user = new User('foo', $backend, $emitter);
- $user->setPassword('bar','');
- $this->assertEquals(2, $hooksCalled);
- }
- public function dataDeleteHooks() {
- return [
- [true, 2],
- [false, 1],
- ];
- }
- /**
- * @dataProvider dataDeleteHooks
- * @param bool $result
- * @param int $expectedHooks
- */
- public function testDeleteHooks($result, $expectedHooks) {
- $hooksCalled = 0;
- $test = $this;
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->once())
- ->method('deleteUser')
- ->willReturn($result);
- $emitter = new PublicEmitter();
- $user = new User('foo', $backend, $emitter);
- /**
- * @param User $user
- */
- $hook = function ($user) use ($test, &$hooksCalled) {
- $hooksCalled++;
- $test->assertEquals('foo', $user->getUID());
- };
- $emitter->listen('\OC\User', 'preDelete', $hook);
- $emitter->listen('\OC\User', 'postDelete', $hook);
- $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');
- $this->assertEquals($expectedHooks, $hooksCalled);
- }
- public function testGetCloudId() {
- /**
- * @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $urlGenerator = $this->getMockBuilder('\OC\URLGenerator')
- ->setMethods(['getAbsoluteURL'])
- ->disableOriginalConstructor()->getMock();
- $urlGenerator
- ->expects($this->any())
- ->method('getAbsoluteURL')
- ->withAnyParameters()
- ->willReturn('http://localhost:8888/owncloud');
- $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'
- );
- $user = new User('foo', $backend, null, $config);
- $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());
- }
- }
|