123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973 |
- <?php
- /**
- * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
- * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
- * SPDX-License-Identifier: AGPL-3.0-or-later
- */
- namespace Test\User;
- use OC\AllConfig;
- use OC\Files\Mount\ObjectHomeMountProvider;
- use OC\Hooks\PublicEmitter;
- use OC\User\User;
- use OCP\Comments\ICommentsManager;
- use OCP\EventDispatcher\IEventDispatcher;
- use OCP\Files\Storage\IStorageFactory;
- use OCP\IConfig;
- use OCP\IURLGenerator;
- use OCP\IUser;
- use OCP\Notification\IManager as INotificationManager;
- use OCP\Notification\INotification;
- use OCP\Server;
- use OCP\UserInterface;
- use PHPUnit\Framework\MockObject\MockObject;
- use Test\TestCase;
- /**
- * Class UserTest
- *
- * @group DB
- *
- * @package Test\User
- */
- class UserTest extends TestCase {
- /** @var IEventDispatcher|MockObject */
- protected $dispatcher;
- protected function setUp(): void {
- parent::setUp();
- $this->dispatcher = Server::get(IEventDispatcher::class);
- }
- public function testDisplayName(): void {
- /**
- * @var \OC\User\Backend | MockObject $backend
- */
- $backend = $this->createMock(\OC\User\Backend::class);
- $backend->expects($this->once())
- ->method('getDisplayName')
- ->with($this->equalTo('foo'))
- ->willReturn('Foo');
- $backend->expects($this->any())
- ->method('implementsActions')
- ->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
- ->willReturn(true);
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertEquals('Foo', $user->getDisplayName());
- }
- /**
- * if the display name contain whitespaces only, we expect the uid as result
- */
- public function testDisplayNameEmpty(): void {
- /**
- * @var \OC\User\Backend | MockObject $backend
- */
- $backend = $this->createMock(\OC\User\Backend::class);
- $backend->expects($this->once())
- ->method('getDisplayName')
- ->with($this->equalTo('foo'))
- ->willReturn(' ');
- $backend->expects($this->any())
- ->method('implementsActions')
- ->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
- ->willReturn(true);
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertEquals('foo', $user->getDisplayName());
- }
- public function testDisplayNameNotSupported(): void {
- /**
- * @var \OC\User\Backend | 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))
- ->willReturn(false);
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertEquals('foo', $user->getDisplayName());
- }
- public function testSetPassword(): void {
- /**
- * @var Backend | 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')
- ->willReturnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::SET_PASSWORD) {
- return true;
- } else {
- return false;
- }
- });
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertTrue($user->setPassword('bar', ''));
- }
- public function testSetPasswordNotSupported(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->never())
- ->method('setPassword');
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturn(false);
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertFalse($user->setPassword('bar', ''));
- }
- public function testChangeAvatarSupportedYes(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(AvatarUserDummy::class);
- $backend->expects($this->once())
- ->method('canChangeAvatar')
- ->with($this->equalTo('foo'))
- ->willReturn(true);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::PROVIDE_AVATAR) {
- return true;
- } else {
- return false;
- }
- });
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertTrue($user->canChangeAvatar());
- }
- public function testChangeAvatarSupportedNo(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(AvatarUserDummy::class);
- $backend->expects($this->once())
- ->method('canChangeAvatar')
- ->with($this->equalTo('foo'))
- ->willReturn(false);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::PROVIDE_AVATAR) {
- return true;
- } else {
- return false;
- }
- });
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertFalse($user->canChangeAvatar());
- }
- public function testChangeAvatarNotSupported(): void {
- /**
- * @var Backend | 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->dispatcher);
- $this->assertTrue($user->canChangeAvatar());
- }
- public function testDelete(): void {
- /**
- * @var Backend | 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->dispatcher);
- $this->assertTrue($user->delete());
- }
- public function testDeleteWithDifferentHome(): void {
- /** @var ObjectHomeMountProvider $homeProvider */
- $homeProvider = \OC::$server->get(ObjectHomeMountProvider::class);
- $user = $this->createMock(IUser::class);
- $user->method('getUID')
- ->willReturn('foo');
- if ($homeProvider->getHomeMountForUser($user, $this->createMock(IStorageFactory::class)) !== null) {
- $this->markTestSkipped('Skipping test for non local home storage');
- }
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->once())
- ->method('implementsActions')
- ->willReturnCallback(function ($actions) {
- if ($actions === \OC\User\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->once())
- ->method('getHome')
- ->with($this->equalTo('foo'))
- ->willReturn('/home/foo');
- $backend->expects($this->once())
- ->method('deleteUser')
- ->with($this->equalTo('foo'));
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertTrue($user->delete());
- }
- public function testGetHome(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->once())
- ->method('getHome')
- ->with($this->equalTo('foo'))
- ->willReturn('/home/foo');
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::GET_HOME) {
- return true;
- } else {
- return false;
- }
- });
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertEquals('/home/foo', $user->getHome());
- }
- public function testGetBackendClassName(): void {
- $user = new User('foo', new \Test\Util\User\Dummy(), $this->dispatcher);
- $this->assertEquals('Dummy', $user->getBackendClassName());
- $user = new User('foo', new \OC\User\Database(), $this->dispatcher);
- $this->assertEquals('Database', $user->getBackendClassName());
- }
- public function testGetHomeNotSupported(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->never())
- ->method('getHome');
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturn(false);
- $allConfig = $this->getMockBuilder(IConfig::class)
- ->disableOriginalConstructor()
- ->getMock();
- $allConfig->expects($this->any())
- ->method('getUserValue')
- ->willReturn(true);
- $allConfig->expects($this->any())
- ->method('getSystemValueString')
- ->with($this->equalTo('datadirectory'))
- ->willReturn('arbitrary/path');
- $user = new User('foo', $backend, $this->dispatcher, null, $allConfig);
- $this->assertEquals('arbitrary/path/foo', $user->getHome());
- }
- public function testCanChangePassword(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::SET_PASSWORD) {
- return true;
- } else {
- return false;
- }
- });
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertTrue($user->canChangePassword());
- }
- public function testCanChangePasswordNotSupported(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturn(false);
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertFalse($user->canChangePassword());
- }
- public function testCanChangeDisplayName(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::SET_DISPLAYNAME) {
- return true;
- } else {
- return false;
- }
- });
- $config = $this->createMock(IConfig::class);
- $config->method('getSystemValueBool')
- ->with('allow_user_to_change_display_name')
- ->willReturn(true);
- $user = new User('foo', $backend, $this->dispatcher, null, $config);
- $this->assertTrue($user->canChangeDisplayName());
- }
- public function testCanChangeDisplayNameNotSupported(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturn(false);
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertFalse($user->canChangeDisplayName());
- }
- public function testSetDisplayNameSupported(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(\OC\User\Database::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturnCallback(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->createMock(IEventDispatcher::class));
- $this->assertTrue($user->setDisplayName('Foo'));
- $this->assertEquals('Foo', $user->getDisplayName());
- }
- /**
- * don't allow display names containing whitespaces only
- */
- public function testSetDisplayNameEmpty(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(\OC\User\Database::class);
- $backend->expects($this->any())
- ->method('implementsActions')
- ->willReturnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::SET_DISPLAYNAME) {
- return true;
- } else {
- return false;
- }
- });
- $user = new User('foo', $backend, $this->dispatcher);
- $this->assertFalse($user->setDisplayName(' '));
- $this->assertEquals('foo', $user->getDisplayName());
- }
- public function testSetDisplayNameNotSupported(): void {
- /**
- * @var Backend | 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->dispatcher);
- $this->assertFalse($user->setDisplayName('Foo'));
- $this->assertEquals('foo', $user->getDisplayName());
- }
- public function testSetPasswordHooks(): void {
- $hooksCalled = 0;
- $test = $this;
- /**
- * @var Backend | 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')
- ->willReturnCallback(function ($actions) {
- if ($actions === \OC\User\Backend::SET_PASSWORD) {
- return true;
- } else {
- return false;
- }
- });
- $user = new User('foo', $backend, $this->dispatcher, $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): void {
- $hooksCalled = 0;
- $test = $this;
- /**
- * @var Backend | 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, $this->dispatcher, $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);
- $config->method('getSystemValue')
- ->willReturnArgument(1);
- $config->method('getSystemValueString')
- ->willReturnArgument(1);
- $config->method('getSystemValueBool')
- ->willReturnArgument(1);
- $config->method('getSystemValueInt')
- ->willReturnArgument(1);
- 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(\OCP\Notification\IManager::class, $notificationManager);
- $this->overwriteService(\OCP\Comments\ICommentsManager::class, $commentsManager);
- $this->overwriteService(AllConfig::class, $config);
- $this->assertSame($result, $user->delete());
- $this->restoreService(AllConfig::class);
- $this->restoreService(\OCP\Comments\ICommentsManager::class);
- $this->restoreService(\OCP\Notification\IManager::class);
- $this->assertEquals($expectedHooks, $hooksCalled);
- }
- public function dataGetCloudId(): array {
- return [
- ['https://localhost:8888/nextcloud', 'foo@localhost:8888/nextcloud'],
- ['http://localhost:8888/nextcloud', 'foo@http://localhost:8888/nextcloud'],
- ];
- }
- /**
- * @dataProvider dataGetCloudId
- */
- public function testGetCloudId(string $absoluteUrl, string $cloudId): void {
- /** @var Backend|MockObject $backend */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $urlGenerator = $this->createMock(IURLGenerator::class);
- $urlGenerator->method('getAbsoluteURL')
- ->withAnyParameters()
- ->willReturn($absoluteUrl);
- $user = new User('foo', $backend, $this->dispatcher, null, null, $urlGenerator);
- $this->assertEquals($cloudId, $user->getCloudId());
- }
- public function testSetEMailAddressEmpty(): void {
- /**
- * @var Backend | 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, $this->dispatcher, $emitter, $config);
- $user->setEMailAddress('');
- }
- public function testSetEMailAddress(): void {
- /**
- * @var UserInterface | 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, $this->dispatcher, $emitter, $config);
- $user->setEMailAddress('foo@bar.com');
- }
- public function testSetEMailAddressNoChange(): void {
- /**
- * @var UserInterface | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- /** @var PublicEmitter|MockObject $emitter */
- $emitter = $this->createMock(PublicEmitter::class);
- $emitter->expects($this->never())
- ->method('emit');
- $dispatcher = $this->createMock(IEventDispatcher::class);
- $dispatcher->expects($this->never())
- ->method('dispatch');
- $config = $this->createMock(IConfig::class);
- $config->expects($this->any())
- ->method('getUserValue')
- ->willReturn('foo@bar.com');
- $config->expects($this->any())
- ->method('setUserValue');
- $user = new User('foo', $backend, $dispatcher, $emitter, $config);
- $user->setEMailAddress('foo@bar.com');
- }
- public function testSetQuota(): void {
- /**
- * @var UserInterface | 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('quota', $feature);
- $test->assertEquals('23 TB', $value);
- };
- $emitter = new PublicEmitter();
- $emitter->listen('\OC\User', 'changeUser', $hook);
- $config = $this->createMock(IConfig::class);
- $config->expects($this->once())
- ->method('setUserValue')
- ->with(
- 'foo',
- 'files',
- 'quota',
- '23 TB'
- );
- $user = new User('foo', $backend, $this->dispatcher, $emitter, $config);
- $user->setQuota('23 TB');
- }
- public function testGetDefaultUnlimitedQuota(): void {
- /**
- * @var UserInterface | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- /** @var PublicEmitter|MockObject $emitter */
- $emitter = $this->createMock(PublicEmitter::class);
- $emitter->expects($this->never())
- ->method('emit');
- $config = $this->createMock(IConfig::class);
- $user = new User('foo', $backend, $this->dispatcher, $emitter, $config);
- $userValueMap = [
- ['foo', 'files', 'quota', 'default', 'default'],
- ];
- $appValueMap = [
- ['files', 'default_quota', 'none', 'none'],
- // allow unlimited quota
- ['files', 'allow_unlimited_quota', '1', '1'],
- ];
- $config->method('getUserValue')
- ->will($this->returnValueMap($userValueMap));
- $config->method('getAppValue')
- ->will($this->returnValueMap($appValueMap));
- $quota = $user->getQuota();
- $this->assertEquals('none', $quota);
- }
- public function testGetDefaultUnlimitedQuotaForbidden(): void {
- /**
- * @var UserInterface | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- /** @var PublicEmitter|MockObject $emitter */
- $emitter = $this->createMock(PublicEmitter::class);
- $emitter->expects($this->never())
- ->method('emit');
- $config = $this->createMock(IConfig::class);
- $user = new User('foo', $backend, $this->dispatcher, $emitter, $config);
- $userValueMap = [
- ['foo', 'files', 'quota', 'default', 'default'],
- ];
- $appValueMap = [
- ['files', 'default_quota', 'none', 'none'],
- // do not allow unlimited quota
- ['files', 'allow_unlimited_quota', '1', '0'],
- ['files', 'quota_preset', '1 GB, 5 GB, 10 GB', '1 GB, 5 GB, 10 GB'],
- // expect seeing 1 GB used as fallback value
- ['files', 'default_quota', '1 GB', '1 GB'],
- ];
- $config->method('getUserValue')
- ->will($this->returnValueMap($userValueMap));
- $config->method('getAppValue')
- ->will($this->returnValueMap($appValueMap));
- $quota = $user->getQuota();
- $this->assertEquals('1 GB', $quota);
- }
- public function testSetQuotaAddressNoChange(): void {
- /**
- * @var UserInterface | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- /** @var PublicEmitter|MockObject $emitter */
- $emitter = $this->createMock(PublicEmitter::class);
- $emitter->expects($this->never())
- ->method('emit');
- $config = $this->createMock(IConfig::class);
- $config->expects($this->any())
- ->method('getUserValue')
- ->willReturn('23 TB');
- $config->expects($this->never())
- ->method('setUserValue');
- $user = new User('foo', $backend, $this->dispatcher, $emitter, $config);
- $user->setQuota('23 TB');
- }
- public function testGetLastLogin(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $config = $this->createMock(IConfig::class);
- $config->method('getUserValue')
- ->willReturnCallback(function ($uid, $app, $key, $default) {
- if ($uid === 'foo' && $app === 'login' && $key === 'lastLogin') {
- return 42;
- } else {
- return $default;
- }
- });
- $user = new User('foo', $backend, $this->dispatcher, null, $config);
- $this->assertSame(42, $user->getLastLogin());
- }
- public function testSetEnabled(): void {
- /**
- * @var Backend | 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, $this->dispatcher, null, $config);
- $user->setEnabled(true);
- }
- public function testSetDisabled(): void {
- /**
- * @var Backend | 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 = $this->getMockBuilder(User::class)
- ->setConstructorArgs([
- 'foo',
- $backend,
- $this->dispatcher,
- 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(): void {
- /**
- * @var Backend | 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,
- $this->dispatcher,
- null,
- $config,
- ])
- ->setMethods(['isEnabled', 'triggerChange'])
- ->getMock();
- $user->expects($this->once())
- ->method('isEnabled')
- ->willReturn(false);
- $user->expects($this->never())
- ->method('triggerChange');
- $user->setEnabled(false);
- }
- public function testGetEMailAddress(): void {
- /**
- * @var Backend | MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $config = $this->createMock(IConfig::class);
- $config->method('getUserValue')
- ->willReturnCallback(function ($uid, $app, $key, $default) {
- if ($uid === 'foo' && $app === 'settings' && $key === 'email') {
- return 'foo@bar.com';
- } else {
- return $default;
- }
- });
- $user = new User('foo', $backend, $this->dispatcher, null, $config);
- $this->assertSame('foo@bar.com', $user->getEMailAddress());
- }
- }
|