Signed-off-by: Denis Mosolov <denismosolov@gmail.com>tags/v14.0.0RC1
@@ -0,0 +1,67 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2018 Denis Mosolov <denismosolov@gmail.com> | |||
* | |||
* @author Denis Mosolov <denismosolov@gmail.com> | |||
* | |||
* @license GNU AGPL version 3 or any later version | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* 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 | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
namespace OC\Core\Command\Group; | |||
use OC\Core\Command\Base; | |||
use OCP\IGroupManager; | |||
use Symfony\Component\Console\Input\InputArgument; | |||
use Symfony\Component\Console\Input\InputInterface; | |||
use Symfony\Component\Console\Output\OutputInterface; | |||
class Add extends Base { | |||
/** @var IGroupManager */ | |||
protected $groupManager; | |||
/** | |||
* @param IGroupManager $groupManager | |||
*/ | |||
public function __construct(IGroupManager $groupManager) { | |||
$this->groupManager = $groupManager; | |||
parent::__construct(); | |||
} | |||
protected function configure() { | |||
$this | |||
->setName('group:add') | |||
->setDescription('Add a group') | |||
->addArgument( | |||
'groupid', | |||
InputArgument::REQUIRED, | |||
'Group name' | |||
); | |||
} | |||
protected function execute(InputInterface $input, OutputInterface $output) { | |||
$gid = $input->getArgument('groupid'); | |||
$group = $this->groupManager->get($gid); | |||
if ($group) { | |||
$output->writeln('<error>Group "' . $gid . '" already exists.</error>'); | |||
return 1; | |||
} else { | |||
$group = $this->groupManager->createGroup($gid); | |||
$output->writeln('Created group "' . $group->getGID() . '"'); | |||
} | |||
} | |||
} |
@@ -0,0 +1,74 @@ | |||
<?php | |||
declare(strict_types=1); | |||
/** | |||
* @copyright Copyright (c) 2018 Denis Mosolov <denismosolov@gmail.com> | |||
* | |||
* @author Denis Mosolov <denismosolov@gmail.com> | |||
* | |||
* @license GNU AGPL version 3 or any later version | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Affero General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* 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 | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
namespace OC\Core\Command\Group; | |||
use OC\Core\Command\Base; | |||
use OCP\IGroupManager; | |||
use Symfony\Component\Console\Input\InputArgument; | |||
use Symfony\Component\Console\Input\InputInterface; | |||
use Symfony\Component\Console\Output\OutputInterface; | |||
class Delete extends Base { | |||
/** @var IGroupManager */ | |||
protected $groupManager; | |||
/** | |||
* @param IGroupManager $groupManager | |||
*/ | |||
public function __construct(IGroupManager $groupManager) { | |||
$this->groupManager = $groupManager; | |||
parent::__construct(); | |||
} | |||
protected function configure() { | |||
$this | |||
->setName('group:delete') | |||
->setDescription('Remove a group') | |||
->addArgument( | |||
'groupid', | |||
InputArgument::REQUIRED, | |||
'Group name' | |||
); | |||
} | |||
protected function execute(InputInterface $input, OutputInterface $output) { | |||
$gid = $input->getArgument('groupid'); | |||
if ($gid === 'admin') { | |||
$output->writeln('<error>Group "' . $gid . '" could not be deleted.</error>'); | |||
return 1; | |||
} | |||
if (! $this->groupManager->groupExists($gid)) { | |||
$output->writeln('<error>Group "' . $gid . '" does not exist.</error>'); | |||
return 1; | |||
} | |||
$group = $this->groupManager->get($gid); | |||
if ($group->delete()) { | |||
$output->writeln('Group "' . $gid . '" was removed'); | |||
} else { | |||
$output->writeln('<error>Group "' . $gid . '" could not be deleted. Please check the logs.</error>'); | |||
return 1; | |||
} | |||
} | |||
} |
@@ -154,6 +154,8 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) { | |||
$application->add(new OC\Core\Command\User\ListCommand(\OC::$server->getUserManager())); | |||
$application->add(new OC\Core\Command\User\Info(\OC::$server->getUserManager(), \OC::$server->getGroupManager())); | |||
$application->add(new OC\Core\Command\Group\Add(\OC::$server->getGroupManager())); | |||
$application->add(new OC\Core\Command\Group\Delete(\OC::$server->getGroupManager())); | |||
$application->add(new OC\Core\Command\Group\ListCommand(\OC::$server->getGroupManager())); | |||
$application->add(new OC\Core\Command\Group\AddUser(\OC::$server->getUserManager(), \OC::$server->getGroupManager())); | |||
$application->add(new OC\Core\Command\Group\RemoveUser(\OC::$server->getUserManager(), \OC::$server->getGroupManager())); |
@@ -541,7 +541,9 @@ return array( | |||
'OC\\Core\\Command\\Encryption\\SetDefaultModule' => $baseDir . '/core/Command/Encryption/SetDefaultModule.php', | |||
'OC\\Core\\Command\\Encryption\\ShowKeyStorageRoot' => $baseDir . '/core/Command/Encryption/ShowKeyStorageRoot.php', | |||
'OC\\Core\\Command\\Encryption\\Status' => $baseDir . '/core/Command/Encryption/Status.php', | |||
'OC\\Core\\Command\\Group\\Add' => $baseDir . '/core/Command/Group/Add.php', | |||
'OC\\Core\\Command\\Group\\AddUser' => $baseDir . '/core/Command/Group/AddUser.php', | |||
'OC\\Core\\Command\\Group\\Delete' => $baseDir . '/core/Command/Group/Delete.php', | |||
'OC\\Core\\Command\\Group\\ListCommand' => $baseDir . '/core/Command/Group/ListCommand.php', | |||
'OC\\Core\\Command\\Group\\RemoveUser' => $baseDir . '/core/Command/Group/RemoveUser.php', | |||
'OC\\Core\\Command\\Integrity\\CheckApp' => $baseDir . '/core/Command/Integrity/CheckApp.php', |
@@ -571,7 +571,9 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c | |||
'OC\\Core\\Command\\Encryption\\SetDefaultModule' => __DIR__ . '/../../..' . '/core/Command/Encryption/SetDefaultModule.php', | |||
'OC\\Core\\Command\\Encryption\\ShowKeyStorageRoot' => __DIR__ . '/../../..' . '/core/Command/Encryption/ShowKeyStorageRoot.php', | |||
'OC\\Core\\Command\\Encryption\\Status' => __DIR__ . '/../../..' . '/core/Command/Encryption/Status.php', | |||
'OC\\Core\\Command\\Group\\Add' => __DIR__ . '/../../..' . '/core/Command/Group/Add.php', | |||
'OC\\Core\\Command\\Group\\AddUser' => __DIR__ . '/../../..' . '/core/Command/Group/AddUser.php', | |||
'OC\\Core\\Command\\Group\\Delete' => __DIR__ . '/../../..' . '/core/Command/Group/Delete.php', | |||
'OC\\Core\\Command\\Group\\ListCommand' => __DIR__ . '/../../..' . '/core/Command/Group/ListCommand.php', | |||
'OC\\Core\\Command\\Group\\RemoveUser' => __DIR__ . '/../../..' . '/core/Command/Group/RemoveUser.php', | |||
'OC\\Core\\Command\\Integrity\\CheckApp' => __DIR__ . '/../../..' . '/core/Command/Integrity/CheckApp.php', |
@@ -0,0 +1,98 @@ | |||
<?php | |||
/** | |||
* @copyright 2018, Denis Mosolov <denismosolov@gmail.com> | |||
* | |||
* @author Denis Mosolov <denismosolov@gmail.com> | |||
* | |||
* @license GNU AGPL version 3 or any later version | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Afferoq General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* 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 | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
namespace Test\Core\Command\Group; | |||
use OC\Core\Command\Group\Add; | |||
use OCP\IGroup; | |||
use OCP\IGroupManager; | |||
use Symfony\Component\Console\Input\InputInterface; | |||
use Symfony\Component\Console\Output\OutputInterface; | |||
use Test\TestCase; | |||
class AddTest extends TestCase { | |||
/** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ | |||
private $groupManager; | |||
/** @var Add */ | |||
private $command; | |||
/** @var InputInterface|\PHPUnit_Framework_MockObject_MockObject */ | |||
private $input; | |||
/** @var OutputInterface|\PHPUnit_Framework_MockObject_MockObject */ | |||
private $output; | |||
public function setUp() { | |||
parent::setUp(); | |||
$this->groupManager = $this->createMock(IGroupManager::class); | |||
$this->command = new Add($this->groupManager); | |||
$this->input = $this->createMock(InputInterface::class); | |||
$this->input->method('getArgument') | |||
->willReturnCallback(function($arg) { | |||
if ($arg === 'groupid') { | |||
return 'myGroup'; | |||
} | |||
throw new \Exception(); | |||
}); | |||
$this->output = $this->createMock(OutputInterface::class); | |||
} | |||
public function testGroupExists() { | |||
$gid = 'myGroup'; | |||
$group = $this->createMock(IGroup::class); | |||
$this->groupManager->method('get') | |||
->with($gid) | |||
->willReturn($group); | |||
$this->groupManager->expects($this->never()) | |||
->method('createGroup'); | |||
$this->output->expects($this->once()) | |||
->method('writeln') | |||
->with($this->equalTo('<error>Group "' . $gid . '" already exists.</error>')); | |||
$this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); | |||
} | |||
public function testAdd() { | |||
$gid = 'myGroup'; | |||
$group = $this->createMock(IGroup::class); | |||
$group->method('getGID') | |||
->willReturn($gid); | |||
$this->groupManager->method('createGroup') | |||
->willReturn($group); | |||
$this->groupManager->expects($this->once()) | |||
->method('createGroup') | |||
->with($this->equalTo($gid)); | |||
$this->output->expects($this->once()) | |||
->method('writeln') | |||
->with($this->equalTo('Created group "' . $group->getGID() . '"')); | |||
$this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); | |||
} | |||
} |
@@ -0,0 +1,148 @@ | |||
<?php | |||
/** | |||
* @copyright 2018, Denis Mosolov <denismosolov@gmail.com> | |||
* | |||
* @author Denis Mosolov <denismosolov@gmail.com> | |||
* | |||
* @license GNU AGPL version 3 or any later version | |||
* | |||
* This program is free software: you can redistribute it and/or modify | |||
* it under the terms of the GNU Afferoq General Public License as | |||
* published by the Free Software Foundation, either version 3 of the | |||
* License, or (at your option) any later version. | |||
* | |||
* 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 | |||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
* | |||
*/ | |||
namespace Test\Core\Command\Group; | |||
use OC\Core\Command\Group\Delete; | |||
use OCP\IGroup; | |||
use OCP\IGroupManager; | |||
use Symfony\Component\Console\Input\InputInterface; | |||
use Symfony\Component\Console\Output\OutputInterface; | |||
use Test\TestCase; | |||
class DeleteTest extends TestCase { | |||
/** @var IGroupManager|\PHPUnit_Framework_MockObject_MockObject */ | |||
private $groupManager; | |||
/** @var Delete */ | |||
private $command; | |||
/** @var InputInterface|\PHPUnit_Framework_MockObject_MockObject */ | |||
private $input; | |||
/** @var OutputInterface|\PHPUnit_Framework_MockObject_MockObject */ | |||
private $output; | |||
public function setUp() { | |||
parent::setUp(); | |||
$this->groupManager = $this->createMock(IGroupManager::class); | |||
$this->command = new Delete($this->groupManager); | |||
$this->input = $this->createMock(InputInterface::class); | |||
$this->output = $this->createMock(OutputInterface::class); | |||
} | |||
public function testDoesNotExists() { | |||
$gid = 'myGroup'; | |||
$this->input->method('getArgument') | |||
->willReturnCallback(function($arg) use ($gid) { | |||
if ($arg === 'groupid') { | |||
return $gid; | |||
} | |||
throw new \Exception(); | |||
}); | |||
$this->groupManager->method('groupExists') | |||
->with($gid) | |||
->willReturn(false); | |||
$this->groupManager->expects($this->never()) | |||
->method('get'); | |||
$this->output->expects($this->once()) | |||
->method('writeln') | |||
->with($this->equalTo('<error>Group "' . $gid . '" does not exist.</error>')); | |||
$this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); | |||
} | |||
public function testDeleteAdmin() { | |||
$gid = 'admin'; | |||
$this->input->method('getArgument') | |||
->willReturnCallback(function($arg) use ($gid) { | |||
if ($arg === 'groupid') { | |||
return $gid; | |||
} | |||
throw new \Exception(); | |||
}); | |||
$this->groupManager->expects($this->never()) | |||
->method($this->anything()); | |||
$this->output->expects($this->once()) | |||
->method('writeln') | |||
->with($this->equalTo('<error>Group "' . $gid . '" could not be deleted.</error>')); | |||
$this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); | |||
} | |||
public function testDeleteFailed() { | |||
$gid = 'myGroup'; | |||
$this->input->method('getArgument') | |||
->willReturnCallback(function($arg) use ($gid) { | |||
if ($arg === 'groupid') { | |||
return $gid; | |||
} | |||
throw new \Exception(); | |||
}); | |||
$group = $this->createMock(IGroup::class); | |||
$group->method('delete') | |||
->willReturn(false); | |||
$this->groupManager->method('groupExists') | |||
->with($gid) | |||
->willReturn(true); | |||
$this->groupManager->method('get') | |||
->with($gid) | |||
->willReturn($group); | |||
$this->output->expects($this->once()) | |||
->method('writeln') | |||
->with($this->equalTo('<error>Group "' . $gid . '" could not be deleted. Please check the logs.</error>')); | |||
$this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); | |||
} | |||
public function testDelete() { | |||
$gid = 'myGroup'; | |||
$this->input->method('getArgument') | |||
->willReturnCallback(function($arg) use ($gid) { | |||
if ($arg === 'groupid') { | |||
return $gid; | |||
} | |||
throw new \Exception(); | |||
}); | |||
$group = $this->createMock(IGroup::class); | |||
$group->method('delete') | |||
->willReturn(true); | |||
$this->groupManager->method('groupExists') | |||
->with($gid) | |||
->willReturn(true); | |||
$this->groupManager->method('get') | |||
->with($gid) | |||
->willReturn($group); | |||
$this->output->expects($this->once()) | |||
->method('writeln') | |||
->with($this->equalTo('Group "' . $gid . '" was removed')); | |||
$this->invokePrivate($this->command, 'execute', [$this->input, $this->output]); | |||
} | |||
} |