Merge pull request #13846 from nextcloud/feature/check-if-app-exist-for-group

Check app path for enableAppForGroups
This commit is contained in:
Morris Jobke 2019-02-01 15:23:01 +01:00 committed by GitHub
commit e5d8645f00
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 9 deletions

View File

@ -254,15 +254,16 @@ class AppManager implements IAppManager {
* *
* @param string $appId * @param string $appId
* @param \OCP\IGroup[] $groups * @param \OCP\IGroup[] $groups
* @throws \Exception if app can't be enabled for groups * @throws \InvalidArgumentException if app can't be enabled for groups
* @throws AppPathNotFoundException
*/ */
public function enableAppForGroups($appId, $groups) { public function enableAppForGroups($appId, $groups) {
// Check if app exists
$this->getAppPath($appId);
$info = $this->getAppInfo($appId); $info = $this->getAppInfo($appId);
if (!empty($info['types'])) { if (!empty($info['types']) && $this->hasProtectedAppType($info['types'])) {
$protectedTypes = array_intersect($this->protectedAppTypes, $info['types']); throw new \InvalidArgumentException("$appId can't be enabled for groups.");
if (!empty($protectedTypes)) {
throw new \Exception("$appId can't be enabled for groups.");
}
} }
$groupIds = array_map(function ($group) { $groupIds = array_map(function ($group) {

View File

@ -149,7 +149,23 @@ class AppManagerTest extends TestCase {
new Group('group2', array(), null) new Group('group2', array(), null)
); );
$this->expectClearCache(); $this->expectClearCache();
$this->manager->enableAppForGroups('test', $groups);
/** @var AppManager|\PHPUnit_Framework_MockObject_MockObject $manager */
$manager = $this->getMockBuilder(AppManager::class)
->setConstructorArgs([
$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory, $this->eventDispatcher
])
->setMethods([
'getAppPath',
])
->getMock();
$manager->expects($this->exactly(2))
->method('getAppPath')
->with('test')
->willReturn('apps/test');
$manager->enableAppForGroups('test', $groups);
$this->assertEquals('["group1","group2"]', $this->appConfig->getValue('test', 'enabled', 'no')); $this->assertEquals('["group1","group2"]', $this->appConfig->getValue('test', 'enabled', 'no'));
} }
@ -183,10 +199,16 @@ class AppManagerTest extends TestCase {
$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory, $this->eventDispatcher $this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory, $this->eventDispatcher
]) ])
->setMethods([ ->setMethods([
'getAppInfo' 'getAppPath',
'getAppInfo',
]) ])
->getMock(); ->getMock();
$manager->expects($this->once())
->method('getAppPath')
->with('test')
->willReturn(null);
$manager->expects($this->once()) $manager->expects($this->once())
->method('getAppInfo') ->method('getAppInfo')
->with('test') ->with('test')
@ -226,10 +248,16 @@ class AppManagerTest extends TestCase {
$this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory, $this->eventDispatcher $this->userSession, $this->appConfig, $this->groupManager, $this->cacheFactory, $this->eventDispatcher
]) ])
->setMethods([ ->setMethods([
'getAppInfo' 'getAppPath',
'getAppInfo',
]) ])
->getMock(); ->getMock();
$manager->expects($this->once())
->method('getAppPath')
->with('test')
->willReturn(null);
$manager->expects($this->once()) $manager->expects($this->once())
->method('getAppInfo') ->method('getAppInfo')
->with('test') ->with('test')