From 879538c22f92b0e2b090f5d25f4ac39fdb2a1314 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Sun, 14 Oct 2018 19:09:55 +0200 Subject: [PATCH] filter null values for UserManager::getByEmail Signed-off-by: Georg Ehrke --- lib/private/User/Manager.php | 6 +++++- tests/lib/User/ManagerTest.php | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/lib/private/User/Manager.php b/lib/private/User/Manager.php index abc7a45e6bcbc..d2a7968b76f7f 100644 --- a/lib/private/User/Manager.php +++ b/lib/private/User/Manager.php @@ -533,8 +533,12 @@ private function getSeenUserIds($limit = null, $offset = null) { public function getByEmail($email) { $userIds = $this->config->getUsersForUserValue('settings', 'email', $email); - return array_map(function($uid) { + $users = array_map(function($uid) { return $this->get($uid); }, $userIds); + + return array_values(array_filter($users, function($u) { + return ($u instanceof IUser); + })); } } diff --git a/tests/lib/User/ManagerTest.php b/tests/lib/User/ManagerTest.php index f6a362a5031ab..3f82d79663ae8 100644 --- a/tests/lib/User/ManagerTest.php +++ b/tests/lib/User/ManagerTest.php @@ -666,4 +666,37 @@ public function testDeleteUser() { $manager->get('foo')->delete(); $this->assertFalse($manager->userExists('foo')); } + + public function testGetByEmail() { + $config = $this->getMockBuilder(IConfig::class) + ->disableOriginalConstructor() + ->getMock(); + $config + ->expects($this->at(0)) + ->method('getUsersForUserValue') + ->with('settings', 'email', 'test@example.com') + ->will($this->returnValue(['uid1', 'uid99', 'uid2'])); + + $backend = $this->createMock(\Test\Util\User\Dummy::class); + $backend->expects($this->at(0)) + ->method('userExists') + ->with($this->equalTo('uid1')) + ->will($this->returnValue(true)); + $backend->expects($this->at(1)) + ->method('userExists') + ->with($this->equalTo('uid99')) + ->will($this->returnValue(false)); + $backend->expects($this->at(2)) + ->method('userExists') + ->with($this->equalTo('uid2')) + ->will($this->returnValue(true)); + + $manager = new \OC\User\Manager($config); + $manager->registerBackend($backend); + + $users = $manager->getByEmail('test@example.com'); + $this->assertCount(2, $users); + $this->assertEquals('uid1', $users[0]->getUID()); + $this->assertEquals('uid2', $users[1]->getUID()); + } }