diff options
Diffstat (limited to 'tests/lib/User/UserTest.php')
-rw-r--r-- | tests/lib/User/UserTest.php | 479 |
1 files changed, 479 insertions, 0 deletions
diff --git a/tests/lib/User/UserTest.php b/tests/lib/User/UserTest.php new file mode 100644 index 00000000000..a49bddde9eb --- /dev/null +++ b/tests/lib/User/UserTest.php @@ -0,0 +1,479 @@ +<?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; + +/** + * Class UserTest + * + * @group DB + * + * @package Test\User + */ +class UserTest extends \Test\TestCase { + public function testDisplayName() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC\User\Backend'); + $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 \OC\User\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->getMock('\OC\User\Backend'); + $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 \OC\User\User('foo', $backend); + $this->assertEquals('foo', $user->getDisplayName()); + } + + public function testDisplayNameNotSupported() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC\User\Backend'); + $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 \OC\User\User('foo', $backend); + $this->assertEquals('foo', $user->getDisplayName()); + } + + public function testSetPassword() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\Test\Util\User\Dummy'); + $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 \OC\User\User('foo', $backend); + $this->assertTrue($user->setPassword('bar','')); + } + + public function testSetPasswordNotSupported() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\Test\Util\User\Dummy'); + $backend->expects($this->never()) + ->method('setPassword'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(false)); + + $user = new \OC\User\User('foo', $backend); + $this->assertFalse($user->setPassword('bar','')); + } + + public function testChangeAvatarSupportedYes() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('Test\User\AvatarUserDummy'); + $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 \OC\User\User('foo', $backend); + $this->assertTrue($user->canChangeAvatar()); + } + + public function testChangeAvatarSupportedNo() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('Test\User\AvatarUserDummy'); + $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 \OC\User\User('foo', $backend); + $this->assertFalse($user->canChangeAvatar()); + } + + public function testChangeAvatarNotSupported() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('Test\User\AvatarUserDummy'); + $backend->expects($this->never()) + ->method('canChangeAvatar'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnCallback(function ($actions) { + return false; + })); + + $user = new \OC\User\User('foo', $backend); + $this->assertTrue($user->canChangeAvatar()); + } + + public function testDelete() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\Test\Util\User\Dummy'); + $backend->expects($this->once()) + ->method('deleteUser') + ->with($this->equalTo('foo')); + + $user = new \OC\User\User('foo', $backend); + $this->assertTrue($user->delete()); + } + + public function testGetHome() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\Test\Util\User\Dummy'); + $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 \OC\User\User('foo', $backend); + $this->assertEquals('/home/foo', $user->getHome()); + } + + public function testGetBackendClassName() { + $user = new \OC\User\User('foo', new \Test\Util\User\Dummy()); + $this->assertEquals('Dummy', $user->getBackendClassName()); + $user = new \OC\User\User('foo', new \OC\User\Database()); + $this->assertEquals('Database', $user->getBackendClassName()); + } + + public function testGetHomeNotSupported() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\Test\Util\User\Dummy'); + $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 \OC\User\User('foo', $backend, null, $allConfig); + $this->assertEquals('arbitrary/path/foo', $user->getHome()); + } + + public function testCanChangePassword() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\Test\Util\User\Dummy'); + + $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 \OC\User\User('foo', $backend); + $this->assertTrue($user->canChangePassword()); + } + + public function testCanChangePasswordNotSupported() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\Test\Util\User\Dummy'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(false)); + + $user = new \OC\User\User('foo', $backend); + $this->assertFalse($user->canChangePassword()); + } + + public function testCanChangeDisplayName() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\Test\Util\User\Dummy'); + + $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 \OC\User\User('foo', $backend); + $this->assertTrue($user->canChangeDisplayName()); + } + + public function testCanChangeDisplayNameNotSupported() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\Test\Util\User\Dummy'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnValue(false)); + + $user = new \OC\User\User('foo', $backend); + $this->assertFalse($user->canChangeDisplayName()); + } + + public function testSetDisplayNameSupported() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC\User\Database'); + + $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 \OC\User\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 \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC\User\Database'); + + $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 \OC\User\User('foo', $backend); + $this->assertFalse($user->setDisplayName(' ')); + $this->assertEquals('foo',$user->getDisplayName()); + } + + public function testSetDisplayNameNotSupported() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\OC\User\Database'); + + $backend->expects($this->any()) + ->method('implementsActions') + ->will($this->returnCallback(function ($actions) { + return false; + })); + + $backend->expects($this->never()) + ->method('setDisplayName'); + + $user = new \OC\User\User('foo', $backend); + $this->assertFalse($user->setDisplayName('Foo')); + $this->assertEquals('foo',$user->getDisplayName()); + } + + public function testSetPasswordHooks() { + $hooksCalled = 0; + $test = $this; + + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\Test\Util\User\Dummy'); + $backend->expects($this->once()) + ->method('setPassword'); + + /** + * @param \OC\User\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 \OC\User\User('foo', $backend, $emitter); + + $user->setPassword('bar',''); + $this->assertEquals(2, $hooksCalled); + } + + public function testDeleteHooks() { + $hooksCalled = 0; + $test = $this; + + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\Test\Util\User\Dummy'); + $backend->expects($this->once()) + ->method('deleteUser'); + + /** + * @param \OC\User\User $user + */ + $hook = function ($user) use ($test, &$hooksCalled) { + $hooksCalled++; + $test->assertEquals('foo', $user->getUID()); + }; + + $emitter = new PublicEmitter(); + $emitter->listen('\OC\User', 'preDelete', $hook); + $emitter->listen('\OC\User', 'postDelete', $hook); + + $user = new \OC\User\User('foo', $backend, $emitter); + $this->assertTrue($user->delete()); + $this->assertEquals(2, $hooksCalled); + } + + public function testGetCloudId() { + /** + * @var \OC\User\Backend | \PHPUnit_Framework_MockObject_MockObject $backend + */ + $backend = $this->getMock('\Test\Util\User\Dummy'); + $urlGenerator = $this->getMockBuilder('\OC\URLGenerator') + ->setMethods(['getAbsoluteURL']) + ->disableOriginalConstructor()->getMock(); + $urlGenerator + ->expects($this->any()) + ->method('getAbsoluteURL') + ->withAnyParameters() + ->willReturn('http://localhost:8888/owncloud'); + $user = new \OC\User\User('foo', $backend, null, null, $urlGenerator); + $this->assertEquals("foo@localhost:8888/owncloud", $user->getCloudId()); + } +} |