From 51ead4e59bc3695a2279758b0b410f3e2b5478e7 Mon Sep 17 00:00:00 2001 From: Arthur Schiwon Date: Thu, 5 Nov 2015 11:50:57 +0100 Subject: [PATCH] subadmin methods should not return any null user or group --- lib/private/subadmin.php | 22 ++++++++++++++++------ tests/lib/subadmin.php | 31 +++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/lib/private/subadmin.php b/lib/private/subadmin.php index c00a2b2466..c96275e3b8 100644 --- a/lib/private/subadmin.php +++ b/lib/private/subadmin.php @@ -119,7 +119,10 @@ class SubAdmin extends PublicEmitter { $groups = []; while($row = $result->fetch()) { - $groups[] = $this->groupManager->get($row['gid']); + $group = $this->groupManager->get($row['gid']); + if(!is_null($group)) { + $groups[] = $group; + } } $result->closeCursor(); @@ -141,7 +144,10 @@ class SubAdmin extends PublicEmitter { $users = []; while($row = $result->fetch()) { - $users[] = $this->userManager->get($row['uid']); + $user = $this->userManager->get($row['uid']); + if(!is_null($user)) { + $users[] = $user; + } } $result->closeCursor(); @@ -161,10 +167,14 @@ class SubAdmin extends PublicEmitter { $subadmins = []; while($row = $result->fetch()) { - $subadmins[] = [ - 'user' => $this->userManager->get($row['uid']), - 'group' => $this->groupManager->get($row['gid']) - ]; + $user = $this->userManager->get($row['uid']); + $group = $this->groupManager->get($row['gid']); + if(!is_null($user) && !is_null($group)) { + $subadmins[] = [ + 'user' => $user, + 'group' => $group + ]; + } } $result->closeCursor(); diff --git a/tests/lib/subadmin.php b/tests/lib/subadmin.php index 0855e514c7..960943c22f 100644 --- a/tests/lib/subadmin.php +++ b/tests/lib/subadmin.php @@ -55,6 +55,28 @@ class SubAdmin extends \Test\TestCase { if (!$this->groupManager->groupExists('admin')) { $this->groupManager->createGroup('admin'); } + + // Create "orphaned" users and groups (scenario: temporarily disabled + // backend) + $qb = $this->dbConn->getQueryBuilder(); + $qb->insert('group_admin') + ->values([ + 'gid' => $qb->createNamedParameter($this->groups[0]->getGID()), + 'uid' => $qb->createNamedParameter('orphanedUser') + ]) + ->execute(); + $qb->insert('group_admin') + ->values([ + 'gid' => $qb->createNamedParameter('orphanedGroup'), + 'uid' => $qb->createNamedParameter('orphanedUser') + ]) + ->execute(); + $qb->insert('group_admin') + ->values([ + 'gid' => $qb->createNamedParameter('orphanedGroup'), + 'uid' => $qb->createNamedParameter($this->users[0]->getUID()) + ]) + ->execute(); } public function tearDown() { @@ -65,6 +87,12 @@ class SubAdmin extends \Test\TestCase { foreach($this->groups as $group) { $group->delete(); } + + $qb = $this->dbConn->getQueryBuilder(); + $qb->delete('group_admin') + ->where($qb->expr()->eq('uid', $qb->createNamedParameter('orphanedUser'))) + ->orWhere($qb->expr()->eq('gid', $qb->createNamedParameter('orphanedGroup'))) + ->execute(); } public function testCreateSubAdmin() { @@ -118,6 +146,7 @@ class SubAdmin extends \Test\TestCase { $this->assertContains($this->groups[0], $result); $this->assertContains($this->groups[1], $result); $this->assertNotContains($this->groups[2], $result); + $this->assertNotContains(null, $result); $this->assertTrue($subAdmin->deleteSubAdmin($this->users[0], $this->groups[0])); $this->assertTrue($subAdmin->deleteSubAdmin($this->users[0], $this->groups[1])); @@ -133,6 +162,7 @@ class SubAdmin extends \Test\TestCase { $this->assertContains($this->users[0], $result); $this->assertContains($this->users[1], $result); $this->assertNotContains($this->users[2], $result); + $this->assertNotContains(null, $result); $this->assertTrue($subAdmin->deleteSubAdmin($this->users[0], $this->groups[0])); $this->assertTrue($subAdmin->deleteSubAdmin($this->users[1], $this->groups[0])); @@ -150,6 +180,7 @@ class SubAdmin extends \Test\TestCase { $this->assertContains(['user' => $this->users[0], 'group' => $this->groups[0]], $result); $this->assertContains(['user' => $this->users[1], 'group' => $this->groups[1]], $result); $this->assertContains(['user' => $this->users[2], 'group' => $this->groups[1]], $result); + $this->assertNotContains(['user' => null, 'group' => null], $result); } public function testIsSubAdminofGroup() {