mirror of
https://github.com/nextcloud/server.git
synced 2026-06-08 08:16:43 -04:00
Merge pull request #48970 from nextcloud/backport/48766/stable30
This commit is contained in:
commit
04e82698af
2 changed files with 129 additions and 4 deletions
|
|
@ -231,21 +231,21 @@ class UsersController extends AUserData {
|
|||
/* We have to handle offset ourselve for correctness */
|
||||
$tempLimit = ($limit === null ? null : $limit + $offset);
|
||||
foreach ($subAdminOfGroups as $group) {
|
||||
$users = array_merge(
|
||||
$users = array_unique(array_merge(
|
||||
$users,
|
||||
array_map(
|
||||
fn (IUser $user): string => $user->getUID(),
|
||||
array_filter(
|
||||
$group->searchUsers($search, ($tempLimit === null ? null : $tempLimit - count($users))),
|
||||
$group->searchUsers($search),
|
||||
fn (IUser $user): bool => !$user->isEnabled()
|
||||
)
|
||||
)
|
||||
);
|
||||
));
|
||||
if (($tempLimit !== null) && (count($users) >= $tempLimit)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
$users = array_slice($users, $offset);
|
||||
$users = array_slice($users, $offset, $limit);
|
||||
}
|
||||
|
||||
$usersDetails = [];
|
||||
|
|
|
|||
|
|
@ -214,6 +214,131 @@ class UsersControllerTest extends TestCase {
|
|||
$this->assertEquals($expected, $this->api->getUsers('MyCustomSearch')->getData());
|
||||
}
|
||||
|
||||
private function createUserMock(string $uid, bool $enabled): MockObject&IUser {
|
||||
$mockUser = $this->getMockBuilder(IUser::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$mockUser
|
||||
->method('getUID')
|
||||
->willReturn($uid);
|
||||
$mockUser
|
||||
->method('isEnabled')
|
||||
->willReturn($enabled);
|
||||
return $mockUser;
|
||||
}
|
||||
|
||||
public function testGetDisabledUsersAsAdmin(): void {
|
||||
$loggedInUser = $this->getMockBuilder(IUser::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$loggedInUser
|
||||
->expects($this->once())
|
||||
->method('getUID')
|
||||
->willReturn('admin');
|
||||
$this->userSession
|
||||
->expects($this->atLeastOnce())
|
||||
->method('getUser')
|
||||
->willReturn($loggedInUser);
|
||||
$this->groupManager
|
||||
->expects($this->once())
|
||||
->method('isAdmin')
|
||||
->willReturn(true);
|
||||
$this->userManager
|
||||
->expects($this->once())
|
||||
->method('getDisabledUsers')
|
||||
->with(3, 0, 'MyCustomSearch')
|
||||
->willReturn([
|
||||
$this->createUserMock('admin', false),
|
||||
$this->createUserMock('foo', false),
|
||||
$this->createUserMock('bar', false),
|
||||
]);
|
||||
|
||||
$expected = [
|
||||
'users' => [
|
||||
'admin' => ['id' => 'admin'],
|
||||
'foo' => ['id' => 'foo'],
|
||||
'bar' => ['id' => 'bar'],
|
||||
],
|
||||
];
|
||||
$this->assertEquals($expected, $this->api->getDisabledUsersDetails('MyCustomSearch', 3)->getData());
|
||||
}
|
||||
|
||||
public function testGetDisabledUsersAsSubAdmin(): void {
|
||||
$loggedInUser = $this->getMockBuilder(IUser::class)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$loggedInUser
|
||||
->expects($this->once())
|
||||
->method('getUID')
|
||||
->willReturn('subadmin');
|
||||
$this->userSession
|
||||
->expects($this->atLeastOnce())
|
||||
->method('getUser')
|
||||
->willReturn($loggedInUser);
|
||||
$this->groupManager
|
||||
->expects($this->once())
|
||||
->method('isAdmin')
|
||||
->willReturn(false);
|
||||
$firstGroup = $this->getMockBuilder('OCP\IGroup')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$secondGroup = $this->getMockBuilder('OCP\IGroup')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$subAdminManager = $this->getMockBuilder('OC\SubAdmin')
|
||||
->disableOriginalConstructor()->getMock();
|
||||
$subAdminManager
|
||||
->expects($this->once())
|
||||
->method('isSubAdmin')
|
||||
->with($loggedInUser)
|
||||
->willReturn(true);
|
||||
$subAdminManager
|
||||
->expects($this->once())
|
||||
->method('getSubAdminsGroups')
|
||||
->with($loggedInUser)
|
||||
->willReturn([$firstGroup, $secondGroup]);
|
||||
$this->groupManager
|
||||
->expects($this->once())
|
||||
->method('getSubAdmin')
|
||||
->willReturn($subAdminManager);
|
||||
$this->groupManager
|
||||
->expects($this->never())
|
||||
->method('displayNamesInGroup');
|
||||
|
||||
$firstGroup
|
||||
->expects($this->once())
|
||||
->method('searchUsers')
|
||||
->with('MyCustomSearch')
|
||||
->willReturn([
|
||||
$this->createUserMock('user1', false),
|
||||
$this->createUserMock('bob', true),
|
||||
$this->createUserMock('user2', false),
|
||||
$this->createUserMock('alice', true),
|
||||
]);
|
||||
|
||||
$secondGroup
|
||||
->expects($this->once())
|
||||
->method('searchUsers')
|
||||
->with('MyCustomSearch')
|
||||
->willReturn([
|
||||
$this->createUserMock('user2', false),
|
||||
$this->createUserMock('joe', true),
|
||||
$this->createUserMock('user3', false),
|
||||
$this->createUserMock('jim', true),
|
||||
$this->createUserMock('john', true),
|
||||
]);
|
||||
|
||||
|
||||
$expected = [
|
||||
'users' => [
|
||||
'user1' => ['id' => 'user1'],
|
||||
'user2' => ['id' => 'user2'],
|
||||
'user3' => ['id' => 'user3'],
|
||||
],
|
||||
];
|
||||
$this->assertEquals($expected, $this->api->getDisabledUsersDetails('MyCustomSearch', 3)->getData());
|
||||
}
|
||||
|
||||
|
||||
public function testAddUserAlreadyExisting() {
|
||||
$this->expectException(\OCP\AppFramework\OCS\OCSException::class);
|
||||
|
|
|
|||
Loading…
Reference in a new issue