diff --git a/apps/settings/lib/Controller/AppSettingsController.php b/apps/settings/lib/Controller/AppSettingsController.php index bd713cab2013a..7acb09d241b00 100644 --- a/apps/settings/lib/Controller/AppSettingsController.php +++ b/apps/settings/lib/Controller/AppSettingsController.php @@ -69,6 +69,7 @@ public function __construct( private CategoryFetcher $categoryFetcher, private AppFetcher $appFetcher, private IFactory $l10nFactory, + private IGroupManager $groupManager, private BundleFetcher $bundleFetcher, private Installer $installer, private IURLGenerator $urlGenerator, @@ -95,6 +96,15 @@ public function viewApps(): TemplateResponse { $this->initialState->provideInitialState('appstoreDeveloperDocs', $this->urlGenerator->linkToDocs('developer-manual')); $this->initialState->provideInitialState('appstoreUpdateCount', count($this->getAppsWithUpdates())); + $groups = array_map(function (IGroup $group) { + return [ + 'id' => $group->getGID(), + 'name' => $group->getDisplayName(), + ]; + }, $this->groupManager->search('', 5)); + + $this->initialState->provideInitialState('usersSettings', [ 'systemGroups' => $groups]); + if ($this->appManager->isEnabledForAnyone('app_api')) { try { Server::get(ExAppsPageService::class)->provideAppApiState($this->initialState); diff --git a/apps/settings/tests/Controller/AppSettingsControllerTest.php b/apps/settings/tests/Controller/AppSettingsControllerTest.php index de96a10d31ee9..976f95a9baabe 100644 --- a/apps/settings/tests/Controller/AppSettingsControllerTest.php +++ b/apps/settings/tests/Controller/AppSettingsControllerTest.php @@ -21,6 +21,8 @@ use OCP\Files\AppData\IAppDataFactory; use OCP\Http\Client\IClientService; use OCP\IConfig; +use OCP\IGroup; +use OCP\IGroupManager; use OCP\IL10N; use OCP\INavigationManager; use OCP\IRequest; @@ -45,6 +47,7 @@ class AppSettingsControllerTest extends TestCase { private CategoryFetcher&MockObject $categoryFetcher; private AppFetcher&MockObject $appFetcher; private IFactory&MockObject $l10nFactory; + private IGroupManager&MockObject $groupManager; private BundleFetcher&MockObject $bundleFetcher; private Installer&MockObject $installer; private IURLGenerator&MockObject $urlGenerator; @@ -70,6 +73,7 @@ protected function setUp(): void { $this->categoryFetcher = $this->createMock(CategoryFetcher::class); $this->appFetcher = $this->createMock(AppFetcher::class); $this->l10nFactory = $this->createMock(IFactory::class); + $this->groupManager = $this->createMock(IGroupManager::class); $this->bundleFetcher = $this->createMock(BundleFetcher::class); $this->installer = $this->createMock(Installer::class); $this->urlGenerator = $this->createMock(IURLGenerator::class); @@ -89,6 +93,7 @@ protected function setUp(): void { $this->categoryFetcher, $this->appFetcher, $this->l10nFactory, + $this->groupManager, $this->bundleFetcher, $this->installer, $this->urlGenerator, @@ -168,9 +173,16 @@ public function testViewApps(): void { ->expects($this->once()) ->method('setActiveEntry') ->with('core_apps'); + $this->groupManager->expects($this->once()) + ->method('search') + ->with($this->equalTo(''), $this->equalTo(5)) + ->willReturn([ + $this->createMock(IGroup::class), + $this->createMock(IGroup::class), + ]); $this->initialState - ->expects($this->exactly(4)) + ->expects($this->exactly(5)) ->method('provideInitialState'); $policy = new ContentSecurityPolicy(); @@ -201,9 +213,16 @@ public function testViewAppsAppstoreNotEnabled(): void { ->expects($this->once()) ->method('setActiveEntry') ->with('core_apps'); + $this->groupManager->expects($this->once()) + ->method('search') + ->with($this->equalTo(''), $this->equalTo(5)) + ->willReturn([ + $this->createMock(IGroup::class), + $this->createMock(IGroup::class), + ]); $this->initialState - ->expects($this->exactly(4)) + ->expects($this->exactly(5)) ->method('provideInitialState'); $policy = new ContentSecurityPolicy();