Browse Source

Merge pull request #2769 from nextcloud/improve_user_user_coverage

Improve OC\User\User coverage
tags/v12.0.0beta1
Morris Jobke 7 years ago
parent
commit
4c315082e1
1 changed files with 204 additions and 49 deletions
  1. 204
    49
      tests/lib/User/UserTest.php

+ 204
- 49
tests/lib/User/UserTest.php View File

namespace Test\User; namespace Test\User;


use OC\Hooks\PublicEmitter; use OC\Hooks\PublicEmitter;
use OC\User\Database;
use OC\User\User;
use OCP\Comments\ICommentsManager; use OCP\Comments\ICommentsManager;
use OCP\IConfig; use OCP\IConfig;
use OCP\IUser;
use OCP\Notification\IManager as INotificationManager; use OCP\Notification\IManager as INotificationManager;
use OCP\Notification\INotification; use OCP\Notification\INotification;
use Test\TestCase;


/** /**
* Class UserTest * Class UserTest
* *
* @package Test\User * @package Test\User
*/ */
class UserTest extends \Test\TestCase {
class UserTest extends TestCase {
public function testDisplayName() { public function testDisplayName() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME)) ->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
->will($this->returnValue(true)); ->will($this->returnValue(true));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertEquals('Foo', $user->getDisplayName()); $this->assertEquals('Foo', $user->getDisplayName());
} }


->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME)) ->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
->will($this->returnValue(true)); ->will($this->returnValue(true));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertEquals('foo', $user->getDisplayName()); $this->assertEquals('foo', $user->getDisplayName());
} }


->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME)) ->with($this->equalTo(\OC\User\Backend::GET_DISPLAYNAME))
->will($this->returnValue(false)); ->will($this->returnValue(false));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertEquals('foo', $user->getDisplayName()); $this->assertEquals('foo', $user->getDisplayName());
} }


public function testSetPassword() { public function testSetPassword() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(\Test\Util\User\Dummy::class); $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once()) $backend->expects($this->once())
} }
})); }));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertTrue($user->setPassword('bar','')); $this->assertTrue($user->setPassword('bar',''));
} }


public function testSetPasswordNotSupported() { public function testSetPasswordNotSupported() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(\Test\Util\User\Dummy::class); $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->never()) $backend->expects($this->never())
->method('implementsActions') ->method('implementsActions')
->will($this->returnValue(false)); ->will($this->returnValue(false));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertFalse($user->setPassword('bar','')); $this->assertFalse($user->setPassword('bar',''));
} }


public function testChangeAvatarSupportedYes() { public function testChangeAvatarSupportedYes() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(AvatarUserDummy::class); $backend = $this->createMock(AvatarUserDummy::class);
$backend->expects($this->once()) $backend->expects($this->once())
} }
})); }));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertTrue($user->canChangeAvatar()); $this->assertTrue($user->canChangeAvatar());
} }


public function testChangeAvatarSupportedNo() { public function testChangeAvatarSupportedNo() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(AvatarUserDummy::class); $backend = $this->createMock(AvatarUserDummy::class);
$backend->expects($this->once()) $backend->expects($this->once())
} }
})); }));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertFalse($user->canChangeAvatar()); $this->assertFalse($user->canChangeAvatar());
} }


public function testChangeAvatarNotSupported() { public function testChangeAvatarNotSupported() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(AvatarUserDummy::class); $backend = $this->createMock(AvatarUserDummy::class);
$backend->expects($this->never()) $backend->expects($this->never())
->method('implementsActions') ->method('implementsActions')
->willReturn(false); ->willReturn(false);


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertTrue($user->canChangeAvatar()); $this->assertTrue($user->canChangeAvatar());
} }


public function testDelete() { public function testDelete() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(\Test\Util\User\Dummy::class); $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once()) $backend->expects($this->once())
->method('deleteUser') ->method('deleteUser')
->with($this->equalTo('foo')); ->with($this->equalTo('foo'));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertTrue($user->delete()); $this->assertTrue($user->delete());
} }


public function testGetHome() { public function testGetHome() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(\Test\Util\User\Dummy::class); $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once()) $backend->expects($this->once())
} }
})); }));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertEquals('/home/foo', $user->getHome()); $this->assertEquals('/home/foo', $user->getHome());
} }


public function testGetBackendClassName() { public function testGetBackendClassName() {
$user = new \OC\User\User('foo', new \Test\Util\User\Dummy());
$user = new User('foo', new \Test\Util\User\Dummy());
$this->assertEquals('Dummy', $user->getBackendClassName()); $this->assertEquals('Dummy', $user->getBackendClassName());
$user = new \OC\User\User('foo', new \OC\User\Database());
$user = new User('foo', new \OC\User\Database());
$this->assertEquals('Database', $user->getBackendClassName()); $this->assertEquals('Database', $user->getBackendClassName());
} }


public function testGetHomeNotSupported() { public function testGetHomeNotSupported() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(\Test\Util\User\Dummy::class); $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->never()) $backend->expects($this->never())
->with($this->equalTo('datadirectory')) ->with($this->equalTo('datadirectory'))
->will($this->returnValue('arbitrary/path')); ->will($this->returnValue('arbitrary/path'));


$user = new \OC\User\User('foo', $backend, null, $allConfig);
$user = new User('foo', $backend, null, $allConfig);
$this->assertEquals('arbitrary/path/foo', $user->getHome()); $this->assertEquals('arbitrary/path/foo', $user->getHome());
} }


public function testCanChangePassword() { public function testCanChangePassword() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(\Test\Util\User\Dummy::class); $backend = $this->createMock(\Test\Util\User\Dummy::class);


} }
})); }));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertTrue($user->canChangePassword()); $this->assertTrue($user->canChangePassword());
} }


public function testCanChangePasswordNotSupported() { public function testCanChangePasswordNotSupported() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(\Test\Util\User\Dummy::class); $backend = $this->createMock(\Test\Util\User\Dummy::class);


->method('implementsActions') ->method('implementsActions')
->will($this->returnValue(false)); ->will($this->returnValue(false));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertFalse($user->canChangePassword()); $this->assertFalse($user->canChangePassword());
} }


public function testCanChangeDisplayName() { public function testCanChangeDisplayName() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(\Test\Util\User\Dummy::class); $backend = $this->createMock(\Test\Util\User\Dummy::class);


} }
})); }));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertTrue($user->canChangeDisplayName()); $this->assertTrue($user->canChangeDisplayName());
} }


public function testCanChangeDisplayNameNotSupported() { public function testCanChangeDisplayNameNotSupported() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(\Test\Util\User\Dummy::class); $backend = $this->createMock(\Test\Util\User\Dummy::class);


->method('implementsActions') ->method('implementsActions')
->will($this->returnValue(false)); ->will($this->returnValue(false));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertFalse($user->canChangeDisplayName()); $this->assertFalse($user->canChangeDisplayName());
} }


public function testSetDisplayNameSupported() { public function testSetDisplayNameSupported() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(Database::class);
$backend = $this->createMock(\OC\User\Database::class);


$backend->expects($this->any()) $backend->expects($this->any())
->method('implementsActions') ->method('implementsActions')
->with('foo','Foo') ->with('foo','Foo')
->willReturn(true); ->willReturn(true);


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertTrue($user->setDisplayName('Foo')); $this->assertTrue($user->setDisplayName('Foo'));
$this->assertEquals('Foo',$user->getDisplayName()); $this->assertEquals('Foo',$user->getDisplayName());
} }
*/ */
public function testSetDisplayNameEmpty() { public function testSetDisplayNameEmpty() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(Database::class);
$backend = $this->createMock(\OC\User\Database::class);


$backend->expects($this->any()) $backend->expects($this->any())
->method('implementsActions') ->method('implementsActions')
} }
})); }));


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertFalse($user->setDisplayName(' ')); $this->assertFalse($user->setDisplayName(' '));
$this->assertEquals('foo',$user->getDisplayName()); $this->assertEquals('foo',$user->getDisplayName());
} }


public function testSetDisplayNameNotSupported() { public function testSetDisplayNameNotSupported() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(Database::class);
$backend = $this->createMock(\OC\User\Database::class);


$backend->expects($this->any()) $backend->expects($this->any())
->method('implementsActions') ->method('implementsActions')
$backend->expects($this->never()) $backend->expects($this->never())
->method('setDisplayName'); ->method('setDisplayName');


$user = new \OC\User\User('foo', $backend);
$user = new User('foo', $backend);
$this->assertFalse($user->setDisplayName('Foo')); $this->assertFalse($user->setDisplayName('Foo'));
$this->assertEquals('foo',$user->getDisplayName()); $this->assertEquals('foo',$user->getDisplayName());
} }
$test = $this; $test = $this;


/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(\Test\Util\User\Dummy::class); $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once()) $backend->expects($this->once())
->method('setPassword'); ->method('setPassword');


/** /**
* @param \OC\User\User $user
* @param User $user
* @param string $password * @param string $password
*/ */
$hook = function ($user, $password) use ($test, &$hooksCalled) { $hook = function ($user, $password) use ($test, &$hooksCalled) {
} }
})); }));


$user = new \OC\User\User('foo', $backend, $emitter);
$user = new User('foo', $backend, $emitter);


$user->setPassword('bar',''); $user->setPassword('bar','');
$this->assertEquals(2, $hooksCalled); $this->assertEquals(2, $hooksCalled);
$test = $this; $test = $this;


/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(\Test\Util\User\Dummy::class); $backend = $this->createMock(\Test\Util\User\Dummy::class);
$backend->expects($this->once()) $backend->expects($this->once())
->method('deleteUser') ->method('deleteUser')
->willReturn($result); ->willReturn($result);
$emitter = new PublicEmitter(); $emitter = new PublicEmitter();
$user = new \OC\User\User('foo', $backend, $emitter);
$user = new User('foo', $backend, $emitter);


/** /**
* @param \OC\User\User $user
* @param User $user
*/ */
$hook = function ($user) use ($test, &$hooksCalled) { $hook = function ($user) use ($test, &$hooksCalled) {
$hooksCalled++; $hooksCalled++;


public function testGetCloudId() { public function testGetCloudId() {
/** /**
* @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend
* @var Backend | \PHPUnit_Framework_MockObject_MockObject $backend
*/ */
$backend = $this->createMock(\Test\Util\User\Dummy::class); $backend = $this->createMock(\Test\Util\User\Dummy::class);
$urlGenerator = $this->getMockBuilder('\OC\URLGenerator') $urlGenerator = $this->getMockBuilder('\OC\URLGenerator')
->method('getAbsoluteURL') ->method('getAbsoluteURL')
->withAnyParameters() ->withAnyParameters()
->willReturn('http://localhost:8888/owncloud'); ->willReturn('http://localhost:8888/owncloud');
$user = new \OC\User\User('foo', $backend, null, null, $urlGenerator);
$this->assertEquals("foo@localhost:8888/owncloud", $user->getCloudId());
$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());
} }
} }

Loading…
Cancel
Save