diff --git a/IONOS b/IONOS index 30be7051586fa..7d2d1bb7bbfee 160000 --- a/IONOS +++ b/IONOS @@ -1 +1 @@ -Subproject commit 30be7051586faae63a143d061925045dd800dba5 +Subproject commit 7d2d1bb7bbfee8e7fd0e3443a18bf4c303d53095 diff --git a/apps/settings/lib/Controller/AppSettingsController.php b/apps/settings/lib/Controller/AppSettingsController.php index d76408010da79..370ff883a769f 100644 --- a/apps/settings/lib/Controller/AppSettingsController.php +++ b/apps/settings/lib/Controller/AppSettingsController.php @@ -35,7 +35,6 @@ use OCP\Files\SimpleFS\ISimpleFile; use OCP\Files\SimpleFS\ISimpleFolder; use OCP\Http\Client\IClientService; -use OCP\IAppConfig; use OCP\IConfig; use OCP\IGroup; use OCP\IL10N; @@ -75,7 +74,6 @@ public function __construct( private IInitialState $initialState, private AppDiscoverFetcher $discoverFetcher, private IClientService $clientService, - private IAppConfig $appConfig, ) { parent::__construct($appName, $request); $this->appData = $appDataFactory->get('appstore'); @@ -92,12 +90,6 @@ public function viewApps(): TemplateResponse { $this->initialState->provideInitialState('appstoreEnabled', $this->config->getSystemValueBool('appstoreenabled', true)); $this->initialState->provideInitialState('appstoreBundles', $this->getBundles()); - - // Conditionally set developer docs link based on configuration - $displayDocumentationLink = $this->appConfig->getValueBool('settings', 'display_documentation_link', true); - $developerDocsUrl = $displayDocumentationLink ? $this->urlGenerator->linkToDocs('developer-manual') : ''; - $this->initialState->provideInitialState('appstoreDeveloperDocs', $developerDocsUrl); - $this->initialState->provideInitialState('appstoreUpdateCount', count($this->getAppsWithUpdates())); if ($this->appManager->isInstalled('app_api')) { diff --git a/apps/settings/src/views/AppStoreNavigation.vue b/apps/settings/src/views/AppStoreNavigation.vue index 3507006c47d5b..4d8a2b3e48ce1 100644 --- a/apps/settings/src/views/AppStoreNavigation.vue +++ b/apps/settings/src/views/AppStoreNavigation.vue @@ -91,10 +91,6 @@ - @@ -116,7 +112,6 @@ import NcLoadingIcon from '@nextcloud/vue/dist/Components/NcLoadingIcon.js' import APPSTORE_CATEGORY_ICONS from '../constants/AppstoreCategoryIcons.ts' const appstoreEnabled = loadState('settings', 'appstoreEnabled', true) -const developerDocsUrl = loadState('settings', 'appstoreDeveloperDocs', '') const store = useAppsStore() const categories = computed(() => store.categories) diff --git a/apps/settings/tests/Controller/AppSettingsControllerTest.php b/apps/settings/tests/Controller/AppSettingsControllerTest.php index 3c0df4532d79f..f72bd45a3d234 100644 --- a/apps/settings/tests/Controller/AppSettingsControllerTest.php +++ b/apps/settings/tests/Controller/AppSettingsControllerTest.php @@ -19,7 +19,6 @@ use OCP\AppFramework\Services\IInitialState; use OCP\Files\AppData\IAppDataFactory; use OCP\Http\Client\IClientService; -use OCP\IAppConfig; use OCP\IConfig; use OCP\IL10N; use OCP\INavigationManager; @@ -46,8 +45,6 @@ class AppSettingsControllerTest extends TestCase { private $l10n; /** @var IConfig|MockObject */ private $config; - /** @var IAppConfig|MockObject */ - private $appConfig; /** @var INavigationManager|MockObject */ private $navigationManager; private AppManager&MockObject $appManager; @@ -84,7 +81,6 @@ protected function setUp(): void { ->method('t') ->willReturnArgument(0); $this->config = $this->createMock(IConfig::class); - $this->appConfig = $this->createMock(IAppConfig::class); $this->navigationManager = $this->createMock(INavigationManager::class); $this->appManager = $this->createMock(AppManager::class); $this->categoryFetcher = $this->createMock(CategoryFetcher::class); @@ -116,7 +112,6 @@ protected function setUp(): void { $this->initialState, $this->discoverFetcher, $this->clientService, - $this->appConfig, ); } @@ -185,31 +180,14 @@ public function testViewApps(): void { ->method('getSystemValueBool') ->with('appstoreenabled', true) ->willReturn(true); - $this->appConfig - ->expects($this->once()) - ->method('getValueBool') - ->with('settings', 'display_documentation_link', true) - ->willReturn(true); $this->navigationManager ->expects($this->once()) ->method('setActiveEntry') ->with('core_apps'); - // Test that developer docs link is generated correctly - $this->urlGenerator - ->expects($this->once()) - ->method('linkToDocs') - ->with('developer-manual') - ->willReturn('https://docs.nextcloud.com/server/latest/developer_manual/'); - $this->initialState ->expects($this->exactly(4)) - ->method('provideInitialState') - ->willReturnCallback(function ($key, $value) { - if ($key === 'appstoreDeveloperDocs') { - $this->assertEquals('https://docs.nextcloud.com/server/latest/developer_manual/', $value); - } - }); + ->method('provideInitialState'); $policy = new ContentSecurityPolicy(); $policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com'); @@ -235,31 +213,14 @@ public function testViewAppsAppstoreNotEnabled(): void { ->method('getSystemValueBool') ->with('appstoreenabled', true) ->willReturn(false); - $this->appConfig - ->expects($this->once()) - ->method('getValueBool') - ->with('settings', 'display_documentation_link', true) - ->willReturn(true); $this->navigationManager ->expects($this->once()) ->method('setActiveEntry') ->with('core_apps'); - // Test that developer docs link is still generated even when appstore is disabled - $this->urlGenerator - ->expects($this->once()) - ->method('linkToDocs') - ->with('developer-manual') - ->willReturn('https://docs.nextcloud.com/server/latest/developer_manual/'); - $this->initialState ->expects($this->exactly(4)) - ->method('provideInitialState') - ->willReturnCallback(function ($key, $value) { - if ($key === 'appstoreDeveloperDocs') { - $this->assertEquals('https://docs.nextcloud.com/server/latest/developer_manual/', $value); - } - }); + ->method('provideInitialState'); $policy = new ContentSecurityPolicy(); $policy->addAllowedImageDomain('https://usercontent.apps.nextcloud.com'); @@ -274,88 +235,4 @@ public function testViewAppsAppstoreNotEnabled(): void { $this->assertEquals($expected, $this->appSettingsController->viewApps()); } - - public function testDeveloperDocumentationLinkHiddenWhenConfigured(): void { - $this->installer->expects($this->any()) - ->method('isUpdateAvailable') - ->willReturn(false); - $this->bundleFetcher->expects($this->once())->method('getBundles')->willReturn([]); - $this->config - ->expects($this->once()) - ->method('getSystemValueBool') - ->with('appstoreenabled', true) - ->willReturn(true); - $this->appConfig - ->expects($this->once()) - ->method('getValueBool') - ->with('settings', 'display_documentation_link', true) - ->willReturn(false); - $this->navigationManager - ->expects($this->once()) - ->method('setActiveEntry') - ->with('core_apps'); - - // When display_documentation_link is false, linkToDocs should not be called - $this->urlGenerator - ->expects($this->never()) - ->method('linkToDocs'); - - $providedStates = []; - $this->initialState - ->expects($this->exactly(4)) - ->method('provideInitialState') - ->willReturnCallback(function ($key, $value) use (&$providedStates) { - $providedStates[$key] = $value; - }); - - $this->appSettingsController->viewApps(); - - // Assert that the developer docs state was provided with an empty string - $this->assertArrayHasKey('appstoreDeveloperDocs', $providedStates); - $this->assertEquals('', $providedStates['appstoreDeveloperDocs']); - } - - public function testDeveloperDocumentationLinkShownByDefault(): void { - $this->installer->expects($this->any()) - ->method('isUpdateAvailable') - ->willReturn(false); - $this->bundleFetcher->expects($this->once())->method('getBundles')->willReturn([]); - $this->config - ->expects($this->once()) - ->method('getSystemValueBool') - ->with('appstoreenabled', true) - ->willReturn(true); - $this->appConfig - ->expects($this->once()) - ->method('getValueBool') - ->with('settings', 'display_documentation_link', true) - ->willReturn(true); - $this->navigationManager - ->expects($this->once()) - ->method('setActiveEntry') - ->with('core_apps'); - - $developerDocsUrl = 'https://docs.nextcloud.com/server/latest/developer_manual/'; - - // When display_documentation_link is true (default), linkToDocs should be called - $this->urlGenerator - ->expects($this->once()) - ->method('linkToDocs') - ->with('developer-manual') - ->willReturn($developerDocsUrl); - - $providedStates = []; - $this->initialState - ->expects($this->exactly(4)) - ->method('provideInitialState') - ->willReturnCallback(function ($key, $value) use (&$providedStates) { - $providedStates[$key] = $value; - }); - - $this->appSettingsController->viewApps(); - - // Assert that the developer docs state was provided with the correct URL - $this->assertArrayHasKey('appstoreDeveloperDocs', $providedStates); - $this->assertEquals($developerDocsUrl, $providedStates['appstoreDeveloperDocs']); - } }