diff options
Diffstat (limited to 'tests/Settings/Controller/AppSettingsControllerTest.php')
-rw-r--r-- | tests/Settings/Controller/AppSettingsControllerTest.php | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/tests/Settings/Controller/AppSettingsControllerTest.php b/tests/Settings/Controller/AppSettingsControllerTest.php new file mode 100644 index 00000000000..9dcc55e135b --- /dev/null +++ b/tests/Settings/Controller/AppSettingsControllerTest.php @@ -0,0 +1,293 @@ +<?php +/** + * @author Lukas Reschke <lukas@owncloud.com> + * + * @copyright Copyright (c) 2015, ownCloud, Inc. + * @license AGPL-3.0 + * + * This code is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License, version 3, + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License, version 3, + * along with this program. If not, see <http://www.gnu.org/licenses/> + * + */ + +namespace Tests\Settings\Controller; + +use OC\Settings\Controller\AppSettingsController; +use OCP\AppFramework\Http\ContentSecurityPolicy; +use OCP\AppFramework\Http\DataResponse; +use OCP\AppFramework\Http\TemplateResponse; +use Test\TestCase; +use OCP\IRequest; +use OCP\IL10N; +use OCP\IConfig; +use OCP\ICache; +use OCP\INavigationManager; +use OCP\App\IAppManager; +use OC\OCSClient; + +/** + * Class AppSettingsControllerTest + * + * @package Tests\Settings\Controller + */ +class AppSettingsControllerTest extends TestCase { + /** @var AppSettingsController */ + private $appSettingsController; + /** @var IRequest */ + private $request; + /** @var IL10N */ + private $l10n; + /** @var IConfig */ + private $config; + /** @var ICache */ + private $cache; + /** @var INavigationManager */ + private $navigationManager; + /** @var IAppManager */ + private $appManager; + /** @var OCSClient */ + private $ocsClient; + + public function setUp() { + parent::setUp(); + + $this->request = $this->getMockBuilder('\OCP\IRequest') + ->disableOriginalConstructor()->getMock(); + $this->l10n = $this->getMockBuilder('\OCP\IL10N') + ->disableOriginalConstructor()->getMock(); + $this->l10n->expects($this->any()) + ->method('t') + ->will($this->returnArgument(0)); + $this->config = $this->getMockBuilder('\OCP\IConfig') + ->disableOriginalConstructor()->getMock(); + $cacheFactory = $this->getMockBuilder('\OCP\ICacheFactory') + ->disableOriginalConstructor()->getMock(); + $this->cache = $this->getMockBuilder('\OCP\ICache') + ->disableOriginalConstructor()->getMock(); + $cacheFactory + ->expects($this->once()) + ->method('create') + ->with('settings') + ->will($this->returnValue($this->cache)); + + $this->navigationManager = $this->getMockBuilder('\OCP\INavigationManager') + ->disableOriginalConstructor()->getMock(); + $this->appManager = $this->getMockBuilder('\OCP\App\IAppManager') + ->disableOriginalConstructor()->getMock(); + $this->ocsClient = $this->getMockBuilder('\OC\OCSClient') + ->disableOriginalConstructor()->getMock(); + + $this->appSettingsController = new AppSettingsController( + 'settings', + $this->request, + $this->l10n, + $this->config, + $cacheFactory, + $this->navigationManager, + $this->appManager, + $this->ocsClient + ); + } + + public function testChangeExperimentalConfigStateTrue() { + $this->config + ->expects($this->once()) + ->method('setSystemValue') + ->with('appstore.experimental.enabled', true); + $this->appManager + ->expects($this->once()) + ->method('clearAppsCache'); + $this->assertEquals(new DataResponse(), $this->appSettingsController->changeExperimentalConfigState(true)); + } + + public function testChangeExperimentalConfigStateFalse() { + $this->config + ->expects($this->once()) + ->method('setSystemValue') + ->with('appstore.experimental.enabled', false); + $this->appManager + ->expects($this->once()) + ->method('clearAppsCache'); + $this->assertEquals(new DataResponse(), $this->appSettingsController->changeExperimentalConfigState(false)); + } + + public function testListCategoriesCached() { + $this->cache + ->expects($this->exactly(2)) + ->method('get') + ->with('listCategories') + ->will($this->returnValue(['CachedArray'])); + $this->assertSame(['CachedArray'], $this->appSettingsController->listCategories()); + } + + public function testListCategoriesNotCachedWithoutAppStore() { + $expected = [ + [ + 'id' => 0, + 'ident' => 'enabled', + 'displayName' => 'Enabled', + ], + [ + 'id' => 1, + 'ident' => 'disabled', + 'displayName' => 'Not enabled', + ], + ]; + $this->cache + ->expects($this->once()) + ->method('get') + ->with('listCategories') + ->will($this->returnValue(null)); + $this->cache + ->expects($this->once()) + ->method('set') + ->with('listCategories', $expected, 3600); + + + $this->assertSame($expected, $this->appSettingsController->listCategories()); + } + + public function testListCategoriesNotCachedWithAppStore() { + $expected = [ + [ + 'id' => 0, + 'ident' => 'enabled', + 'displayName' => 'Enabled', + ], + [ + 'id' => 1, + 'ident' => 'disabled', + 'displayName' => 'Not enabled', + ], + [ + 'id' => 0, + 'ident' => 'tools', + 'displayName' => 'Tools', + ], + [ + 'id' => 1, + 'ident' => 'games', + 'displayName' => 'Games', + ], + [ + 'id' => 2, + 'ident' => 'productivity', + 'displayName' => 'Productivity', + ], + [ + 'id' => 3, + 'ident' => 'multimedia', + 'displayName' => 'Multimedia', + ], + ]; + + $this->cache + ->expects($this->once()) + ->method('get') + ->with('listCategories') + ->will($this->returnValue(null)); + $this->cache + ->expects($this->once()) + ->method('set') + ->with('listCategories', $expected, 3600); + + $this->ocsClient + ->expects($this->once()) + ->method('isAppStoreEnabled') + ->will($this->returnValue(true)); + $this->ocsClient + ->expects($this->once()) + ->method('getCategories') + ->will($this->returnValue( + [ + 'ownCloud Tools', + 'Games', + 'ownCloud Productivity', + 'Multimedia', + ] + )); + + $this->assertSame($expected, $this->appSettingsController->listCategories()); + } + + public function testViewApps() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('appstore.experimental.enabled', false); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->will($this->returnValue(true)); + $this->navigationManager + ->expects($this->once()) + ->method('setActiveEntry') + ->with('core_apps'); + + $policy = new ContentSecurityPolicy(); + $policy->addAllowedImageDomain('https://apps.owncloud.com'); + + $expected = new TemplateResponse('settings', 'apps', ['experimentalEnabled' => false, 'category' => 'enabled', 'appstoreEnabled' => true], 'user'); + $expected->setContentSecurityPolicy($policy); + + $this->assertEquals($expected, $this->appSettingsController->viewApps()); + } + + public function testViewAppsNotEnabled() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('appstore.experimental.enabled', false); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->will($this->returnValue(true)); + $this->navigationManager + ->expects($this->once()) + ->method('setActiveEntry') + ->with('core_apps'); + + $policy = new ContentSecurityPolicy(); + $policy->addAllowedImageDomain('https://apps.owncloud.com'); + + $expected = new TemplateResponse('settings', 'apps', ['experimentalEnabled' => false, 'category' => 'disabled', 'appstoreEnabled' => true], 'user'); + $expected->setContentSecurityPolicy($policy); + + $this->assertEquals($expected, $this->appSettingsController->viewApps('disabled')); + } + + public function testViewAppsAppstoreNotEnabled() { + $this->config + ->expects($this->at(0)) + ->method('getSystemValue') + ->with('appstore.experimental.enabled', false); + $this->config + ->expects($this->at(1)) + ->method('getSystemValue') + ->with('appstoreenabled', true) + ->will($this->returnValue(false)); + $this->navigationManager + ->expects($this->once()) + ->method('setActiveEntry') + ->with('core_apps'); + + $policy = new ContentSecurityPolicy(); + $policy->addAllowedImageDomain('https://apps.owncloud.com'); + + $expected = new TemplateResponse('settings', 'apps', ['experimentalEnabled' => false, 'category' => 'enabled', 'appstoreEnabled' => false], 'user'); + $expected->setContentSecurityPolicy($policy); + + $this->assertEquals($expected, $this->appSettingsController->viewApps()); + } +} |