. * */ use OC\HintException; use Symfony\Component\EventDispatcher\EventDispatcher; use Symfony\Component\EventDispatcher\GenericEvent; /** * Class Test_User_Database * * @group DB */ class Test_User_Database extends Test_User_Backend { /** @var array */ private $users; /** @var EventDispatcher | PHPUnit_Framework_MockObject_MockObject */ private $eventDispatcher; public function getUser() { $user = parent::getUser(); $this->users[]=$user; return $user; } protected function setUp() { parent::setUp(); $this->eventDispatcher = $this->getMock('Symfony\Component\EventDispatcher\EventDispatcher'); $this->backend=new OC_User_Database($this->eventDispatcher); } protected function tearDown() { if(!isset($this->users)) { return; } foreach($this->users as $user) { $this->backend->deleteUser($user); } parent::tearDown(); } public function testVerifyPasswordEvent() { $user = $this->getUser(); $this->backend->createUser($user, 'pass1'); $this->eventDispatcher->expects($this->once())->method('dispatch') ->willReturnCallback( function ($eventName, GenericEvent $event) { $this->assertSame('OCP\PasswordPolicy::validate', $eventName); $this->assertSame('newpass', $event->getSubject()); } ); $this->backend->setPassword($user, 'newpass'); $this->assertSame($user, $this->backend->checkPassword($user, 'newpass')); } /** * @expectedException \OC\HintException * @expectedExceptionMessage password change failed */ public function testVerifyPasswordEventFail() { $user = $this->getUser(); $this->backend->createUser($user, 'pass1'); $this->eventDispatcher->expects($this->once())->method('dispatch') ->willReturnCallback( function ($eventName, GenericEvent $event) { $this->assertSame('OCP\PasswordPolicy::validate', $eventName); $this->assertSame('newpass', $event->getSubject()); throw new HintException('password change failed', 'password change failed'); } ); $this->backend->setPassword($user, 'newpass'); $this->assertSame($user, $this->backend->checkPassword($user, 'newpass')); } }