a2674b2b30
Apps to update and to disable will always be shown. Main title changes only when apps need updated, not core. Added bullet style. Exclude incompatible apps from updated apps list.
277 lines
8.9 KiB
PHP
277 lines
8.9 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' => '9.0.0'],
|
|
'test2' => ['id' => 'test2', 'version' => '1.0.0', 'requiremin' => '8.2.0'],
|
|
'test3' => ['id' => 'test3', 'version' => '1.2.4', 'requiremin' => '9.0.0'],
|
|
'test4' => ['id' => 'test4', 'version' => '3.0.0', 'requiremin' => '8.1.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');
|
|
$this->appConfig->setValue('test4', 'enabled', 'yes');
|
|
$this->appConfig->setValue('test4', 'installed_version', '2.4.0');
|
|
|
|
$apps = $this->manager->getAppsNeedingUpgrade('8.2.0');
|
|
|
|
$this->assertCount(2, $apps);
|
|
$this->assertEquals('test1', $apps[0]['id']);
|
|
$this->assertEquals('test4', $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']);
|
|
}
|
|
}
|