diff --git a/appinfo/app.php b/appinfo/app.php index 5b3ec6e0e..966bf0807 100644 --- a/appinfo/app.php +++ b/appinfo/app.php @@ -60,7 +60,8 @@ \OC::$server->getGroupManager(), $samlSettings, \OC::$server->getLogger(), - $userData + $userData, + \OC::$server->query(\OCP\EventDispatcher\IEventDispatcher::class), ); $userBackend->registerBackends(\OC::$server->getUserManager()->getBackends()); OC_User::useBackend($userBackend); diff --git a/lib/UserBackend.php b/lib/UserBackend.php index 1820126b3..2d0359ff1 100644 --- a/lib/UserBackend.php +++ b/lib/UserBackend.php @@ -59,6 +59,8 @@ class UserBackend implements IApacheBackend, UserInterface, IUserBackend { private $logger; /** @var UserData */ private $userData; + /** @var IEventDispatcher */ + private $eventDispatcher; public function __construct( IConfig $config, @@ -69,7 +71,8 @@ public function __construct( IGroupManager $groupManager, SAMLSettings $settings, ILogger $logger, - UserData $userData + UserData $userData, + IEventDispatcher $eventDispatcher ) { $this->config = $config; $this->urlGenerator = $urlGenerator; @@ -80,6 +83,7 @@ public function __construct( $this->settings = $settings; $this->logger = $logger; $this->userData = $userData; + $this->eventDispatcher = $eventDispatcher; } /** @@ -642,8 +646,7 @@ public function updateAttributes($uid, $currentDisplayname = (string)$this->getDisplayName($uid); if ($newDisplayname !== null && $currentDisplayname !== $newDisplayname) { - $dispatcher = \OC::$server->get(IEventDispatcher::class); - $dispatcher->dispatchTyped(new UserChangedEvent($user, 'displayName', $newDisplayname, $currentDisplayname)); + $this->eventDispatcher->dispatchTyped(new UserChangedEvent($user, 'displayName', $newDisplayname, $currentDisplayname)); $this->setDisplayName($uid, $newDisplayname); } diff --git a/tests/unit/UserBackendTest.php b/tests/unit/UserBackendTest.php index 8fdc89e59..bed31edcf 100644 --- a/tests/unit/UserBackendTest.php +++ b/tests/unit/UserBackendTest.php @@ -24,6 +24,7 @@ use OCA\User_SAML\SAMLSettings; use OCA\User_SAML\UserBackend; use OCA\User_SAML\UserData; +use OCP\EventDispatcher\IEventDispatcher; use OCP\IConfig; use OCP\IDBConnection; use OCP\IGroup; @@ -33,29 +34,33 @@ use OCP\IURLGenerator; use OCP\IUser; use OCP\IUserManager; +use OCP\User\Events\UserChangedEvent; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; class UserBackendTest extends TestCase { - /** @var UserData|\PHPUnit\Framework\MockObject\MockObject */ + /** @var UserData|MockObject */ private $userData; - /** @var IConfig|\PHPUnit_Framework_MockObject_MockObject */ + /** @var IConfig|MockObject */ private $config; - /** @var IURLGenerator|\PHPUnit_Framework_MockObject_MockObject */ + /** @var IURLGenerator|MockObject */ private $urlGenerator; - /** @var ISession|\PHPUnit_Framework_MockObject_MockObject */ + /** @var ISession|MockObject */ private $session; - /** @var IDBConnection|\PHPUnit_Framework_MockObject_MockObject */ + /** @var IDBConnection|MockObject */ private $db; - /** @var IUserManager|\PHPUnit_Framework_MockObject_MockObject */ + /** @var IUserManager|MockObject */ private $userManager; - /** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ + /** @var IGroupManager|MockObject */ private $groupManager; - /** @var UserBackend|\PHPUnit_Framework_MockObject_MockObject */ + /** @var UserBackend|MockObject */ private $userBackend; - /** @var \PHPUnit_Framework_MockObject_MockObject|SAMLSettings */ + /** @var SAMLSettings|MockObject */ private $SAMLSettings; - /** @var \PHPUnit_Framework_MockObject_MockObject|ILogger */ + /** @var ILogger|MockObject */ private $logger; + /** @var IEventDispatcher|MockObject */ + private $eventDispatcher; protected function setUp(): void { parent::setUp(); @@ -69,6 +74,7 @@ protected function setUp(): void { $this->SAMLSettings = $this->getMockBuilder(SAMLSettings::class)->disableOriginalConstructor()->getMock(); $this->logger = $this->createMock(ILogger::class); $this->userData = $this->createMock(UserData::class); + $this->eventDispatcher = $this->createMock(IEventDispatcher::class); } public function getMockedBuilder(array $mockedFunctions = []) { @@ -84,6 +90,7 @@ public function getMockedBuilder(array $mockedFunctions = []) { $this->SAMLSettings, $this->logger, $this->userData, + $this->eventDispatcher ]) ->setMethods($mockedFunctions) ->getMock(); @@ -97,7 +104,8 @@ public function getMockedBuilder(array $mockedFunctions = []) { $this->groupManager, $this->SAMLSettings, $this->logger, - $this->userData + $this->userData, + $this->eventDispatcher ); } } @@ -109,7 +117,7 @@ public function testGetBackendName() { public function testUpdateAttributesWithoutAttributes() { $this->getMockedBuilder(['getDisplayName']); - /** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */ + /** @var IUser|MockObject $user */ $user = $this->createMock(IUser::class); $this->userManager @@ -151,7 +159,7 @@ public function testUpdateAttributesWithoutValidUser() { public function testUpdateAttributes() { $this->getMockedBuilder(['getDisplayName', 'setDisplayName']); - /** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */ + /** @var IUser|MockObject $user */ $user = $this->createMock(IUser::class); $groupA = $this->createMock(IGroup::class); $groupC = $this->createMock(IGroup::class); @@ -242,6 +250,9 @@ public function testUpdateAttributes() { ->expects($this->once()) ->method('addUser') ->with($user); + $this->eventDispatcher->expects($this->once()) + ->method('dispatchTyped') + ->with(new UserChangedEvent($user, 'displayName', 'New Displayname', '')); $this->userBackend->updateAttributes('ExistingUser', [ 'email' => 'new@example.com', @@ -253,7 +264,7 @@ public function testUpdateAttributes() { public function testUpdateAttributesQuotaDefaultFallback() { $this->getMockedBuilder(['getDisplayName', 'setDisplayName']); - /** @var IUser|\PHPUnit_Framework_MockObject_MockObject $user */ + /** @var IUser|MockObject $user */ $user = $this->createMock(IUser::class); $this->config @@ -305,6 +316,9 @@ public function testUpdateAttributesQuotaDefaultFallback() { ->expects($this->once()) ->method('setDisplayName') ->with('ExistingUser', 'New Displayname'); + $this->eventDispatcher->expects($this->once()) + ->method('dispatchTyped') + ->with(new UserChangedEvent($user, 'displayName', 'New Displayname', '')); $this->userBackend->updateAttributes('ExistingUser', ['email' => 'new@example.com', 'displayname' => 'New Displayname', 'quota' => '']); } }