1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027 |
- <?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\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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /** @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() {
- /**
- * @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() {
- $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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- $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) {
- $hooksCalled = 0;
- $test = $this;
- /**
- * @var UserInterface&MockObject $backend
- */
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->once())
- ->method('deleteUser')
- ->willReturn($result);
- $config = $this->createMock(IConfig::class);
- $config->method('getSystemValue')
- ->willReturnArgument(1);
- $config->method('getSystemValueString')
- ->willReturnArgument(1);
- $config->method('getSystemValueBool')
- ->willReturnArgument(1);
- $config->method('getSystemValueInt')
- ->willReturnArgument(1);
- $emitter = new PublicEmitter();
- $user = new User('foo', $backend, $this->dispatcher, $emitter, $config);
- /**
- * @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);
- $commentsManager = $this->createMock(ICommentsManager::class);
- $notificationManager = $this->createMock(INotificationManager::class);
- if ($result) {
- $config->expects($this->atLeastOnce())
- ->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->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 testDeleteRecoverState() {
- $backend = $this->createMock(\Test\Util\User\Dummy::class);
- $backend->expects($this->once())
- ->method('deleteUser')
- ->willReturn(true);
- $config = $this->createMock(IConfig::class);
- $config->method('getSystemValue')
- ->willReturnArgument(1);
- $config->method('getSystemValueString')
- ->willReturnArgument(1);
- $config->method('getSystemValueBool')
- ->willReturnArgument(1);
- $config->method('getSystemValueInt')
- ->willReturnArgument(1);
- $userConfig = [];
- $config->expects(self::atLeast(2))
- ->method('setUserValue')
- ->willReturnCallback(function () {
- $userConfig[] = func_get_args();
- });
- $commentsManager = $this->createMock(ICommentsManager::class);
- $commentsManager->expects($this->once())
- ->method('deleteReferencesOfActor')
- ->willThrowException(new \Error('Test exception'));
- $this->overwriteService(\OCP\Comments\ICommentsManager::class, $commentsManager);
- $this->expectException(\Error::class);
- $user = $this->getMockBuilder(User::class)
- ->onlyMethods(['getHome'])
- ->setConstructorArgs(['foo', $backend, $this->dispatcher, null, $config])
- ->getMock();
-
- $user->expects(self::atLeastOnce())
- ->method('getHome')
- ->willReturn('/home/path');
- $user->delete();
- $this->assertEqualsCanonicalizing(
- [
- ['foo', 'core', 'deleted', 'true', null],
- ['foo', 'core', 'deleted.backup-home', '/home/path', null],
- ],
- $userConfig,
- );
- $this->restoreService(\OCP\Comments\ICommentsManager::class);
- }
- 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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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() {
- /**
- * @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());
- }
- }
|