2013-05-29 01:46:57 +04:00
|
|
|
<?php
|
|
|
|
/**
|
2020-04-08 23:24:54 +03:00
|
|
|
* ownCloud
|
|
|
|
*
|
|
|
|
* @author Robin Appelman
|
|
|
|
* @copyright 2012 Robin Appelman icewind@owncloud.com
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 3 of the License, or any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Affero General Public
|
|
|
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
*
|
|
|
|
*/
|
2013-05-29 01:46:57 +04:00
|
|
|
|
2016-05-19 10:17:54 +03:00
|
|
|
namespace Test\User;
|
2019-11-19 21:18:00 +03:00
|
|
|
|
2016-06-27 12:30:13 +03:00
|
|
|
use OC\HintException;
|
2019-11-22 22:52:10 +03:00
|
|
|
use OC\User\User;
|
2019-11-19 21:18:00 +03:00
|
|
|
use OCP\EventDispatcher\Event;
|
|
|
|
use OCP\EventDispatcher\IEventDispatcher;
|
|
|
|
use OCP\Security\Events\ValidatePasswordPolicyEvent;
|
|
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
2019-02-22 15:07:26 +03:00
|
|
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
2016-05-19 10:17:54 +03:00
|
|
|
|
2015-11-03 03:52:41 +03:00
|
|
|
/**
|
2016-05-20 16:38:20 +03:00
|
|
|
* Class DatabaseTest
|
2015-11-03 03:52:41 +03:00
|
|
|
*
|
|
|
|
* @group DB
|
|
|
|
*/
|
2016-05-20 16:38:20 +03:00
|
|
|
class DatabaseTest extends Backend {
|
2014-11-05 14:21:02 +03:00
|
|
|
/** @var array */
|
|
|
|
private $users;
|
2019-11-19 21:18:00 +03:00
|
|
|
/** @var IEventDispatcher|MockObject */
|
2016-06-27 12:30:13 +03:00
|
|
|
private $eventDispatcher;
|
2014-11-05 14:21:02 +03:00
|
|
|
|
2013-05-29 01:46:57 +04:00
|
|
|
public function getUser() {
|
2013-10-08 21:22:45 +04:00
|
|
|
$user = parent::getUser();
|
2020-10-05 16:12:57 +03:00
|
|
|
$this->users[] = $user;
|
2013-05-29 01:46:57 +04:00
|
|
|
return $user;
|
|
|
|
}
|
2014-11-05 14:21:02 +03:00
|
|
|
|
2019-11-21 18:40:38 +03:00
|
|
|
protected function setUp(): void {
|
2014-11-05 14:21:02 +03:00
|
|
|
parent::setUp();
|
2016-06-27 12:30:13 +03:00
|
|
|
|
2019-11-19 21:18:00 +03:00
|
|
|
$this->eventDispatcher = $this->createMock(IEventDispatcher::class);
|
2016-06-27 12:30:13 +03:00
|
|
|
|
2020-10-05 16:12:57 +03:00
|
|
|
$this->backend = new \OC\User\Database($this->eventDispatcher);
|
2013-05-29 01:46:57 +04:00
|
|
|
}
|
2014-11-05 14:21:02 +03:00
|
|
|
|
2019-11-21 18:40:38 +03:00
|
|
|
protected function tearDown(): void {
|
2020-04-10 15:19:56 +03:00
|
|
|
if (!isset($this->users)) {
|
2014-06-23 20:33:13 +04:00
|
|
|
return;
|
|
|
|
}
|
2020-04-10 15:19:56 +03:00
|
|
|
foreach ($this->users as $user) {
|
2013-05-29 01:46:57 +04:00
|
|
|
$this->backend->deleteUser($user);
|
|
|
|
}
|
2014-11-05 14:21:02 +03:00
|
|
|
parent::tearDown();
|
2013-05-29 01:46:57 +04:00
|
|
|
}
|
2016-06-27 12:30:13 +03:00
|
|
|
|
|
|
|
public function testVerifyPasswordEvent() {
|
|
|
|
$user = $this->getUser();
|
|
|
|
$this->backend->createUser($user, 'pass1');
|
|
|
|
|
2019-11-19 21:18:00 +03:00
|
|
|
$this->eventDispatcher->expects($this->once())->method('dispatchTyped')
|
2016-06-27 12:30:13 +03:00
|
|
|
->willReturnCallback(
|
2019-11-19 21:18:00 +03:00
|
|
|
function (Event $event) {
|
|
|
|
$this->assertInstanceOf(ValidatePasswordPolicyEvent::class, $event);
|
|
|
|
/** @var ValidatePasswordPolicyEvent $event */
|
|
|
|
$this->assertSame('newpass', $event->getPassword());
|
2016-06-27 12:30:13 +03:00
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
$this->backend->setPassword($user, 'newpass');
|
|
|
|
$this->assertSame($user, $this->backend->checkPassword($user, 'newpass'));
|
|
|
|
}
|
|
|
|
|
2019-11-27 17:27:18 +03:00
|
|
|
|
2016-06-27 12:30:13 +03:00
|
|
|
public function testVerifyPasswordEventFail() {
|
2019-11-27 17:27:18 +03:00
|
|
|
$this->expectException(\OC\HintException::class);
|
|
|
|
$this->expectExceptionMessage('password change failed');
|
|
|
|
|
2016-06-27 12:30:13 +03:00
|
|
|
$user = $this->getUser();
|
|
|
|
$this->backend->createUser($user, 'pass1');
|
|
|
|
|
2019-11-19 21:18:00 +03:00
|
|
|
$this->eventDispatcher->expects($this->once())->method('dispatchTyped')
|
2016-06-27 12:30:13 +03:00
|
|
|
->willReturnCallback(
|
2019-11-19 21:18:00 +03:00
|
|
|
function (Event $event) {
|
|
|
|
$this->assertInstanceOf(ValidatePasswordPolicyEvent::class, $event);
|
|
|
|
/** @var ValidatePasswordPolicyEvent $event */
|
|
|
|
$this->assertSame('newpass', $event->getPassword());
|
2016-06-27 12:30:13 +03:00
|
|
|
throw new HintException('password change failed', 'password change failed');
|
|
|
|
}
|
|
|
|
);
|
|
|
|
|
|
|
|
$this->backend->setPassword($user, 'newpass');
|
|
|
|
$this->assertSame($user, $this->backend->checkPassword($user, 'newpass'));
|
|
|
|
}
|
2017-02-15 20:14:29 +03:00
|
|
|
|
|
|
|
public function testCreateUserInvalidatesCache() {
|
|
|
|
$user1 = $this->getUniqueID('test_');
|
|
|
|
$this->assertFalse($this->backend->userExists($user1));
|
|
|
|
$this->backend->createUser($user1, 'pw');
|
|
|
|
$this->assertTrue($this->backend->userExists($user1));
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testDeleteUserInvalidatesCache() {
|
|
|
|
$user1 = $this->getUniqueID('test_');
|
|
|
|
$this->backend->createUser($user1, 'pw');
|
|
|
|
$this->assertTrue($this->backend->userExists($user1));
|
|
|
|
$this->backend->deleteUser($user1);
|
|
|
|
$this->assertFalse($this->backend->userExists($user1));
|
|
|
|
$this->backend->createUser($user1, 'pw2');
|
|
|
|
$this->assertTrue($this->backend->userExists($user1));
|
|
|
|
}
|
2017-12-16 14:48:05 +03:00
|
|
|
|
|
|
|
public function testSearch() {
|
|
|
|
parent::testSearch();
|
|
|
|
|
|
|
|
$user1 = $this->getUser();
|
|
|
|
$this->backend->createUser($user1, 'pass1');
|
|
|
|
|
|
|
|
$user2 = $this->getUser();
|
|
|
|
$this->backend->createUser($user2, 'pass1');
|
|
|
|
|
2019-11-19 21:18:00 +03:00
|
|
|
$user1Obj = new User($user1, $this->backend, $this->createMock(EventDispatcherInterface::class));
|
|
|
|
$user2Obj = new User($user2, $this->backend, $this->createMock(EventDispatcherInterface::class));
|
2017-12-16 14:48:05 +03:00
|
|
|
$emailAddr1 = "$user1@nextcloud.com";
|
|
|
|
$emailAddr2 = "$user2@nextcloud.com";
|
|
|
|
|
2017-12-20 17:51:37 +03:00
|
|
|
$user1Obj->setDisplayName('User 1 Display');
|
|
|
|
|
|
|
|
$result = $this->backend->getDisplayNames('display');
|
|
|
|
$this->assertCount(1, $result);
|
|
|
|
|
|
|
|
$result = $this->backend->getDisplayNames(strtoupper($user1));
|
|
|
|
$this->assertCount(1, $result);
|
|
|
|
|
2017-12-16 14:48:05 +03:00
|
|
|
$user1Obj->setEMailAddress($emailAddr1);
|
|
|
|
$user2Obj->setEMailAddress($emailAddr2);
|
|
|
|
|
|
|
|
$result = $this->backend->getUsers('@nextcloud.com');
|
2017-12-20 17:51:37 +03:00
|
|
|
$this->assertCount(2, $result);
|
2017-12-16 14:48:05 +03:00
|
|
|
|
|
|
|
$result = $this->backend->getDisplayNames('@nextcloud.com');
|
2017-12-20 17:51:37 +03:00
|
|
|
$this->assertCount(2, $result);
|
|
|
|
|
|
|
|
$result = $this->backend->getDisplayNames('@nextcloud.COM');
|
|
|
|
$this->assertCount(2, $result);
|
2017-12-16 14:48:05 +03:00
|
|
|
}
|
2013-05-29 01:46:57 +04:00
|
|
|
}
|