nextcloud/tests/lib/app/manager.php
Vincent Petry b919ae96f0 Display app names in update page for app updates
Whenever the update page is displayed for apps, show app names instead
of the core update text.
2015-08-19 18:03:35 +02:00

274 lines
8.7 KiB
PHP

<?php
/**
* Copyright (c) 2014 Robin Appelman <icewind@owncloud.com>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
namespace Test\App;
use OC\Group\Group;
use OC\User\User;
class Manager extends \PHPUnit_Framework_TestCase {
/**
* @return \OCP\IAppConfig | \PHPUnit_Framework_MockObject_MockObject
*/
protected function getAppConfig() {
$appConfig = array();
$config = $this->getMockBuilder('\OCP\IAppConfig')
->disableOriginalConstructor()
->getMock();
$config->expects($this->any())
->method('getValue')
->will($this->returnCallback(function ($app, $key, $default) use (&$appConfig) {
return (isset($appConfig[$app]) and isset($appConfig[$app][$key])) ? $appConfig[$app][$key] : $default;
}));
$config->expects($this->any())
->method('setValue')
->will($this->returnCallback(function ($app, $key, $value) use (&$appConfig) {
if (!isset($appConfig[$app])) {
$appConfig[$app] = array();
}
$appConfig[$app][$key] = $value;
}));
$config->expects($this->any())
->method('getValues')
->will($this->returnCallback(function ($app, $key) use (&$appConfig) {
if ($app) {
return $appConfig[$app];
} else {
$values = array();
foreach ($appConfig as $app => $appData) {
if (isset($appData[$key])) {
$values[$app] = $appData[$key];
}
}
return $values;
}
}));
return $config;
}
/** @var \OCP\IUserSession */
protected $userSession;
/** @var \OCP\IGroupManager */
protected $groupManager;
/** @var \OCP\IAppConfig */
protected $appConfig;
/** @var \OCP\ICache */
protected $cache;
/** @var \OCP\ICacheFactory */
protected $cacheFactory;
/** @var \OCP\App\IAppManager */
protected $manager;
protected function setUp() {
parent::setUp();
$this->userSession = $this->getMock('\OCP\IUserSession');
$this->groupManager = $this->getMock('\OCP\IGroupManager');
$this->appConfig = $this->getAppConfig();
$this->cacheFactory = $this->getMock('\OCP\ICacheFactory');
$this->cache = $this->getMock('\OCP\ICache');
$this->cacheFactory->expects($this->any())
->method('create')
->with('settings')
->willReturn($this->cache);
$this->manager = new \OC\App\AppManager($this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory);
}
protected function expectClearCache() {
$this->cache->expects($this->once())
->method('clear')
->with('listApps');
}
public function testEnableApp() {
$this->expectClearCache();
$this->manager->enableApp('test');
$this->assertEquals('yes', $this->appConfig->getValue('test', 'enabled', 'no'));
}
public function testDisableApp() {
$this->expectClearCache();
$this->manager->disableApp('test');
$this->assertEquals('no', $this->appConfig->getValue('test', 'enabled', 'no'));
}
public function testEnableAppForGroups() {
$groups = array(
new Group('group1', array(), null),
new Group('group2', array(), null)
);
$this->expectClearCache();
$this->manager->enableAppForGroups('test', $groups);
$this->assertEquals('["group1","group2"]', $this->appConfig->getValue('test', 'enabled', 'no'));
}
public function testIsInstalledEnabled() {
$this->appConfig->setValue('test', 'enabled', 'yes');
$this->assertTrue($this->manager->isInstalled('test'));
}
public function testIsInstalledDisabled() {
$this->appConfig->setValue('test', 'enabled', 'no');
$this->assertFalse($this->manager->isInstalled('test'));
}
public function testIsInstalledEnabledForGroups() {
$this->appConfig->setValue('test', 'enabled', '["foo"]');
$this->assertTrue($this->manager->isInstalled('test'));
}
public function testIsEnabledForUserEnabled() {
$this->appConfig->setValue('test', 'enabled', 'yes');
$user = new User('user1', null);
$this->assertTrue($this->manager->isEnabledForUser('test', $user));
}
public function testIsEnabledForUserDisabled() {
$this->appConfig->setValue('test', 'enabled', 'no');
$user = new User('user1', null);
$this->assertFalse($this->manager->isEnabledForUser('test', $user));
}
public function testIsEnabledForUserEnabledForGroup() {
$user = new User('user1', null);
$this->groupManager->expects($this->once())
->method('getUserGroupIds')
->with($user)
->will($this->returnValue(array('foo', 'bar')));
$this->appConfig->setValue('test', 'enabled', '["foo"]');
$this->assertTrue($this->manager->isEnabledForUser('test', $user));
}
public function testIsEnabledForUserDisabledForGroup() {
$user = new User('user1', null);
$this->groupManager->expects($this->once())
->method('getUserGroupIds')
->with($user)
->will($this->returnValue(array('bar')));
$this->appConfig->setValue('test', 'enabled', '["foo"]');
$this->assertFalse($this->manager->isEnabledForUser('test', $user));
}
public function testIsEnabledForUserLoggedOut() {
$this->appConfig->setValue('test', 'enabled', '["foo"]');
$this->assertFalse($this->manager->IsEnabledForUser('test'));
}
public function testIsEnabledForUserLoggedIn() {
$user = new User('user1', null);
$this->userSession->expects($this->once())
->method('getUser')
->will($this->returnValue($user));
$this->groupManager->expects($this->once())
->method('getUserGroupIds')
->with($user)
->will($this->returnValue(array('foo', 'bar')));
$this->appConfig->setValue('test', 'enabled', '["foo"]');
$this->assertTrue($this->manager->isEnabledForUser('test'));
}
public function testGetInstalledApps() {
$this->appConfig->setValue('test1', 'enabled', 'yes');
$this->appConfig->setValue('test2', 'enabled', 'no');
$this->appConfig->setValue('test3', 'enabled', '["foo"]');
$this->assertEquals(['test1', 'test3'], $this->manager->getInstalledApps());
}
public function testGetAppsForUser() {
$user = new User('user1', null);
$this->groupManager->expects($this->any())
->method('getUserGroupIds')
->with($user)
->will($this->returnValue(array('foo', 'bar')));
$this->appConfig->setValue('test1', 'enabled', 'yes');
$this->appConfig->setValue('test2', 'enabled', 'no');
$this->appConfig->setValue('test3', 'enabled', '["foo"]');
$this->appConfig->setValue('test4', 'enabled', '["asd"]');
$this->assertEquals(['test1', 'test3'], $this->manager->getEnabledAppsForUser($user));
}
public function testGetAppsNeedingUpgrade() {
$this->manager = $this->getMockBuilder('\OC\App\AppManager')
->setConstructorArgs([$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory])
->setMethods(['getAppInfo'])
->getMock();
$appInfos = [
'test1' => ['id' => 'test1', 'version' => '1.0.1', 'requiremax' => '8.0.0'],
'test2' => ['id' => 'test2', 'version' => '1.0.0', 'requiremin' => '8.2.0'],
'test3' => ['id' => 'test3', 'version' => '1.2.4', 'requiremin' => '9.0.0'],
'testnoversion' => ['id' => 'testnoversion', 'requiremin' => '8.2.0'],
];
$this->manager->expects($this->any())
->method('getAppInfo')
->will($this->returnCallback(
function($appId) use ($appInfos) {
return $appInfos[$appId];
}
));
$this->appConfig->setValue('test1', 'enabled', 'yes');
$this->appConfig->setValue('test1', 'installed_version', '1.0.0');
$this->appConfig->setValue('test2', 'enabled', 'yes');
$this->appConfig->setValue('test2', 'installed_version', '1.0.0');
$this->appConfig->setValue('test3', 'enabled', 'yes');
$this->appConfig->setValue('test3', 'installed_version', '1.0.0');
$apps = $this->manager->getAppsNeedingUpgrade();
$this->assertCount(2, $apps);
$this->assertEquals('test1', $apps[0]['id']);
$this->assertEquals('test3', $apps[1]['id']);
}
public function testGetIncompatibleApps() {
$this->manager = $this->getMockBuilder('\OC\App\AppManager')
->setConstructorArgs([$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory])
->setMethods(['getAppInfo'])
->getMock();
$appInfos = [
'test1' => ['id' => 'test1', 'version' => '1.0.1', 'requiremax' => '8.0.0'],
'test2' => ['id' => 'test2', 'version' => '1.0.0', 'requiremin' => '8.2.0'],
'test3' => ['id' => 'test3', 'version' => '1.2.4', 'requiremin' => '9.0.0'],
'testnoversion' => ['id' => 'testnoversion', 'requiremin' => '8.2.0'],
];
$this->manager->expects($this->any())
->method('getAppInfo')
->will($this->returnCallback(
function($appId) use ($appInfos) {
return $appInfos[$appId];
}
));
$this->appConfig->setValue('test1', 'enabled', 'yes');
$this->appConfig->setValue('test2', 'enabled', 'yes');
$this->appConfig->setValue('test3', 'enabled', 'yes');
$apps = $this->manager->getIncompatibleApps('8.2.0');
$this->assertCount(2, $apps);
$this->assertEquals('test1', $apps[0]['id']);
$this->assertEquals('test3', $apps[1]['id']);
}
}