From 2db26d87c444ba385850d63e8d27f3b759102cfe Mon Sep 17 00:00:00 2001
From: Georg Ehrke <developer@georgehrke.com>
Date: Sun, 14 Oct 2018 19:09:55 +0200
Subject: [PATCH] filter null values for UserManager::getByEmail

Signed-off-by: Georg Ehrke <developer@georgehrke.com>
---
 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 494a345be59..16a911b90ac 100644
--- a/lib/private/User/Manager.php
+++ b/lib/private/User/Manager.php
@@ -591,8 +591,12 @@ class Manager extends PublicEmitter implements IUserManager {
 	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 d2e48ffa538..e0b6aadf2ac 100644
--- a/tests/lib/User/ManagerTest.php
+++ b/tests/lib/User/ManagerTest.php
@@ -668,4 +668,37 @@ class ManagerTest extends TestCase {
 		$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());
+	}
 }
-- 
GitLab