aboutsummaryrefslogtreecommitdiffstats
path: root/apps/provisioning_api/tests/Controller
diff options
context:
space:
mode:
Diffstat (limited to 'apps/provisioning_api/tests/Controller')
-rw-r--r--apps/provisioning_api/tests/Controller/AppConfigControllerTest.php166
-rw-r--r--apps/provisioning_api/tests/Controller/AppsControllerTest.php60
-rw-r--r--apps/provisioning_api/tests/Controller/GroupsControllerTest.php131
-rw-r--r--apps/provisioning_api/tests/Controller/UsersControllerTest.php900
4 files changed, 769 insertions, 488 deletions
diff --git a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
index f932aceaf8e..1b09838cbc3 100644
--- a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php
@@ -1,4 +1,6 @@
<?php
+
+declare(strict_types=1);
/**
* SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
@@ -7,16 +9,22 @@ namespace OCA\Provisioning_API\Tests\Controller;
use OC\AppConfig;
use OCA\Provisioning_API\Controller\AppConfigController;
+use OCP\App\IAppManager;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
+use OCP\Exceptions\AppConfigUnknownKeyException;
use OCP\IAppConfig;
use OCP\IGroupManager;
use OCP\IL10N;
use OCP\IRequest;
use OCP\IUser;
use OCP\IUserSession;
+use OCP\Server;
use OCP\Settings\IManager;
+use PHPUnit\Framework\MockObject\MockObject;
use Test\TestCase;
+use function json_decode;
+use function json_encode;
/**
* Class AppConfigControllerTest
@@ -24,17 +32,12 @@ use Test\TestCase;
* @package OCA\Provisioning_API\Tests
*/
class AppConfigControllerTest extends TestCase {
-
- /** @var IAppConfig|\PHPUnit\Framework\MockObject\MockObject */
- private $appConfig;
- /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
- private $userSession;
- /** @var IL10N|\PHPUnit\Framework\MockObject\MockObject */
- private $l10n;
- /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */
- private $settingManager;
- /** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject */
- private $groupManager;
+ private IAppConfig&MockObject $appConfig;
+ private IUserSession&MockObject $userSession;
+ private IL10N&MockObject $l10n;
+ private IManager&MockObject $settingManager;
+ private IGroupManager&MockObject $groupManager;
+ private IAppManager $appManager;
protected function setUp(): void {
parent::setUp();
@@ -42,13 +45,14 @@ class AppConfigControllerTest extends TestCase {
$this->appConfig = $this->createMock(AppConfig::class);
$this->userSession = $this->createMock(IUserSession::class);
$this->l10n = $this->createMock(IL10N::class);
- $this->groupManager = $this->createMock(IGroupManager::class);
$this->settingManager = $this->createMock(IManager::class);
+ $this->groupManager = $this->createMock(IGroupManager::class);
+ $this->appManager = Server::get(IAppManager::class);
}
/**
* @param string[] $methods
- * @return AppConfigController|\PHPUnit\Framework\MockObject\MockObject
+ * @return AppConfigController|MockObject
*/
protected function getInstance(array $methods = []) {
$request = $this->createMock(IRequest::class);
@@ -61,7 +65,8 @@ class AppConfigControllerTest extends TestCase {
$this->userSession,
$this->l10n,
$this->groupManager,
- $this->settingManager
+ $this->settingManager,
+ $this->appManager,
);
} else {
return $this->getMockBuilder(AppConfigController::class)
@@ -72,14 +77,15 @@ class AppConfigControllerTest extends TestCase {
$this->userSession,
$this->l10n,
$this->groupManager,
- $this->settingManager
+ $this->settingManager,
+ $this->appManager,
])
- ->setMethods($methods)
+ ->onlyMethods($methods)
->getMock();
}
}
- public function testGetApps() {
+ public function testGetApps(): void {
$this->appConfig->expects($this->once())
->method('getApps')
->willReturn(['apps']);
@@ -90,21 +96,15 @@ class AppConfigControllerTest extends TestCase {
$this->assertEquals(['data' => ['apps']], $result->getData());
}
- public function dataGetKeys() {
+ public static function dataGetKeys(): array {
return [
['app1 ', null, new \InvalidArgumentException('error'), Http::STATUS_FORBIDDEN],
['app2', ['keys'], null, Http::STATUS_OK],
];
}
- /**
- * @dataProvider dataGetKeys
- * @param string $app
- * @param array|null $keys
- * @param \Exception|null $throws
- * @param int $status
- */
- public function testGetKeys($app, $keys, $throws, $status) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetKeys')]
+ public function testGetKeys(string $app, ?array $keys, ?\Throwable $throws, int $status): void {
$api = $this->getInstance(['verifyAppId']);
if ($throws instanceof \Exception) {
$api->expects($this->once())
@@ -135,23 +135,15 @@ class AppConfigControllerTest extends TestCase {
}
}
- public function dataGetValue() {
+ public static function dataGetValue(): array {
return [
['app1', 'key', 'default', null, new \InvalidArgumentException('error'), Http::STATUS_FORBIDDEN],
['app2', 'key', 'default', 'return', null, Http::STATUS_OK],
];
}
- /**
- * @dataProvider dataGetValue
- * @param string $app
- * @param string|null $key
- * @param string|null $default
- * @param string|null $return
- * @param \Exception|null $throws
- * @param int $status
- */
- public function testGetValue($app, $key, $default, $return, $throws, $status) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetValue')]
+ public function testGetValue(string $app, string $key, string $default, ?string $return, ?\Throwable $throws, int $status): void {
$api = $this->getInstance(['verifyAppId']);
if ($throws instanceof \Exception) {
$api->expects($this->once())
@@ -179,24 +171,23 @@ class AppConfigControllerTest extends TestCase {
}
}
- public function dataSetValue() {
+ public static function dataSetValue(): array {
return [
['app1', 'key', 'default', new \InvalidArgumentException('error1'), null, Http::STATUS_FORBIDDEN],
['app2', 'key', 'default', null, new \InvalidArgumentException('error2'), Http::STATUS_FORBIDDEN],
['app2', 'key', 'default', null, null, Http::STATUS_OK],
+ ['app2', 'key', '1', null, null, Http::STATUS_OK, IAppConfig::VALUE_BOOL],
+ ['app2', 'key', '42', null, null, Http::STATUS_OK, IAppConfig::VALUE_INT],
+ ['app2', 'key', '4.2', null, null, Http::STATUS_OK, IAppConfig::VALUE_FLOAT],
+ ['app2', 'key', '42', null, null, Http::STATUS_OK, IAppConfig::VALUE_STRING],
+ ['app2', 'key', 'secret', null, null, Http::STATUS_OK, IAppConfig::VALUE_STRING | IAppConfig::VALUE_SENSITIVE],
+ ['app2', 'key', json_encode([4, 2]), null, null, Http::STATUS_OK, IAppConfig::VALUE_ARRAY],
+ ['app2', 'key', json_encode([4, 2]), null, null, Http::STATUS_OK, new AppConfigUnknownKeyException()],
];
}
- /**
- * @dataProvider dataSetValue
- * @param string $app
- * @param string|null $key
- * @param string|null $value
- * @param \Exception|null $appThrows
- * @param \Exception|null $keyThrows
- * @param int $status
- */
- public function testSetValue($app, $key, $value, $appThrows, $keyThrows, $status) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataSetValue')]
+ public function testSetValue(string $app, string $key, string $value, ?\Throwable $appThrows, ?\Throwable $keyThrows, int $status, int|\Throwable $type = IAppConfig::VALUE_MIXED): void {
$adminUser = $this->createMock(IUser::class);
$adminUser->expects($this->once())
->method('getUid')
@@ -239,9 +230,38 @@ class AppConfigControllerTest extends TestCase {
->method('verifyConfigKey')
->with($app, $key);
+ if ($type instanceof \Throwable) {
+ $this->appConfig->expects($this->once())
+ ->method('getDetails')
+ ->with($app, $key)
+ ->willThrowException($type);
+ } else {
+ $this->appConfig->expects($this->once())
+ ->method('getDetails')
+ ->with($app, $key)
+ ->willReturn([
+ 'app' => $app,
+ 'key' => $key,
+ 'value' => '', // 🤷
+ 'type' => $type,
+ 'lazy' => false,
+ 'typeString' => (string)$type, // this is not accurate, but acceptable
+ 'sensitive' => ($type & IAppConfig::VALUE_SENSITIVE) !== 0,
+ ]);
+ }
+
+ $configValueSetter = match ($type) {
+ IAppConfig::VALUE_BOOL => 'setValueBool',
+ IAppConfig::VALUE_FLOAT => 'setValueFloat',
+ IAppConfig::VALUE_INT => 'setValueInt',
+ IAppConfig::VALUE_STRING => 'setValueString',
+ IAppConfig::VALUE_ARRAY => 'setValueArray',
+ default => 'setValueMixed',
+ };
+
$this->appConfig->expects($this->once())
- ->method('setValueMixed')
- ->with($app, $key, $value);
+ ->method($configValueSetter)
+ ->with($app, $key, $configValueSetter === 'setValueArray' ? json_decode($value, true) : $value);
}
$result = $api->setValue($app, $key, $value);
@@ -256,7 +276,7 @@ class AppConfigControllerTest extends TestCase {
}
}
- public function dataDeleteValue() {
+ public static function dataDeleteValue(): array {
return [
['app1', 'key', new \InvalidArgumentException('error1'), null, Http::STATUS_FORBIDDEN],
['app2', 'key', null, new \InvalidArgumentException('error2'), Http::STATUS_FORBIDDEN],
@@ -264,15 +284,8 @@ class AppConfigControllerTest extends TestCase {
];
}
- /**
- * @dataProvider dataDeleteValue
- * @param string $app
- * @param string|null $key
- * @param \Exception|null $appThrows
- * @param \Exception|null $keyThrows
- * @param int $status
- */
- public function testDeleteValue($app, $key, $appThrows, $keyThrows, $status) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataDeleteValue')]
+ public function testDeleteValue(string $app, string $key, ?\Throwable $appThrows, ?\Throwable $keyThrows, int $status): void {
$api = $this->getInstance(['verifyAppId', 'verifyConfigKey']);
if ($appThrows instanceof \Exception) {
$api->expects($this->once())
@@ -320,13 +333,13 @@ class AppConfigControllerTest extends TestCase {
}
}
- public function testVerifyAppId() {
+ public function testVerifyAppId(): void {
$api = $this->getInstance();
$this->invokePrivate($api, 'verifyAppId', ['activity']);
$this->addToAssertionCount(1);
}
- public function dataVerifyAppIdThrows() {
+ public static function dataVerifyAppIdThrows(): array {
return [
['activity..'],
['activity/'],
@@ -335,18 +348,15 @@ class AppConfigControllerTest extends TestCase {
];
}
- /**
- * @dataProvider dataVerifyAppIdThrows
- * @param string $app
- */
- public function testVerifyAppIdThrows($app) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataVerifyAppIdThrows')]
+ public function testVerifyAppIdThrows(string $app): void {
$this->expectException(\InvalidArgumentException::class);
$api = $this->getInstance();
$this->invokePrivate($api, 'verifyAppId', [$app]);
}
- public function dataVerifyConfigKey() {
+ public static function dataVerifyConfigKey(): array {
return [
['activity', 'abc', ''],
['dav', 'public_route', ''],
@@ -355,19 +365,14 @@ class AppConfigControllerTest extends TestCase {
];
}
- /**
- * @dataProvider dataVerifyConfigKey
- * @param string $app
- * @param string $key
- * @param string $value
- */
- public function testVerifyConfigKey($app, $key, $value) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataVerifyConfigKey')]
+ public function testVerifyConfigKey(string $app, string $key, string $value): void {
$api = $this->getInstance();
$this->invokePrivate($api, 'verifyConfigKey', [$app, $key, $value]);
$this->addToAssertionCount(1);
}
- public function dataVerifyConfigKeyThrows() {
+ public static function dataVerifyConfigKeyThrows(): array {
return [
['activity', 'installed_version', ''],
['calendar', 'enabled', ''],
@@ -381,13 +386,8 @@ class AppConfigControllerTest extends TestCase {
];
}
- /**
- * @dataProvider dataVerifyConfigKeyThrows
- * @param string $app
- * @param string $key
- * @param string $value
- */
- public function testVerifyConfigKeyThrows($app, $key, $value) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataVerifyConfigKeyThrows')]
+ public function testVerifyConfigKeyThrows(string $app, string $key, string $value): void {
$this->expectException(\InvalidArgumentException::class);
$api = $this->getInstance();
diff --git a/apps/provisioning_api/tests/Controller/AppsControllerTest.php b/apps/provisioning_api/tests/Controller/AppsControllerTest.php
index 66c873e5327..f95daeae7d3 100644
--- a/apps/provisioning_api/tests/Controller/AppsControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/AppsControllerTest.php
@@ -7,10 +7,17 @@
*/
namespace OCA\Provisioning_API\Tests\Controller;
+use OC\Installer;
use OCA\Provisioning_API\Controller\AppsController;
+use OCA\Provisioning_API\Tests\TestCase;
use OCP\App\IAppManager;
+use OCP\AppFramework\OCS\OCSException;
+use OCP\IAppConfig;
+use OCP\IGroupManager;
use OCP\IRequest;
use OCP\IUserSession;
+use OCP\Server;
+use PHPUnit\Framework\MockObject\MockObject;
/**
* Class AppsTest
@@ -19,47 +26,52 @@ use OCP\IUserSession;
*
* @package OCA\Provisioning_API\Tests
*/
-class AppsControllerTest extends \OCA\Provisioning_API\Tests\TestCase {
- /** @var IAppManager */
- private $appManager;
- /** @var AppsController */
- private $api;
- /** @var IUserSession */
- private $userSession;
+class AppsControllerTest extends TestCase {
+ private IAppManager $appManager;
+ private IAppConfig&MockObject $appConfig;
+ private Installer&MockObject $installer;
+ private AppsController $api;
+ private IUserSession $userSession;
protected function setUp(): void {
parent::setUp();
- $this->appManager = \OC::$server->getAppManager();
- $this->groupManager = \OC::$server->getGroupManager();
- $this->userSession = \OC::$server->getUserSession();
+ $this->appManager = Server::get(IAppManager::class);
+ $this->groupManager = Server::get(IGroupManager::class);
+ $this->userSession = Server::get(IUserSession::class);
+ $this->appConfig = $this->createMock(IAppConfig::class);
+ $this->installer = $this->createMock(Installer::class);
- $request = $this->getMockBuilder(IRequest::class)
- ->disableOriginalConstructor()
- ->getMock();
+ $request = $this->createMock(IRequest::class);
$this->api = new AppsController(
'provisioning_api',
$request,
- $this->appManager
+ $this->appManager,
+ $this->installer,
+ $this->appConfig,
);
}
- public function testGetAppInfo() {
+ protected function tearDown(): void {
+ $this->userSession->setUser(null);
+ }
+
+ public function testGetAppInfo(): void {
$result = $this->api->getAppInfo('provisioning_api');
$expected = $this->appManager->getAppInfo('provisioning_api');
$this->assertEquals($expected, $result->getData());
}
-
- public function testGetAppInfoOnBadAppID() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+
+ public function testGetAppInfoOnBadAppID(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$this->api->getAppInfo('not_provisioning_api');
}
- public function testGetApps() {
+ public function testGetApps(): void {
$user = $this->generateUsers();
$this->groupManager->get('admin')->addUser($user);
$this->userSession->setUser($user);
@@ -70,13 +82,13 @@ class AppsControllerTest extends \OCA\Provisioning_API\Tests\TestCase {
$this->assertEquals(count((new \OC_App())->listAllApps()), count($data['apps']));
}
- public function testGetAppsEnabled() {
+ public function testGetAppsEnabled(): void {
$result = $this->api->getApps('enabled');
$data = $result->getData();
$this->assertEquals(count(\OC_App::getEnabledApps()), count($data['apps']));
}
- public function testGetAppsDisabled() {
+ public function testGetAppsDisabled(): void {
$result = $this->api->getApps('disabled');
$data = $result->getData();
$apps = (new \OC_App)->listAllApps();
@@ -88,9 +100,9 @@ class AppsControllerTest extends \OCA\Provisioning_API\Tests\TestCase {
$this->assertEquals(count($disabled), count($data['apps']));
}
-
- public function testGetAppsInvalidFilter() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+
+ public function testGetAppsInvalidFilter(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$this->api->getApps('foo');
diff --git a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
index 6a66df3a7d2..85e5d733b1f 100644
--- a/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/GroupsControllerTest.php
@@ -8,41 +8,36 @@
namespace OCA\Provisioning_API\Tests\Controller;
use OC\Group\Manager;
-use OC\SubAdmin;
use OC\User\NoUserException;
use OCA\Provisioning_API\Controller\GroupsController;
use OCP\Accounts\IAccountManager;
+use OCP\AppFramework\OCS\OCSException;
+use OCP\Files\IRootFolder;
+use OCP\Group\ISubAdmin;
use OCP\IConfig;
+use OCP\IGroup;
use OCP\IRequest;
use OCP\IUser;
use OCP\IUserManager;
use OCP\IUserSession;
use OCP\L10N\IFactory;
use OCP\UserInterface;
+use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
class GroupsControllerTest extends \Test\TestCase {
- /** @var IRequest|\PHPUnit\Framework\MockObject\MockObject */
- protected $request;
- /** @var IUserManager|\PHPUnit\Framework\MockObject\MockObject */
- protected $userManager;
- /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
- protected $config;
- /** @var Manager|\PHPUnit\Framework\MockObject\MockObject */
- protected $groupManager;
- /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
- protected $userSession;
- /** @var IAccountManager|\PHPUnit\Framework\MockObject\MockObject */
- protected $accountManager;
- /** @var IFactory|\PHPUnit\Framework\MockObject\MockObject */
- protected $l10nFactory;
- /** @var LoggerInterface|\PHPUnit\Framework\MockObject\MockObject */
- protected $logger;
- /** @var SubAdmin|\PHPUnit\Framework\MockObject\MockObject */
- protected $subAdminManager;
-
- /** @var GroupsController|\PHPUnit\Framework\MockObject\MockObject */
- protected $api;
+ protected IRequest&MockObject $request;
+ protected IUserManager&MockObject $userManager;
+ protected IConfig&MockObject $config;
+ protected Manager&MockObject $groupManager;
+ protected IUserSession&MockObject $userSession;
+ protected IAccountManager&MockObject $accountManager;
+ protected ISubAdmin&MockObject $subAdminManager;
+ protected IFactory&MockObject $l10nFactory;
+ protected LoggerInterface&MockObject $logger;
+ protected GroupsController&MockObject $api;
+
+ private IRootFolder $rootFolder;
protected function setUp(): void {
@@ -54,14 +49,14 @@ class GroupsControllerTest extends \Test\TestCase {
$this->groupManager = $this->createMock(Manager::class);
$this->userSession = $this->createMock(IUserSession::class);
$this->accountManager = $this->createMock(IAccountManager::class);
+ $this->subAdminManager = $this->createMock(ISubAdmin::class);
$this->l10nFactory = $this->createMock(IFactory::class);
$this->logger = $this->createMock(LoggerInterface::class);
-
- $this->subAdminManager = $this->createMock(SubAdmin::class);
+ $this->rootFolder = $this->createMock(IRootFolder::class);
$this->groupManager
- ->method('getSubAdmin')
- ->willReturn($this->subAdminManager);
+ ->method('getSubAdmin')
+ ->willReturn($this->subAdminManager);
$this->api = $this->getMockBuilder(GroupsController::class)
->setConstructorArgs([
@@ -72,25 +67,23 @@ class GroupsControllerTest extends \Test\TestCase {
$this->groupManager,
$this->userSession,
$this->accountManager,
+ $this->subAdminManager,
$this->l10nFactory,
+ $this->rootFolder,
$this->logger
])
- ->setMethods(['fillStorageInfo'])
+ ->onlyMethods(['fillStorageInfo'])
->getMock();
}
- /**
- * @param string $gid
- * @return \OCP\IGroup|\PHPUnit\Framework\MockObject\MockObject
- */
- private function createGroup($gid) {
- $group = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
+ private function createGroup(string $gid): IGroup&MockObject {
+ $group = $this->createMock(IGroup::class);
$group
->method('getGID')
->willReturn($gid);
$group
->method('getDisplayName')
- ->willReturn($gid.'-name');
+ ->willReturn($gid . '-name');
$group
->method('count')
->willReturn(123);
@@ -109,7 +102,7 @@ class GroupsControllerTest extends \Test\TestCase {
/**
* @param string $uid
- * @return \OCP\IUser|\PHPUnit\Framework\MockObject\MockObject
+ * @return IUser&MockObject
*/
private function createUser($uid) {
$user = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -158,7 +151,7 @@ class GroupsControllerTest extends \Test\TestCase {
});
}
- public function dataGetGroups() {
+ public static function dataGetGroups(): array {
return [
[null, 0, 0],
['foo', 0, 0],
@@ -168,14 +161,8 @@ class GroupsControllerTest extends \Test\TestCase {
];
}
- /**
- * @dataProvider dataGetGroups
- *
- * @param string|null $search
- * @param int|null $limit
- * @param int|null $offset
- */
- public function testGetGroups($search, $limit, $offset) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetGroups')]
+ public function testGetGroups(?string $search, int $limit, int $offset): void {
$groups = [$this->createGroup('group1'), $this->createGroup('group2')];
$search = $search === null ? '' : $search;
@@ -191,13 +178,13 @@ class GroupsControllerTest extends \Test\TestCase {
}
/**
- * @dataProvider dataGetGroups
*
* @param string|null $search
* @param int|null $limit
* @param int|null $offset
*/
- public function testGetGroupsDetails($search, $limit, $offset) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetGroups')]
+ public function testGetGroupsDetails($search, $limit, $offset): void {
$groups = [$this->createGroup('group1'), $this->createGroup('group2')];
$search = $search === null ? '' : $search;
@@ -229,7 +216,7 @@ class GroupsControllerTest extends \Test\TestCase {
]], $result->getData());
}
- public function testGetGroupAsSubadmin() {
+ public function testGetGroupAsSubadmin(): void {
$group = $this->createGroup('group');
$this->asSubAdminOfGroup($group);
@@ -254,8 +241,8 @@ class GroupsControllerTest extends \Test\TestCase {
}
- public function testGetGroupAsIrrelevantSubadmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetGroupAsIrrelevantSubadmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(403);
$group = $this->createGroup('group');
@@ -274,7 +261,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->getGroup('group');
}
- public function testGetGroupAsAdmin() {
+ public function testGetGroupAsAdmin(): void {
$group = $this->createGroup('group');
$this->asAdmin();
@@ -299,8 +286,8 @@ class GroupsControllerTest extends \Test\TestCase {
}
- public function testGetGroupNonExisting() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetGroupNonExisting(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('The requested group could not be found');
$this->expectExceptionCode(404);
@@ -310,15 +297,15 @@ class GroupsControllerTest extends \Test\TestCase {
}
- public function testGetSubAdminsOfGroupsNotExists() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetSubAdminsOfGroupsNotExists(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Group does not exist');
$this->expectExceptionCode(101);
$this->api->getSubAdminsOfGroup('NonExistingGroup');
}
- public function testGetSubAdminsOfGroup() {
+ public function testGetSubAdminsOfGroup(): void {
$group = $this->createGroup('GroupWithSubAdmins');
$this->groupManager
->method('get')
@@ -338,7 +325,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->assertEquals(['SubAdmin1', 'SubAdmin2'], $result->getData());
}
- public function testGetSubAdminsOfGroupEmptyList() {
+ public function testGetSubAdminsOfGroupEmptyList(): void {
$group = $this->createGroup('GroupWithOutSubAdmins');
$this->groupManager
->method('get')
@@ -357,8 +344,8 @@ class GroupsControllerTest extends \Test\TestCase {
}
- public function testAddGroupEmptyGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddGroupEmptyGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Invalid group name');
$this->expectExceptionCode(101);
@@ -366,8 +353,8 @@ class GroupsControllerTest extends \Test\TestCase {
}
- public function testAddGroupExistingGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddGroupExistingGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(102);
$this->groupManager
@@ -378,7 +365,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->addGroup('ExistingGroup');
}
- public function testAddGroup() {
+ public function testAddGroup(): void {
$this->groupManager
->method('groupExists')
->with('NewGroup')
@@ -394,7 +381,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->addGroup('NewGroup');
}
- public function testAddGroupWithSpecialChar() {
+ public function testAddGroupWithSpecialChar(): void {
$this->groupManager
->method('groupExists')
->with('Iñtërnâtiônàlizætiøn')
@@ -411,16 +398,16 @@ class GroupsControllerTest extends \Test\TestCase {
}
- public function testDeleteGroupNonExisting() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteGroupNonExisting(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$this->api->deleteGroup('NonExistingGroup');
}
- public function testDeleteAdminGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteAdminGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(102);
$this->groupManager
@@ -431,7 +418,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->deleteGroup('admin');
}
- public function testDeleteGroup() {
+ public function testDeleteGroup(): void {
$this->groupManager
->method('groupExists')
->with('ExistingGroup')
@@ -450,7 +437,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->deleteGroup('ExistingGroup');
}
- public function testDeleteGroupEncoding() {
+ public function testDeleteGroupEncoding(): void {
$this->groupManager
->method('groupExists')
->with('ExistingGroup A/B')
@@ -469,7 +456,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->deleteGroup(urlencode('ExistingGroup A/B'));
}
- public function testGetGroupUsersDetails() {
+ public function testGetGroupUsersDetails(): void {
$gid = 'ncg1';
$this->asAdmin();
@@ -502,7 +489,7 @@ class GroupsControllerTest extends \Test\TestCase {
->method('getUserGroups')
->willReturn([$group]);
- /** @var \PHPUnit\Framework\MockObject\MockObject */
+ /** @var MockObject */
$this->subAdminManager->expects($this->any())
->method('isSubAdminOfGroup')
->willReturn(false);
@@ -514,7 +501,7 @@ class GroupsControllerTest extends \Test\TestCase {
$this->api->getGroupUsersDetails($gid);
}
- public function testGetGroupUsersDetailsEncoded() {
+ public function testGetGroupUsersDetailsEncoded(): void {
$gid = 'Department A/B C/D';
$this->asAdmin();
@@ -547,7 +534,7 @@ class GroupsControllerTest extends \Test\TestCase {
->method('getUserGroups')
->willReturn([$group]);
- /** @var \PHPUnit\Framework\MockObject\MockObject */
+ /** @var MockObject */
$this->subAdminManager->expects($this->any())
->method('isSubAdminOfGroup')
->willReturn(false);
diff --git a/apps/provisioning_api/tests/Controller/UsersControllerTest.php b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
index 978530e55e1..0c0a0ae3d74 100644
--- a/apps/provisioning_api/tests/Controller/UsersControllerTest.php
+++ b/apps/provisioning_api/tests/Controller/UsersControllerTest.php
@@ -20,9 +20,12 @@ use OCP\Accounts\IAccount;
use OCP\Accounts\IAccountManager;
use OCP\Accounts\IAccountProperty;
use OCP\Accounts\IAccountPropertyCollection;
+use OCP\App\IAppManager;
use OCP\AppFramework\Http\DataResponse;
use OCP\AppFramework\OCS\OCSException;
use OCP\EventDispatcher\IEventDispatcher;
+use OCP\Files\IRootFolder;
+use OCP\Group\ISubAdmin;
use OCP\IConfig;
use OCP\IGroup;
use OCP\IL10N;
@@ -40,41 +43,29 @@ use OCP\User\Backend\ISetDisplayNameBackend;
use OCP\UserInterface;
use PHPUnit\Framework\MockObject\MockObject;
use Psr\Log\LoggerInterface;
+use RuntimeException;
use Test\TestCase;
class UsersControllerTest extends TestCase {
- /** @var IUserManager|MockObject */
- protected $userManager;
- /** @var IConfig|MockObject */
- protected $config;
- /** @var Manager|MockObject */
- protected $groupManager;
- /** @var IUserSession|MockObject */
- protected $userSession;
- /** @var LoggerInterface|MockObject */
- protected $logger;
- /** @var UsersController|MockObject */
- protected $api;
- /** @var IAccountManager|MockObject */
- protected $accountManager;
- /** @var IURLGenerator|MockObject */
- protected $urlGenerator;
- /** @var IRequest|MockObject */
- protected $request;
- /** @var IFactory|MockObject */
- private $l10nFactory;
- /** @var NewUserMailHelper|MockObject */
- private $newUserMailHelper;
- /** @var ISecureRandom|MockObject */
- private $secureRandom;
- /** @var RemoteWipe|MockObject */
- private $remoteWipe;
- /** @var KnownUserService|MockObject */
- private $knownUserService;
- /** @var IEventDispatcher|MockObject */
- private $eventDispatcher;
- /** @var IPhoneNumberUtil */
- private $phoneNumberUtil;
+ protected IUserManager&MockObject $userManager;
+ protected IConfig&MockObject $config;
+ protected Manager&MockObject $groupManager;
+ protected IUserSession&MockObject $userSession;
+ protected LoggerInterface&MockObject $logger;
+ protected UsersController&MockObject $api;
+ protected IAccountManager&MockObject $accountManager;
+ protected ISubAdmin&MockObject $subAdminManager;
+ protected IURLGenerator&MockObject $urlGenerator;
+ protected IRequest&MockObject $request;
+ private IFactory&MockObject $l10nFactory;
+ private NewUserMailHelper&MockObject $newUserMailHelper;
+ private ISecureRandom&MockObject $secureRandom;
+ private RemoteWipe&MockObject $remoteWipe;
+ private KnownUserService&MockObject $knownUserService;
+ private IEventDispatcher&MockObject $eventDispatcher;
+ private IRootFolder $rootFolder;
+ private IPhoneNumberUtil $phoneNumberUtil;
+ private IAppManager $appManager;
protected function setUp(): void {
parent::setUp();
@@ -86,6 +77,7 @@ class UsersControllerTest extends TestCase {
$this->logger = $this->createMock(LoggerInterface::class);
$this->request = $this->createMock(IRequest::class);
$this->accountManager = $this->createMock(IAccountManager::class);
+ $this->subAdminManager = $this->createMock(ISubAdmin::class);
$this->urlGenerator = $this->createMock(IURLGenerator::class);
$this->l10nFactory = $this->createMock(IFactory::class);
$this->newUserMailHelper = $this->createMock(NewUserMailHelper::class);
@@ -94,6 +86,8 @@ class UsersControllerTest extends TestCase {
$this->knownUserService = $this->createMock(KnownUserService::class);
$this->eventDispatcher = $this->createMock(IEventDispatcher::class);
$this->phoneNumberUtil = new PhoneNumberUtil();
+ $this->appManager = $this->createMock(IAppManager::class);
+ $this->rootFolder = $this->createMock(IRootFolder::class);
$l10n = $this->createMock(IL10N::class);
$l10n->method('t')->willReturnCallback(fn (string $txt, array $replacement = []) => sprintf($txt, ...$replacement));
@@ -108,7 +102,9 @@ class UsersControllerTest extends TestCase {
$this->groupManager,
$this->userSession,
$this->accountManager,
+ $this->subAdminManager,
$this->l10nFactory,
+ $this->rootFolder,
$this->urlGenerator,
$this->logger,
$this->newUserMailHelper,
@@ -117,12 +113,13 @@ class UsersControllerTest extends TestCase {
$this->knownUserService,
$this->eventDispatcher,
$this->phoneNumberUtil,
+ $this->appManager,
])
->onlyMethods(['fillStorageInfo'])
->getMock();
}
- public function testGetUsersAsAdmin() {
+ public function testGetUsersAsAdmin(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -154,7 +151,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals($expected, $this->api->getUsers('MyCustomSearch')->getData());
}
- public function testGetUsersAsSubAdmin() {
+ public function testGetUsersAsSubAdmin(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -202,8 +199,7 @@ class UsersControllerTest extends TestCase {
->willReturn($subAdminManager);
$this->groupManager
->expects($this->any())
- ->method('displayNamesInGroup')
- ->will($this->onConsecutiveCalls(['AnotherUserInTheFirstGroup' => []], ['UserInTheSecondGroup' => []]));
+ ->method('displayNamesInGroup')->willReturnOnConsecutiveCalls(['AnotherUserInTheFirstGroup' => []], ['UserInTheSecondGroup' => []]);
$expected = [
'users' => [
@@ -214,9 +210,134 @@ 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),
+ ]);
- public function testAddUserAlreadyExisting() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ $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(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(102);
$this->userManager
@@ -232,7 +353,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -249,8 +370,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddUserNonExistingGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddUserNonExistingGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Group NonExistingGroup does not exist');
$this->expectExceptionCode(104);
@@ -263,7 +384,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -285,8 +406,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddUserExistingGroupNonExistingGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddUserExistingGroupNonExistingGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Group NonExistingGroup does not exist');
$this->expectExceptionCode(104);
@@ -299,7 +420,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -314,10 +435,6 @@ class UsersControllerTest extends TestCase {
$this->groupManager
->expects($this->exactly(2))
->method('groupExists')
- ->withConsecutive(
- ['ExistingGroup'],
- ['NonExistingGroup']
- )
->willReturnMap([
['ExistingGroup', true],
['NonExistingGroup', false]
@@ -326,7 +443,7 @@ class UsersControllerTest extends TestCase {
$this->api->addUser('NewUser', 'pass', '', '', ['ExistingGroup', 'NonExistingGroup']);
}
- public function testAddUserSuccessful() {
+ public function testAddUserSuccessful(): void {
$this->userManager
->expects($this->once())
->method('userExists')
@@ -335,7 +452,8 @@ class UsersControllerTest extends TestCase {
$this->userManager
->expects($this->once())
->method('createUser')
- ->with('NewUser', 'PasswordOfTheNewUser');
+ ->with('NewUser', 'PasswordOfTheNewUser')
+ ->willReturn($this->createMock(IUser::class));
$this->logger
->expects($this->once())
->method('info')
@@ -344,7 +462,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -363,7 +481,7 @@ class UsersControllerTest extends TestCase {
));
}
- public function testAddUserSuccessfulWithDisplayName() {
+ public function testAddUserSuccessfulWithDisplayName(): void {
/**
* @var UserController
*/
@@ -376,7 +494,9 @@ class UsersControllerTest extends TestCase {
$this->groupManager,
$this->userSession,
$this->accountManager,
+ $this->subAdminManager,
$this->l10nFactory,
+ $this->rootFolder,
$this->urlGenerator,
$this->logger,
$this->newUserMailHelper,
@@ -385,6 +505,7 @@ class UsersControllerTest extends TestCase {
$this->knownUserService,
$this->eventDispatcher,
$this->phoneNumberUtil,
+ $this->appManager,
])
->onlyMethods(['editUser'])
->getMock();
@@ -397,7 +518,8 @@ class UsersControllerTest extends TestCase {
$this->userManager
->expects($this->once())
->method('createUser')
- ->with('NewUser', 'PasswordOfTheNewUser');
+ ->with('NewUser', 'PasswordOfTheNewUser')
+ ->willReturn($this->createMock(IUser::class));
$this->logger
->expects($this->once())
->method('info')
@@ -429,7 +551,7 @@ class UsersControllerTest extends TestCase {
));
}
- public function testAddUserSuccessfulGenerateUserID() {
+ public function testAddUserSuccessfulGenerateUserID(): void {
$this->config
->expects($this->any())
->method('getAppValue')
@@ -447,7 +569,8 @@ class UsersControllerTest extends TestCase {
$this->userManager
->expects($this->once())
->method('createUser')
- ->with($this->anything(), 'PasswordOfTheNewUser');
+ ->with($this->anything(), 'PasswordOfTheNewUser')
+ ->willReturn($this->createMock(IUser::class));
$this->logger
->expects($this->once())
->method('info')
@@ -456,7 +579,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -481,7 +604,7 @@ class UsersControllerTest extends TestCase {
));
}
- public function testAddUserSuccessfulGeneratePassword() {
+ public function testAddUserSuccessfulGeneratePassword(): void {
$this->userManager
->expects($this->once())
->method('userExists')
@@ -489,7 +612,7 @@ class UsersControllerTest extends TestCase {
->willReturn(false);
$newUser = $this->createMock(IUser::class);
$newUser->expects($this->once())
- ->method('setEMailAddress');
+ ->method('setSystemEMailAddress');
$this->userManager
->expects($this->once())
->method('createUser')
@@ -502,7 +625,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -525,9 +648,54 @@ class UsersControllerTest extends TestCase {
));
}
+ public function testAddUserSuccessfulLowercaseEmail(): void {
+ $this->userManager
+ ->expects($this->once())
+ ->method('userExists')
+ ->with('NewUser')
+ ->willReturn(false);
+ $newUser = $this->createMock(IUser::class);
+ $newUser->expects($this->once())
+ ->method('setSystemEMailAddress')
+ ->with('foo@bar.com');
+ $this->userManager
+ ->expects($this->once())
+ ->method('createUser')
+ ->willReturn($newUser);
+ $this->logger
+ ->expects($this->once())
+ ->method('info')
+ ->with('Successful addUser call with userid: NewUser', ['app' => 'ocs_api']);
+ $loggedInUser = $this->getMockBuilder(IUser::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+ $loggedInUser
+ ->expects($this->exactly(2))
+ ->method('getUID')
+ ->willReturn('adminUser');
+ $this->userSession
+ ->expects($this->once())
+ ->method('getUser')
+ ->willReturn($loggedInUser);
+ $this->groupManager
+ ->expects($this->once())
+ ->method('isAdmin')
+ ->with('adminUser')
+ ->willReturn(true);
+ $this->eventDispatcher
+ ->expects($this->once())
+ ->method('dispatchTyped')
+ ->with(new GenerateSecurePasswordEvent());
+
+ $this->assertTrue(key_exists(
+ 'id',
+ $this->api->addUser('NewUser', '', '', 'fOo@BaR.CoM')->getData()
+ ));
+ }
+
- public function testAddUserFailedToGenerateUserID() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddUserFailedToGenerateUserID(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Could not create non-existing user ID');
$this->expectExceptionCode(111);
@@ -552,7 +720,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -569,8 +737,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddUserEmailRequired() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddUserEmailRequired(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Required email address was not provided');
$this->expectExceptionCode(110);
@@ -595,7 +763,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -614,7 +782,7 @@ class UsersControllerTest extends TestCase {
));
}
- public function testAddUserExistingGroup() {
+ public function testAddUserExistingGroup(): void {
$this->userManager
->expects($this->once())
->method('userExists')
@@ -624,7 +792,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -661,23 +829,25 @@ class UsersControllerTest extends TestCase {
->method('get')
->with('ExistingGroup')
->willReturn($group);
+
+ $calls = [
+ ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']],
+ ['Added userid NewUser to group ExistingGroup', ['app' => 'ocs_api']],
+ ];
$this->logger
->expects($this->exactly(2))
->method('info')
- ->withConsecutive(
- ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']],
- ['Added userid NewUser to group ExistingGroup', ['app' => 'ocs_api']]
- );
+ ->willReturnCallback(function () use (&$calls): void {
+ $expected = array_shift($calls);
+ $this->assertEquals($expected, func_get_args());
+ });
- $this->assertTrue(key_exists(
- 'id',
- $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup'])->getData()
- ));
+ $this->assertArrayHasKey('id', $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup'])->getData());
}
- public function testAddUserUnsuccessful() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddUserUnsuccessful(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Bad request');
$this->expectExceptionCode(101);
@@ -691,7 +861,7 @@ class UsersControllerTest extends TestCase {
->expects($this->once())
->method('createUser')
->with('NewUser', 'PasswordOfTheNewUser')
- ->will($this->throwException($exception));
+ ->willThrowException($exception);
$this->logger
->expects($this->once())
->method('error')
@@ -706,7 +876,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('adminUser');
$this->userSession
@@ -723,8 +893,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddUserAsSubAdminNoGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddUserAsSubAdminNoGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('No group specified (required for sub-admins)');
$this->expectExceptionCode(106);
@@ -732,7 +902,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('regularUser');
$this->userSession
@@ -756,8 +926,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddUserAsSubAdminValidGroupNotSubAdmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddUserAsSubAdminValidGroupNotSubAdmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Insufficient privileges for group ExistingGroup');
$this->expectExceptionCode(105);
@@ -765,7 +935,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('regularUser');
$this->userSession
@@ -804,7 +974,7 @@ class UsersControllerTest extends TestCase {
$this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup'])->getData();
}
- public function testAddUserAsSubAdminExistingGroups() {
+ public function testAddUserAsSubAdminExistingGroups(): void {
$this->userManager
->expects($this->once())
->method('userExists')
@@ -814,7 +984,7 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('subAdminUser');
$this->userSession
@@ -829,11 +999,10 @@ class UsersControllerTest extends TestCase {
$this->groupManager
->expects($this->exactly(2))
->method('groupExists')
- ->withConsecutive(
- ['ExistingGroup1'],
- ['ExistingGroup2']
- )
- ->willReturn(true);
+ ->willReturnMap([
+ ['ExistingGroup1', true],
+ ['ExistingGroup2', true]
+ ]);
$user = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -859,24 +1028,23 @@ class UsersControllerTest extends TestCase {
$this->groupManager
->expects($this->exactly(4))
->method('get')
- ->withConsecutive(
- ['ExistingGroup1'],
- ['ExistingGroup2'],
- ['ExistingGroup1'],
- ['ExistingGroup2']
- )
->willReturnMap([
['ExistingGroup1', $existingGroup1],
['ExistingGroup2', $existingGroup2]
]);
+
+ $calls = [
+ ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']],
+ ['Added userid NewUser to group ExistingGroup1', ['app' => 'ocs_api']],
+ ['Added userid NewUser to group ExistingGroup2', ['app' => 'ocs_api']],
+ ];
$this->logger
->expects($this->exactly(3))
->method('info')
- ->withConsecutive(
- ['Successful addUser call with userid: NewUser', ['app' => 'ocs_api']],
- ['Added userid NewUser to group ExistingGroup1', ['app' => 'ocs_api']],
- ['Added userid NewUser to group ExistingGroup2', ['app' => 'ocs_api']]
- );
+ ->willReturnCallback(function () use (&$calls): void {
+ $expected = array_shift($calls);
+ $this->assertEquals($expected, func_get_args());
+ });
$subAdminManager = $this->getMockBuilder('OC\SubAdmin')
->disableOriginalConstructor()->getMock();
$this->groupManager
@@ -886,21 +1054,17 @@ class UsersControllerTest extends TestCase {
$subAdminManager
->expects($this->exactly(2))
->method('isSubAdminOfGroup')
- ->withConsecutive(
- [$loggedInUser, $existingGroup1],
- [$loggedInUser, $existingGroup2]
- )
- ->willReturn(true);
+ ->willReturnMap([
+ [$loggedInUser, $existingGroup1, true],
+ [$loggedInUser, $existingGroup2, true],
+ ]);
- $this->assertTrue(key_exists(
- 'id',
- $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup1', 'ExistingGroup2'])->getData()
- ));
+ $this->assertArrayHasKey('id', $this->api->addUser('NewUser', 'PasswordOfTheNewUser', '', '', ['ExistingGroup1', 'ExistingGroup2'])->getData());
}
- public function testGetUserTargetDoesNotExist() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetUserTargetDoesNotExist(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('User does not exist');
$this->expectExceptionCode(404);
@@ -919,7 +1083,7 @@ class UsersControllerTest extends TestCase {
$this->api->getUser('UserToGet');
}
- public function testGetUserDataAsAdmin() {
+ public function testGetUserDataAsAdmin(): void {
$group0 = $this->createMock(IGroup::class);
$group1 = $this->createMock(IGroup::class);
$group2 = $this->createMock(IGroup::class);
@@ -931,7 +1095,6 @@ class UsersControllerTest extends TestCase {
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
->method('getUID')
->willReturn('admin');
$targetUser = $this->getMockBuilder(IUser::class)
@@ -941,16 +1104,13 @@ class UsersControllerTest extends TestCase {
->method('getSystemEMailAddress')
->willReturn('demo@nextcloud.com');
$this->userSession
- ->expects($this->once())
->method('getUser')
->willReturn($loggedInUser);
$this->userManager
- ->expects($this->exactly(2))
->method('get')
->with('UID')
->willReturn($targetUser);
$this->groupManager
- ->expects($this->once())
->method('isAdmin')
->with('admin')
->willReturn(true);
@@ -983,6 +1143,7 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
IAccountManager::PROPERTY_PHONE => ['value' => 'phone'],
IAccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ IAccountManager::PROPERTY_BLUESKY => ['value' => 'bluesky'],
IAccountManager::PROPERTY_FEDIVERSE => ['value' => 'fediverse'],
IAccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
IAccountManager::PROPERTY_ORGANISATION => ['value' => 'organisation'],
@@ -990,6 +1151,7 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_HEADLINE => ['value' => 'headline'],
IAccountManager::PROPERTY_BIOGRAPHY => ['value' => 'biography'],
IAccountManager::PROPERTY_PROFILE_ENABLED => ['value' => '1'],
+ IAccountManager::PROPERTY_PRONOUNS => ['value' => 'they/them'],
]);
$this->config
->method('getUserValue')
@@ -999,7 +1161,7 @@ class UsersControllerTest extends TestCase {
$this->api
->expects($this->once())
->method('fillStorageInfo')
- ->with('UID')
+ ->with($targetUser)
->willReturn(['DummyValue']);
$backend = $this->createMock(UserInterface::class);
@@ -1016,11 +1178,15 @@ class UsersControllerTest extends TestCase {
->method('getHome')
->willReturn('/var/www/newtcloud/data/UID');
$targetUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getLastLogin')
->willReturn(1521191471);
$targetUser
->expects($this->once())
+ ->method('getFirstLogin')
+ ->willReturn(1511191471);
+ $targetUser
+ ->expects($this->once())
->method('getBackendClassName')
->willReturn('Database');
$targetUser
@@ -1041,6 +1207,8 @@ class UsersControllerTest extends TestCase {
'id' => 'UID',
'enabled' => true,
'storageLocation' => '/var/www/newtcloud/data/UID',
+ 'firstLoginTimestamp' => 1511191471,
+ 'lastLoginTimestamp' => 1521191471,
'lastLogin' => 1521191471000,
'backend' => 'Database',
'subadmin' => ['group3'],
@@ -1052,6 +1220,7 @@ class UsersControllerTest extends TestCase {
'address' => 'address',
'website' => 'website',
'twitter' => 'twitter',
+ 'bluesky' => 'bluesky',
'fediverse' => 'fediverse',
'groups' => ['group0', 'group1', 'group2'],
'language' => 'de',
@@ -1068,16 +1237,16 @@ class UsersControllerTest extends TestCase {
'profile_enabled' => '1',
'notify_email' => null,
'manager' => '',
+ 'pronouns' => 'they/them',
];
$this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UID']));
}
- public function testGetUserDataAsSubAdminAndUserIsAccessible() {
+ public function testGetUserDataAsSubAdminAndUserIsAccessible(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->once())
->method('getUID')
->willReturn('subadmin');
$targetUser = $this->getMockBuilder(IUser::class)
@@ -1088,16 +1257,13 @@ class UsersControllerTest extends TestCase {
->method('getSystemEMailAddress')
->willReturn('demo@nextcloud.com');
$this->userSession
- ->expects($this->once())
->method('getUser')
->willReturn($loggedInUser);
$this->userManager
- ->expects($this->exactly(2))
->method('get')
->with('UID')
->willReturn($targetUser);
$this->groupManager
- ->expects($this->once())
->method('isAdmin')
->with('subadmin')
->willReturn(false);
@@ -1129,7 +1295,7 @@ class UsersControllerTest extends TestCase {
$this->api
->expects($this->once())
->method('fillStorageInfo')
- ->with('UID')
+ ->with($targetUser)
->willReturn(['DummyValue']);
$backend = $this->createMock(UserInterface::class);
@@ -1145,11 +1311,15 @@ class UsersControllerTest extends TestCase {
->expects($this->never())
->method('getHome');
$targetUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getLastLogin')
->willReturn(1521191471);
$targetUser
->expects($this->once())
+ ->method('getFirstLogin')
+ ->willReturn(1511191471);
+ $targetUser
+ ->expects($this->once())
->method('getBackendClassName')
->willReturn('Database');
$targetUser
@@ -1164,6 +1334,7 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
IAccountManager::PROPERTY_PHONE => ['value' => 'phone'],
IAccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ IAccountManager::PROPERTY_BLUESKY => ['value' => 'bluesky'],
IAccountManager::PROPERTY_FEDIVERSE => ['value' => 'fediverse'],
IAccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
IAccountManager::PROPERTY_ORGANISATION => ['value' => 'organisation'],
@@ -1171,6 +1342,7 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_HEADLINE => ['value' => 'headline'],
IAccountManager::PROPERTY_BIOGRAPHY => ['value' => 'biography'],
IAccountManager::PROPERTY_PROFILE_ENABLED => ['value' => '1'],
+ IAccountManager::PROPERTY_PRONOUNS => ['value' => 'they/them'],
]);
$this->l10nFactory
@@ -1182,6 +1354,8 @@ class UsersControllerTest extends TestCase {
$expected = [
'id' => 'UID',
'enabled' => true,
+ 'firstLoginTimestamp' => 1511191471,
+ 'lastLoginTimestamp' => 1521191471,
'lastLogin' => 1521191471000,
'backend' => 'Database',
'subadmin' => [],
@@ -1193,6 +1367,7 @@ class UsersControllerTest extends TestCase {
'address' => 'address',
'website' => 'website',
'twitter' => 'twitter',
+ 'bluesky' => 'bluesky',
'fediverse' => 'fediverse',
'groups' => [],
'language' => 'da',
@@ -1209,21 +1384,22 @@ class UsersControllerTest extends TestCase {
'profile_enabled' => '1',
'notify_email' => null,
'manager' => '',
+ 'pronouns' => 'they/them',
];
$this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UID']));
}
- public function testGetUserDataAsSubAdminAndUserIsNotAccessible() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetUserDataAsSubAdminAndUserIsNotAccessible(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->exactly(3))
+ ->expects($this->exactly(4))
->method('getUID')
->willReturn('subadmin');
$targetUser = $this->getMockBuilder(IUser::class)
@@ -1258,28 +1434,24 @@ class UsersControllerTest extends TestCase {
$this->invokePrivate($this->api, 'getUser', ['UserToGet']);
}
- public function testGetUserDataAsSubAdminSelfLookup() {
+ public function testGetUserDataAsSubAdminSelfLookup(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->exactly(2))
->method('getUID')
->willReturn('UID');
$targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$this->userSession
- ->expects($this->once())
->method('getUser')
->willReturn($loggedInUser);
$this->userManager
- ->expects($this->exactly(2))
->method('get')
->with('UID')
->willReturn($targetUser);
$this->groupManager
- ->expects($this->once())
->method('isAdmin')
->with('UID')
->willReturn(false);
@@ -1306,7 +1478,7 @@ class UsersControllerTest extends TestCase {
$this->api
->expects($this->once())
->method('fillStorageInfo')
- ->with('UID')
+ ->with($targetUser)
->willReturn(['DummyValue']);
$backend = $this->createMock(UserInterface::class);
@@ -1329,11 +1501,15 @@ class UsersControllerTest extends TestCase {
->expects($this->never())
->method('getHome');
$targetUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getLastLogin')
->willReturn(1521191471);
$targetUser
->expects($this->once())
+ ->method('getFirstLogin')
+ ->willReturn(1511191471);
+ $targetUser
+ ->expects($this->once())
->method('getBackendClassName')
->willReturn('Database');
$targetUser
@@ -1344,6 +1520,7 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_ADDRESS => ['value' => 'address'],
IAccountManager::PROPERTY_PHONE => ['value' => 'phone'],
IAccountManager::PROPERTY_TWITTER => ['value' => 'twitter'],
+ IAccountManager::PROPERTY_BLUESKY => ['value' => 'bluesky'],
IAccountManager::PROPERTY_FEDIVERSE => ['value' => 'fediverse'],
IAccountManager::PROPERTY_WEBSITE => ['value' => 'website'],
IAccountManager::PROPERTY_ORGANISATION => ['value' => 'organisation'],
@@ -1351,6 +1528,7 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_HEADLINE => ['value' => 'headline'],
IAccountManager::PROPERTY_BIOGRAPHY => ['value' => 'biography'],
IAccountManager::PROPERTY_PROFILE_ENABLED => ['value' => '1'],
+ IAccountManager::PROPERTY_PRONOUNS => ['value' => 'they/them'],
]);
$this->l10nFactory
@@ -1361,6 +1539,8 @@ class UsersControllerTest extends TestCase {
$expected = [
'id' => 'UID',
+ 'firstLoginTimestamp' => 1511191471,
+ 'lastLoginTimestamp' => 1521191471,
'lastLogin' => 1521191471000,
'backend' => 'Database',
'subadmin' => [],
@@ -1372,6 +1552,7 @@ class UsersControllerTest extends TestCase {
'address' => 'address',
'website' => 'website',
'twitter' => 'twitter',
+ 'bluesky' => 'bluesky',
'fediverse' => 'fediverse',
'groups' => [],
'language' => 'ru',
@@ -1388,11 +1569,12 @@ class UsersControllerTest extends TestCase {
'profile_enabled' => '1',
'notify_email' => null,
'manager' => '',
+ 'pronouns' => 'they/them',
];
$this->assertEquals($expected, $this->invokePrivate($this->api, 'getUserData', ['UID']));
}
- public function dataSearchByPhoneNumbers(): array {
+ public static function dataSearchByPhoneNumbers(): array {
return [
'Invalid country' => ['Not a country code', ['12345' => ['NaN']], 400, null, null, []],
'No number to search' => ['DE', ['12345' => ['NaN']], 200, null, null, []],
@@ -1405,14 +1587,8 @@ class UsersControllerTest extends TestCase {
];
}
- /**
- * @dataProvider dataSearchByPhoneNumbers
- * @param string $location
- * @param array $search
- * @param int $status
- * @param array $expected
- */
- public function testSearchByPhoneNumbers(string $location, array $search, int $status, ?array $searchUsers, ?array $userMatches, array $expected) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataSearchByPhoneNumbers')]
+ public function testSearchByPhoneNumbers(string $location, array $search, int $status, ?array $searchUsers, ?array $userMatches, array $expected): void {
$knownTo = 'knownTo';
$user = $this->createMock(IUser::class);
$user->method('getUID')
@@ -1448,7 +1624,7 @@ class UsersControllerTest extends TestCase {
self::assertEquals($expected, $response->getData());
}
- public function testEditUserRegularUserSelfEditChangeDisplayName() {
+ public function testEditUserRegularUserSelfEditChangeDisplayName(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -1485,7 +1661,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'display', 'NewDisplayName')->getData());
}
- public function testEditUserRegularUserSelfEditChangeEmailValid() {
+ public function testEditUserRegularUserSelfEditChangeEmailValid(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -1507,7 +1683,7 @@ class UsersControllerTest extends TestCase {
->willReturn($targetUser);
$targetUser
->expects($this->once())
- ->method('setEMailAddress')
+ ->method('setSystemEMailAddress')
->with('demo@nextcloud.com');
$targetUser
->expects($this->any())
@@ -1520,6 +1696,8 @@ class UsersControllerTest extends TestCase {
->method('getBackend')
->willReturn($backend);
+ $this->config->method('getSystemValue')->willReturnCallback(fn (string $key, mixed $default) => $default);
+
$this->assertEquals([], $this->api->editUser('UserToEdit', 'email', 'demo@nextcloud.com')->getData());
}
@@ -1617,7 +1795,7 @@ class UsersControllerTest extends TestCase {
->with($userAccount);
$this->expectException(OCSException::class);
- $this->expectExceptionCode(102);
+ $this->expectExceptionCode(101);
$this->api->editUser('UserToEdit', 'additional_mail', 'demo@nextcloud.com')->getData();
}
@@ -1676,13 +1854,13 @@ class UsersControllerTest extends TestCase {
->with($userAccount);
$this->expectException(OCSException::class);
- $this->expectExceptionCode(102);
+ $this->expectExceptionCode(101);
$this->api->editUser('UserToEdit', 'additional_mail', 'demo1@nextcloud.com')->getData();
}
- public function testEditUserRegularUserSelfEditChangeEmailInvalid() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionCode(102);
+ public function testEditUserRegularUserSelfEditChangeEmailInvalid(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
@@ -1714,12 +1892,15 @@ class UsersControllerTest extends TestCase {
->method('getBackend')
->willReturn($backend);
+ $this->config->method('getSystemValue')->willReturnCallback(fn (string $key, mixed $default) => $default);
+
$this->api->editUser('UserToEdit', 'email', 'demo.org');
}
- public function selfEditChangePropertyProvider() {
+ public static function selfEditChangePropertyProvider(): array {
return [
[IAccountManager::PROPERTY_TWITTER, '@oldtwitter', '@newtwitter'],
+ [IAccountManager::PROPERTY_BLUESKY, 'old.bluesky', 'new.bluesky'],
[IAccountManager::PROPERTY_FEDIVERSE, '@oldFediverse@floss.social', '@newFediverse@floss.social'],
[IAccountManager::PROPERTY_PHONE, '1234', '12345'],
[IAccountManager::PROPERTY_ADDRESS, 'Something street 2', 'Another street 3'],
@@ -1729,13 +1910,12 @@ class UsersControllerTest extends TestCase {
[IAccountManager::PROPERTY_HEADLINE, 'Hi', 'Hello'],
[IAccountManager::PROPERTY_BIOGRAPHY, 'A biography', 'Another biography'],
[IAccountManager::PROPERTY_PROFILE_ENABLED, '1', '0'],
+ [IAccountManager::PROPERTY_PRONOUNS, 'they/them', 'he/him'],
];
}
- /**
- * @dataProvider selfEditChangePropertyProvider
- */
- public function testEditUserRegularUserSelfEditChangeProperty($propertyName, $oldValue, $newValue) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('selfEditChangePropertyProvider')]
+ public function testEditUserRegularUserSelfEditChangeProperty($propertyName, $oldValue, $newValue): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -1797,6 +1977,7 @@ class UsersControllerTest extends TestCase {
[IAccountManager::PROPERTY_DISPLAYNAME, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_EMAIL, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_TWITTER, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
+ [IAccountManager::PROPERTY_BLUESKY, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_FEDIVERSE, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_PHONE, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_ADDRESS, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
@@ -1806,13 +1987,12 @@ class UsersControllerTest extends TestCase {
[IAccountManager::PROPERTY_HEADLINE, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_BIOGRAPHY, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
[IAccountManager::PROPERTY_PROFILE_ENABLED, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
+ [IAccountManager::PROPERTY_PRONOUNS, IAccountManager::SCOPE_LOCAL, IAccountManager::SCOPE_FEDERATED],
];
}
- /**
- * @dataProvider selfEditChangePropertyProvider
- */
- public function testEditUserRegularUserSelfEditChangePropertyScope($propertyName, $oldScope, $newScope) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('selfEditChangePropertyProvider')]
+ public function testEditUserRegularUserSelfEditChangePropertyScope($propertyName, $oldScope, $newScope): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -1868,7 +2048,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', $propertyName . 'Scope', $newScope)->getData());
}
- public function testEditUserRegularUserSelfEditChangePassword() {
+ public function testEditUserRegularUserSelfEditChangePassword(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
@@ -1912,9 +2092,9 @@ class UsersControllerTest extends TestCase {
- public function testEditUserRegularUserSelfEditChangeQuota() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
- $this->expectExceptionCode(103);
+ public function testEditUserRegularUserSelfEditChangeQuota(): void {
+ $this->expectException(OCSException::class);
+ $this->expectExceptionCode(113);
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
@@ -1949,7 +2129,7 @@ class UsersControllerTest extends TestCase {
$this->api->editUser('UserToEdit', 'quota', 'NewQuota');
}
- public function testEditUserAdminUserSelfEditChangeValidQuota() {
+ public function testEditUserAdminUserSelfEditChangeValidQuota(): void {
$this->config
->expects($this->once())
->method('getAppValue')
@@ -1998,10 +2178,10 @@ class UsersControllerTest extends TestCase {
- public function testEditUserAdminUserSelfEditChangeInvalidQuota() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testEditUserAdminUserSelfEditChangeInvalidQuota(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Invalid quota value: ABC');
- $this->expectExceptionCode(102);
+ $this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
@@ -2037,7 +2217,7 @@ class UsersControllerTest extends TestCase {
$this->api->editUser('UserToEdit', 'quota', 'ABC');
}
- public function testEditUserAdminUserEditChangeValidQuota() {
+ public function testEditUserAdminUserEditChangeValidQuota(): void {
$this->config
->expects($this->once())
->method('getAppValue')
@@ -2091,7 +2271,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'quota', '3042824')->getData());
}
- public function testEditUserSelfEditChangeLanguage() {
+ public function testEditUserSelfEditChangeLanguage(): void {
$this->l10nFactory->expects($this->once())
->method('findAvailableLanguages')
->willReturn(['en', 'de', 'sv']);
@@ -2139,18 +2319,16 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'language', 'de')->getData());
}
- public function dataEditUserSelfEditChangeLanguageButForced() {
+ public static function dataEditUserSelfEditChangeLanguageButForced(): array {
return [
['de'],
[true],
];
}
- /**
- * @dataProvider dataEditUserSelfEditChangeLanguageButForced
- */
- public function testEditUserSelfEditChangeLanguageButForced($forced) {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataEditUserSelfEditChangeLanguageButForced')]
+ public function testEditUserSelfEditChangeLanguageButForced($forced): void {
+ $this->expectException(OCSException::class);
$this->config->expects($this->any())
->method('getSystemValue')
@@ -2195,7 +2373,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'language', 'de')->getData());
}
- public function testEditUserAdminEditChangeLanguage() {
+ public function testEditUserAdminEditChangeLanguage(): void {
$this->l10nFactory->expects($this->once())
->method('findAvailableLanguages')
->willReturn(['en', 'de', 'sv']);
@@ -2242,11 +2420,9 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'language', 'de')->getData());
}
- /**
- * @dataProvider dataEditUserSelfEditChangeLanguageButForced
- */
- public function testEditUserAdminEditChangeLanguageInvalidLanguage() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataEditUserSelfEditChangeLanguageButForced')]
+ public function testEditUserAdminEditChangeLanguageInvalidLanguage(): void {
+ $this->expectException(OCSException::class);
$this->l10nFactory->expects($this->once())
@@ -2294,7 +2470,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->editUser('UserToEdit', 'language', 'ru')->getData());
}
- public function testEditUserSubadminUserAccessible() {
+ public function testEditUserSubadminUserAccessible(): void {
$this->config
->expects($this->once())
->method('getAppValue')
@@ -2349,8 +2525,8 @@ class UsersControllerTest extends TestCase {
}
- public function testEditUserSubadminUserInaccessible() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testEditUserSubadminUserInaccessible(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2389,8 +2565,8 @@ class UsersControllerTest extends TestCase {
}
- public function testDeleteUserNotExistingUser() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteUserNotExistingUser(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2412,8 +2588,8 @@ class UsersControllerTest extends TestCase {
}
- public function testDeleteUserSelf() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteUserSelf(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2439,7 +2615,7 @@ class UsersControllerTest extends TestCase {
$this->api->deleteUser('UserToDelete');
}
- public function testDeleteSuccessfulUserAsAdmin() {
+ public function testDeleteSuccessfulUserAsAdmin(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
@@ -2473,8 +2649,8 @@ class UsersControllerTest extends TestCase {
}
- public function testDeleteUnsuccessfulUserAsAdmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteUnsuccessfulUserAsAdmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2509,7 +2685,7 @@ class UsersControllerTest extends TestCase {
$this->api->deleteUser('UserToDelete');
}
- public function testDeleteSuccessfulUserAsSubadmin() {
+ public function testDeleteSuccessfulUserAsSubadmin(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
@@ -2554,8 +2730,8 @@ class UsersControllerTest extends TestCase {
}
- public function testDeleteUnsuccessfulUserAsSubadmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteUnsuccessfulUserAsSubadmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2602,8 +2778,8 @@ class UsersControllerTest extends TestCase {
}
- public function testDeleteUserAsSubAdminAndUserIsNotAccessible() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testDeleteUserAsSubAdminAndUserIsNotAccessible(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2646,8 +2822,8 @@ class UsersControllerTest extends TestCase {
}
- public function testGetUsersGroupsTargetUserNotExisting() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetUsersGroupsTargetUserNotExisting(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2659,10 +2835,10 @@ class UsersControllerTest extends TestCase {
$this->api->getUsersGroups('UserToLookup');
}
- public function testGetUsersGroupsSelfTargetted() {
+ public function testGetUsersGroupsSelfTargetted(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('UserToLookup');
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2688,10 +2864,10 @@ class UsersControllerTest extends TestCase {
$this->assertEquals(['groups' => ['DummyValue']], $this->api->getUsersGroups('UserToLookup')->getData());
}
- public function testGetUsersGroupsForAdminUser() {
+ public function testGetUsersGroupsForAdminUser(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->exactly(2))
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('admin');
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2722,10 +2898,10 @@ class UsersControllerTest extends TestCase {
$this->assertEquals(['groups' => ['DummyValue']], $this->api->getUsersGroups('UserToLookup')->getData());
}
- public function testGetUsersGroupsForSubAdminUserAndUserIsAccessible() {
+ public function testGetUsersGroupsForSubAdminUserAndUserIsAccessible(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->exactly(2))
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('subadmin');
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2783,13 +2959,13 @@ class UsersControllerTest extends TestCase {
}
- public function testGetUsersGroupsForSubAdminUserAndUserIsInaccessible() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetUsersGroupsForSubAdminUserAndUserIsInaccessible(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->exactly(2))
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('subadmin');
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -2832,8 +3008,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddToGroupWithTargetGroupNotExisting() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddToGroupWithTargetGroupNotExisting(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(102);
$this->groupManager->expects($this->once())
@@ -2845,16 +3021,16 @@ class UsersControllerTest extends TestCase {
}
- public function testAddToGroupWithNoGroupSpecified() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddToGroupWithNoGroupSpecified(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$this->api->addToGroup('TargetUser');
}
- public function testAddToGroupWithTargetUserNotExisting() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddToGroupWithTargetUserNotExisting(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(103);
$targetGroup = $this->createMock(IGroup::class);
@@ -2867,13 +3043,13 @@ class UsersControllerTest extends TestCase {
}
- public function testAddToGroupNoSubadmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddToGroupNoSubadmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(104);
$targetUser = $this->createMock(IUser::class);
$loggedInUser = $this->createMock(IUser::class);
- $loggedInUser->expects($this->once())
+ $loggedInUser->expects($this->exactly(2))
->method('getUID')
->willReturn('subadmin');
@@ -2914,10 +3090,10 @@ class UsersControllerTest extends TestCase {
$this->api->addToGroup('TargetUser', 'GroupToAddTo');
}
- public function testAddToGroupSuccessAsSubadmin() {
+ public function testAddToGroupSuccessAsSubadmin(): void {
$targetUser = $this->createMock(IUser::class);
$loggedInUser = $this->createMock(IUser::class);
- $loggedInUser->expects($this->once())
+ $loggedInUser->expects($this->exactly(2))
->method('getUID')
->willReturn('subadmin');
@@ -2958,10 +3134,10 @@ class UsersControllerTest extends TestCase {
$this->assertEquals(new DataResponse(), $this->api->addToGroup('TargetUser', 'GroupToAddTo'));
}
- public function testAddToGroupSuccessAsAdmin() {
+ public function testAddToGroupSuccessAsAdmin(): void {
$targetUser = $this->createMock(IUser::class);
$loggedInUser = $this->createMock(IUser::class);
- $loggedInUser->expects($this->once())
+ $loggedInUser->expects($this->exactly(2))
->method('getUID')
->willReturn('admin');
@@ -3001,8 +3177,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupWithNoTargetGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupWithNoTargetGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3015,8 +3191,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupWithEmptyTargetGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupWithEmptyTargetGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(101);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3029,8 +3205,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupWithNotExistingTargetGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupWithNotExistingTargetGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(102);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3048,8 +3224,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupWithNotExistingTargetUser() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupWithNotExistingTargetUser(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(103);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3073,13 +3249,13 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupWithoutPermission() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupWithoutPermission(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(104);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->once())
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('unauthorizedUser');
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
@@ -3114,8 +3290,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupAsAdminFromAdmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupAsAdminFromAdmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Cannot remove yourself from the admin group');
$this->expectExceptionCode(105);
@@ -3164,8 +3340,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupAsSubAdminFromSubAdmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupAsSubAdminFromSubAdmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Cannot remove yourself from this group as you are a sub-admin');
$this->expectExceptionCode(105);
@@ -3219,8 +3395,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveFromGroupAsSubAdminFromLastSubAdminGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveFromGroupAsSubAdminFromLastSubAdminGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Not viable to remove user from the last group you are sub-admin of');
$this->expectExceptionCode(105);
@@ -3280,7 +3456,7 @@ class UsersControllerTest extends TestCase {
$this->api->removeFromGroup('AnotherUser', 'subadmin');
}
- public function testRemoveFromGroupSuccessful() {
+ public function testRemoveFromGroupSuccessful(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
->expects($this->any())
@@ -3322,8 +3498,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddSubAdminWithNotExistingTargetUser() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddSubAdminWithNotExistingTargetUser(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('User does not exist');
$this->expectExceptionCode(101);
@@ -3337,8 +3513,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddSubAdminWithNotExistingTargetGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddSubAdminWithNotExistingTargetGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Group does not exist');
$this->expectExceptionCode(102);
@@ -3359,8 +3535,8 @@ class UsersControllerTest extends TestCase {
}
- public function testAddSubAdminToAdminGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testAddSubAdminToAdminGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Cannot create sub-admins for admin group');
$this->expectExceptionCode(103);
@@ -3384,7 +3560,7 @@ class UsersControllerTest extends TestCase {
$this->api->addSubAdmin('ExistingUser', 'ADmiN');
}
- public function testAddSubAdminTwice() {
+ public function testAddSubAdminTwice(): void {
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userManager
@@ -3412,7 +3588,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->addSubAdmin('ExistingUser', 'TargetGroup')->getData());
}
- public function testAddSubAdminSuccessful() {
+ public function testAddSubAdminSuccessful(): void {
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userManager
@@ -3445,8 +3621,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveSubAdminNotExistingTargetUser() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveSubAdminNotExistingTargetUser(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('User does not exist');
$this->expectExceptionCode(101);
@@ -3460,8 +3636,8 @@ class UsersControllerTest extends TestCase {
}
- public function testRemoveSubAdminNotExistingTargetGroup() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveSubAdminNotExistingTargetGroup(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Group does not exist');
$this->expectExceptionCode(101);
@@ -3482,8 +3658,8 @@ class UsersControllerTest extends TestCase {
- public function testRemoveSubAdminFromNotASubadmin() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testRemoveSubAdminFromNotASubadmin(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('User is not a sub-admin of this group');
$this->expectExceptionCode(102);
@@ -3514,7 +3690,7 @@ class UsersControllerTest extends TestCase {
$this->api->removeSubAdmin('ExistingUser', 'GroupToDeleteFrom');
}
- public function testRemoveSubAdminSuccessful() {
+ public function testRemoveSubAdminSuccessful(): void {
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$this->userManager
@@ -3547,8 +3723,8 @@ class UsersControllerTest extends TestCase {
}
- public function testGetUserSubAdminGroupsNotExistingTargetUser() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetUserSubAdminGroupsNotExistingTargetUser(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('User does not exist');
$this->expectExceptionCode(404);
@@ -3561,7 +3737,7 @@ class UsersControllerTest extends TestCase {
$this->api->getUserSubAdminGroups('RequestedUser');
}
- public function testGetUserSubAdminGroupsWithGroups() {
+ public function testGetUserSubAdminGroupsWithGroups(): void {
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetGroup = $this->getMockBuilder('\OCP\IGroup')->disableOriginalConstructor()->getMock();
$targetGroup
@@ -3588,7 +3764,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals(['TargetGroup'], $this->api->getUserSubAdminGroups('RequestedUser')->getData());
}
- public function testEnableUser() {
+ public function testEnableUser(): void {
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser->expects($this->once())
->method('setEnabled')
@@ -3600,7 +3776,7 @@ class UsersControllerTest extends TestCase {
->willReturn($targetUser);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->exactly(2))
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('admin');
$this->userSession
@@ -3615,7 +3791,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->enableUser('RequestedUser')->getData());
}
- public function testDisableUser() {
+ public function testDisableUser(): void {
$targetUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$targetUser->expects($this->once())
->method('setEnabled')
@@ -3627,7 +3803,7 @@ class UsersControllerTest extends TestCase {
->willReturn($targetUser);
$loggedInUser = $this->getMockBuilder(IUser::class)->disableOriginalConstructor()->getMock();
$loggedInUser
- ->expects($this->exactly(2))
+ ->expects($this->exactly(3))
->method('getUID')
->willReturn('admin');
$this->userSession
@@ -3642,7 +3818,7 @@ class UsersControllerTest extends TestCase {
$this->assertEquals([], $this->api->disableUser('RequestedUser')->getData());
}
- public function testGetCurrentUserLoggedIn() {
+ public function testGetCurrentUserLoggedIn(): void {
$user = $this->createMock(IUser::class);
$user->expects($this->once())->method('getUID')->willReturn('UID');
@@ -3659,7 +3835,9 @@ class UsersControllerTest extends TestCase {
$this->groupManager,
$this->userSession,
$this->accountManager,
+ $this->subAdminManager,
$this->l10nFactory,
+ $this->rootFolder,
$this->urlGenerator,
$this->logger,
$this->newUserMailHelper,
@@ -3668,6 +3846,7 @@ class UsersControllerTest extends TestCase {
$this->knownUserService,
$this->eventDispatcher,
$this->phoneNumberUtil,
+ $this->appManager,
])
->onlyMethods(['getUserData'])
->getMock();
@@ -3685,12 +3864,14 @@ class UsersControllerTest extends TestCase {
'address' => 'address',
'website' => 'website',
'twitter' => 'twitter',
+ 'bluesky' => 'bluesky',
'fediverse' => 'fediverse',
'organisation' => 'organisation',
'role' => 'role',
'headline' => 'headline',
'biography' => 'biography',
- 'profile_enabled' => '1'
+ 'profile_enabled' => '1',
+ 'pronouns' => 'they/them',
]
);
@@ -3705,20 +3886,22 @@ class UsersControllerTest extends TestCase {
'address' => 'address',
'website' => 'website',
'twitter' => 'twitter',
+ 'bluesky' => 'bluesky',
'fediverse' => 'fediverse',
'organisation' => 'organisation',
'role' => 'role',
'headline' => 'headline',
'biography' => 'biography',
'profile_enabled' => '1',
+ 'pronouns' => 'they/them',
];
$this->assertSame($expected, $api->getCurrentUser()->getData());
}
- public function testGetCurrentUserNotLoggedIn() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testGetCurrentUserNotLoggedIn(): void {
+ $this->expectException(OCSException::class);
$this->userSession->expects($this->once())->method('getUser')
@@ -3727,7 +3910,7 @@ class UsersControllerTest extends TestCase {
$this->api->getCurrentUser();
}
- public function testGetUser() {
+ public function testGetUser(): void {
$loggedInUser = $this->createMock(IUser::class);
$loggedInUser
->method('getUID')
@@ -3746,7 +3929,9 @@ class UsersControllerTest extends TestCase {
$this->groupManager,
$this->userSession,
$this->accountManager,
+ $this->subAdminManager,
$this->l10nFactory,
+ $this->rootFolder,
$this->urlGenerator,
$this->logger,
$this->newUserMailHelper,
@@ -3755,6 +3940,7 @@ class UsersControllerTest extends TestCase {
$this->knownUserService,
$this->eventDispatcher,
$this->phoneNumberUtil,
+ $this->appManager,
])
->onlyMethods(['getUserData'])
->getMock();
@@ -3768,6 +3954,7 @@ class UsersControllerTest extends TestCase {
'address' => 'address',
'website' => 'website',
'twitter' => 'twitter',
+ 'bluesky' => 'bluesky',
'fediverse' => 'fediverse',
'displayname' => 'Demo User',
'display-name' => 'Demo User',
@@ -3775,16 +3962,16 @@ class UsersControllerTest extends TestCase {
'role' => 'role',
'headline' => 'headline',
'biography' => 'biography',
- 'profile_enabled' => '1'
+ 'profile_enabled' => '1',
+ 'pronouns' => 'they/them',
];
$api->expects($this->exactly(2))
->method('getUserData')
- ->withConsecutive(
- ['uid', false],
- ['currentuser', true],
- )
- ->willReturn($expected);
+ ->willReturnMap([
+ ['uid', false, $expected],
+ ['currentuser', true, $expected],
+ ]);
$this->assertSame($expected, $api->getUser('uid')->getData());
@@ -3792,8 +3979,8 @@ class UsersControllerTest extends TestCase {
}
- public function testResendWelcomeMessageWithNotExistingTargetUser() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testResendWelcomeMessageWithNotExistingTargetUser(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$this->userManager
@@ -3806,15 +3993,15 @@ class UsersControllerTest extends TestCase {
}
- public function testResendWelcomeMessageAsSubAdminAndUserIsNotAccessible() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testResendWelcomeMessageAsSubAdminAndUserIsNotAccessible(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionCode(998);
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$loggedInUser
- ->expects($this->exactly(1))
+ ->expects($this->exactly(2))
->method('getUID')
->willReturn('subadmin');
$targetUser = $this->getMockBuilder(IUser::class)
@@ -3851,8 +4038,8 @@ class UsersControllerTest extends TestCase {
}
- public function testResendWelcomeMessageNoEmail() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testResendWelcomeMessageNoEmail(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Email address not available');
$this->expectExceptionCode(101);
@@ -3883,6 +4070,10 @@ class UsersControllerTest extends TestCase {
->expects($this->once())
->method('getSubAdmin')
->willReturn($subAdminManager);
+ $loggedInUser
+ ->expects($this->exactly(2))
+ ->method('getUID')
+ ->willReturn('logged-user-id');
$targetUser
->expects($this->once())
->method('getEmailAddress')
@@ -3892,8 +4083,8 @@ class UsersControllerTest extends TestCase {
}
- public function testResendWelcomeMessageNullEmail() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testResendWelcomeMessageNullEmail(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Email address not available');
$this->expectExceptionCode(101);
@@ -3924,6 +4115,10 @@ class UsersControllerTest extends TestCase {
->expects($this->once())
->method('getSubAdmin')
->willReturn($subAdminManager);
+ $loggedInUser
+ ->expects($this->exactly(2))
+ ->method('getUID')
+ ->willReturn('logged-user-id');
$targetUser
->expects($this->once())
->method('getEmailAddress')
@@ -3932,13 +4127,16 @@ class UsersControllerTest extends TestCase {
$this->api->resendWelcomeMessage('UserToGet');
}
- public function testResendWelcomeMessageSuccess() {
+ public function testResendWelcomeMessageSuccess(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
+ $loggedInUser
+ ->method('getUID')
+ ->willReturn('logged-user-id');
$targetUser
->method('getUID')
->willReturn('user-id');
@@ -3980,13 +4178,16 @@ class UsersControllerTest extends TestCase {
$this->api->resendWelcomeMessage('UserToGet');
}
- public function testResendWelcomeMessageSuccessWithFallbackLanguage() {
+ public function testResendWelcomeMessageSuccessWithFallbackLanguage(): void {
$loggedInUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
$targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
+ $loggedInUser
+ ->method('getUID')
+ ->willReturn('logged-user-id');
$targetUser
->method('getUID')
->willReturn('user-id');
@@ -4029,8 +4230,8 @@ class UsersControllerTest extends TestCase {
}
- public function testResendWelcomeMessageFailed() {
- $this->expectException(\OCP\AppFramework\OCS\OCSException::class);
+ public function testResendWelcomeMessageFailed(): void {
+ $this->expectException(OCSException::class);
$this->expectExceptionMessage('Sending email failed');
$this->expectExceptionCode(102);
@@ -4040,6 +4241,10 @@ class UsersControllerTest extends TestCase {
$targetUser = $this->getMockBuilder(IUser::class)
->disableOriginalConstructor()
->getMock();
+ $loggedInUser
+ ->expects($this->exactly(2))
+ ->method('getUID')
+ ->willReturn('logged-user-id');
$targetUser
->method('getUID')
->willReturn('user-id');
@@ -4083,22 +4288,41 @@ class UsersControllerTest extends TestCase {
}
- public function dataGetEditableFields() {
+ public static function dataGetEditableFields(): array {
return [
- [false, ISetDisplayNameBackend::class, [
+ [false, true, ISetDisplayNameBackend::class, [
+ IAccountManager::PROPERTY_EMAIL,
IAccountManager::COLLECTION_EMAIL,
IAccountManager::PROPERTY_PHONE,
IAccountManager::PROPERTY_ADDRESS,
IAccountManager::PROPERTY_WEBSITE,
IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
IAccountManager::PROPERTY_FEDIVERSE,
IAccountManager::PROPERTY_ORGANISATION,
IAccountManager::PROPERTY_ROLE,
IAccountManager::PROPERTY_HEADLINE,
IAccountManager::PROPERTY_BIOGRAPHY,
IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
]],
- [true, ISetDisplayNameBackend::class, [
+ [true, false, ISetDisplayNameBackend::class, [
+ IAccountManager::PROPERTY_DISPLAYNAME,
+ IAccountManager::COLLECTION_EMAIL,
+ IAccountManager::PROPERTY_PHONE,
+ IAccountManager::PROPERTY_ADDRESS,
+ IAccountManager::PROPERTY_WEBSITE,
+ IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
+ IAccountManager::PROPERTY_FEDIVERSE,
+ IAccountManager::PROPERTY_ORGANISATION,
+ IAccountManager::PROPERTY_ROLE,
+ IAccountManager::PROPERTY_HEADLINE,
+ IAccountManager::PROPERTY_BIOGRAPHY,
+ IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
+ ]],
+ [true, true, ISetDisplayNameBackend::class, [
IAccountManager::PROPERTY_DISPLAYNAME,
IAccountManager::PROPERTY_EMAIL,
IAccountManager::COLLECTION_EMAIL,
@@ -4106,44 +4330,102 @@ class UsersControllerTest extends TestCase {
IAccountManager::PROPERTY_ADDRESS,
IAccountManager::PROPERTY_WEBSITE,
IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
IAccountManager::PROPERTY_FEDIVERSE,
IAccountManager::PROPERTY_ORGANISATION,
IAccountManager::PROPERTY_ROLE,
IAccountManager::PROPERTY_HEADLINE,
IAccountManager::PROPERTY_BIOGRAPHY,
IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
]],
- [true, UserInterface::class, [
+ [false, false, ISetDisplayNameBackend::class, [
+ IAccountManager::COLLECTION_EMAIL,
+ IAccountManager::PROPERTY_PHONE,
+ IAccountManager::PROPERTY_ADDRESS,
+ IAccountManager::PROPERTY_WEBSITE,
+ IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
+ IAccountManager::PROPERTY_FEDIVERSE,
+ IAccountManager::PROPERTY_ORGANISATION,
+ IAccountManager::PROPERTY_ROLE,
+ IAccountManager::PROPERTY_HEADLINE,
+ IAccountManager::PROPERTY_BIOGRAPHY,
+ IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
+ ]],
+ [false, true, UserInterface::class, [
IAccountManager::PROPERTY_EMAIL,
IAccountManager::COLLECTION_EMAIL,
IAccountManager::PROPERTY_PHONE,
IAccountManager::PROPERTY_ADDRESS,
IAccountManager::PROPERTY_WEBSITE,
IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
IAccountManager::PROPERTY_FEDIVERSE,
IAccountManager::PROPERTY_ORGANISATION,
IAccountManager::PROPERTY_ROLE,
IAccountManager::PROPERTY_HEADLINE,
IAccountManager::PROPERTY_BIOGRAPHY,
IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
+ ]],
+ [true, false, UserInterface::class, [
+ IAccountManager::COLLECTION_EMAIL,
+ IAccountManager::PROPERTY_PHONE,
+ IAccountManager::PROPERTY_ADDRESS,
+ IAccountManager::PROPERTY_WEBSITE,
+ IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
+ IAccountManager::PROPERTY_FEDIVERSE,
+ IAccountManager::PROPERTY_ORGANISATION,
+ IAccountManager::PROPERTY_ROLE,
+ IAccountManager::PROPERTY_HEADLINE,
+ IAccountManager::PROPERTY_BIOGRAPHY,
+ IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
+ ]],
+ [true, true, UserInterface::class, [
+ IAccountManager::PROPERTY_EMAIL,
+ IAccountManager::COLLECTION_EMAIL,
+ IAccountManager::PROPERTY_PHONE,
+ IAccountManager::PROPERTY_ADDRESS,
+ IAccountManager::PROPERTY_WEBSITE,
+ IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
+ IAccountManager::PROPERTY_FEDIVERSE,
+ IAccountManager::PROPERTY_ORGANISATION,
+ IAccountManager::PROPERTY_ROLE,
+ IAccountManager::PROPERTY_HEADLINE,
+ IAccountManager::PROPERTY_BIOGRAPHY,
+ IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
+ ]],
+ [false, false, UserInterface::class, [
+ IAccountManager::COLLECTION_EMAIL,
+ IAccountManager::PROPERTY_PHONE,
+ IAccountManager::PROPERTY_ADDRESS,
+ IAccountManager::PROPERTY_WEBSITE,
+ IAccountManager::PROPERTY_TWITTER,
+ IAccountManager::PROPERTY_BLUESKY,
+ IAccountManager::PROPERTY_FEDIVERSE,
+ IAccountManager::PROPERTY_ORGANISATION,
+ IAccountManager::PROPERTY_ROLE,
+ IAccountManager::PROPERTY_HEADLINE,
+ IAccountManager::PROPERTY_BIOGRAPHY,
+ IAccountManager::PROPERTY_PROFILE_ENABLED,
+ IAccountManager::PROPERTY_PRONOUNS,
]],
];
}
- /**
- * @dataProvider dataGetEditableFields
- *
- * @param bool $allowedToChangeDisplayName
- * @param string $userBackend
- * @param array $expected
- */
- public function testGetEditableFields(bool $allowedToChangeDisplayName, string $userBackend, array $expected) {
- $this->config
- ->method('getSystemValue')
- ->with(
- $this->equalTo('allow_user_to_change_display_name'),
- $this->anything()
- )->willReturn($allowedToChangeDisplayName);
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetEditableFields')]
+ public function testGetEditableFields(bool $allowedToChangeDisplayName, bool $allowedToChangeEmail, string $userBackend, array $expected): void {
+ $this->config->method('getSystemValue')->willReturnCallback(fn (string $key, mixed $default) => match ($key) {
+ 'allow_user_to_change_display_name' => $allowedToChangeDisplayName,
+ 'allow_user_to_change_email' => $allowedToChangeEmail,
+ default => throw new RuntimeException('Unexpected system config key: ' . $key),
+ });
$user = $this->createMock(IUser::class);
$this->userSession->method('getUser')
@@ -4172,7 +4454,7 @@ class UsersControllerTest extends TestCase {
$account = $this->createMock(IAccount::class);
$account->method('getProperty')
- ->will($this->returnValueMap($mockedProperties));
+ ->willReturnMap($mockedProperties);
$this->accountManager->expects($this->any())->method('getAccount')
->with($targetUser)