diff options
author | Joas Schilling <coding@schilljs.com> | 2024-08-22 08:02:15 +0200 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2024-08-22 08:06:06 +0200 |
commit | aeac7217958b9caf6fdb32e1c9186609f1b99b10 (patch) | |
tree | 0756e52e536f0a4f8b3a843a9e36c23bad4a3f67 /apps | |
parent | 54c6f1be80be99985e7b4cc1f0ad484b541e15e8 (diff) | |
download | nextcloud-server-aeac7217958b9caf6fdb32e1c9186609f1b99b10.tar.gz nextcloud-server-aeac7217958b9caf6fdb32e1c9186609f1b99b10.zip |
fix(provisioning): Support setting new app configs as well
Signed-off-by: Joas Schilling <coding@schilljs.com>
Diffstat (limited to 'apps')
-rw-r--r-- | apps/provisioning_api/lib/Controller/AppConfigController.php | 11 | ||||
-rw-r--r-- | apps/provisioning_api/tests/Controller/AppConfigControllerTest.php | 37 |
2 files changed, 32 insertions, 16 deletions
diff --git a/apps/provisioning_api/lib/Controller/AppConfigController.php b/apps/provisioning_api/lib/Controller/AppConfigController.php index 2ea4602883c..2ff82213997 100644 --- a/apps/provisioning_api/lib/Controller/AppConfigController.php +++ b/apps/provisioning_api/lib/Controller/AppConfigController.php @@ -15,6 +15,7 @@ use OCP\AppFramework\Http\Attribute\NoAdminRequired; use OCP\AppFramework\Http\Attribute\PasswordConfirmationRequired; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\OCSController; +use OCP\Exceptions\AppConfigUnknownKeyException; use OCP\IAppConfig; use OCP\IGroupManager; use OCP\IL10N; @@ -126,9 +127,15 @@ class AppConfigController extends OCSController { return new DataResponse(['data' => ['message' => $e->getMessage()]], Http::STATUS_FORBIDDEN); } - $configDetails = $this->appConfig->getDetails($app, $key); + $type = null; + try { + $configDetails = $this->appConfig->getDetails($app, $key); + $type = $configDetails['type']; + } catch (AppConfigUnknownKeyException) { + } + /** @psalm-suppress InternalMethod */ - match ($configDetails['type']) { + match ($type) { IAppConfig::VALUE_BOOL => $this->appConfig->setValueBool($app, $key, (bool)$value), IAppConfig::VALUE_FLOAT => $this->appConfig->setValueFloat($app, $key, (float)$value), IAppConfig::VALUE_INT => $this->appConfig->setValueInt($app, $key, (int)$value), diff --git a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php index 1a8a95e60d8..0bdee39cebc 100644 --- a/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php +++ b/apps/provisioning_api/tests/Controller/AppConfigControllerTest.php @@ -9,6 +9,7 @@ use OC\AppConfig; use OCA\Provisioning_API\Controller\AppConfigController; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; +use OCP\Exceptions\AppConfigUnknownKeyException; use OCP\IAppConfig; use OCP\IGroupManager; use OCP\IL10N; @@ -192,6 +193,7 @@ class AppConfigControllerTest extends TestCase { ['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()], ]; } @@ -202,9 +204,9 @@ class AppConfigControllerTest extends TestCase { * @param string|null $value * @param \Exception|null $appThrows * @param \Exception|null $keyThrows - * @param int $status + * @param int|\Throwable $status */ - public function testSetValue($app, $key, $value, $appThrows, $keyThrows, $status, int $type = IAppConfig::VALUE_MIXED) { + public function testSetValue($app, $key, $value, $appThrows, $keyThrows, $status, int|\Throwable $type = IAppConfig::VALUE_MIXED) { $adminUser = $this->createMock(IUser::class); $adminUser->expects($this->once()) ->method('getUid') @@ -247,18 +249,25 @@ class AppConfigControllerTest extends TestCase { ->method('verifyConfigKey') ->with($app, $key); - $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, - ]); + 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', |