4 changed files with 275 additions and 2 deletions
-
28core/command/base.php
-
88core/command/config/system/getconfig.php
-
1core/register_command.php
-
160tests/core/command/config/system/getconfigtest.php
@ -0,0 +1,88 @@ |
|||||
|
<?php |
||||
|
/** |
||||
|
* @author Joas Schilling <nickvergessen@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 OC\Core\Command\Config\System; |
||||
|
|
||||
|
use OC\Core\Command\Base; |
||||
|
use OC\SystemConfig; |
||||
|
use OCP\IAppConfig; |
||||
|
use Symfony\Component\Console\Input\InputArgument; |
||||
|
use Symfony\Component\Console\Input\InputInterface; |
||||
|
use Symfony\Component\Console\Input\InputOption; |
||||
|
use Symfony\Component\Console\Output\OutputInterface; |
||||
|
|
||||
|
class GetConfig extends Base { |
||||
|
/** * @var SystemConfig */ |
||||
|
protected $systemConfig; |
||||
|
|
||||
|
/** |
||||
|
* @param SystemConfig $systemConfig |
||||
|
*/ |
||||
|
public function __construct(SystemConfig $systemConfig) { |
||||
|
parent::__construct(); |
||||
|
$this->systemConfig = $systemConfig; |
||||
|
} |
||||
|
|
||||
|
protected function configure() { |
||||
|
parent::configure(); |
||||
|
|
||||
|
$this |
||||
|
->setName('config:system:get') |
||||
|
->setDescription('Set a system config value') |
||||
|
->addArgument( |
||||
|
'name', |
||||
|
InputArgument::REQUIRED, |
||||
|
'Name of the config to get' |
||||
|
) |
||||
|
->addOption( |
||||
|
'default-value', |
||||
|
null, |
||||
|
InputOption::VALUE_OPTIONAL, |
||||
|
'If no default value is set and the config does not exist, an error is thrown' |
||||
|
) |
||||
|
; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* Executes the current command. |
||||
|
* |
||||
|
* @param InputInterface $input An InputInterface instance |
||||
|
* @param OutputInterface $output An OutputInterface instance |
||||
|
* @return null|int null or 0 if everything went fine, or an error code |
||||
|
*/ |
||||
|
protected function execute(InputInterface $input, OutputInterface $output) { |
||||
|
$configName = $input->getArgument('name'); |
||||
|
$defaultValue = $input->getOption('default-value'); |
||||
|
|
||||
|
if (!in_array($configName, $this->systemConfig->getKeys()) && !$input->hasParameterOption('--default-value')) { |
||||
|
return 1; |
||||
|
} |
||||
|
|
||||
|
if (!in_array($configName, $this->systemConfig->getKeys())) { |
||||
|
$configValue = $defaultValue; |
||||
|
} else { |
||||
|
$configValue = $this->systemConfig->getValue($configName); |
||||
|
} |
||||
|
|
||||
|
$this->writeMixedInOutputFormat($input, $output, $configValue); |
||||
|
return 0; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,160 @@ |
|||||
|
<?php |
||||
|
/** |
||||
|
* @author Joas Schilling <nickvergessen@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\Core\Command\Config\System; |
||||
|
|
||||
|
|
||||
|
use OC\Core\Command\Config\System\GetConfig; |
||||
|
use Test\TestCase; |
||||
|
|
||||
|
class GetConfigTest extends TestCase { |
||||
|
/** @var \PHPUnit_Framework_MockObject_MockObject */ |
||||
|
protected $systemConfig; |
||||
|
|
||||
|
/** @var \PHPUnit_Framework_MockObject_MockObject */ |
||||
|
protected $consoleInput; |
||||
|
/** @var \PHPUnit_Framework_MockObject_MockObject */ |
||||
|
protected $consoleOutput; |
||||
|
|
||||
|
/** @var \Symfony\Component\Console\Command\Command */ |
||||
|
protected $command; |
||||
|
|
||||
|
protected function setUp() { |
||||
|
parent::setUp(); |
||||
|
|
||||
|
$systemConfig = $this->systemConfig = $this->getMockBuilder('OC\SystemConfig') |
||||
|
->disableOriginalConstructor() |
||||
|
->getMock(); |
||||
|
$this->consoleInput = $this->getMock('Symfony\Component\Console\Input\InputInterface'); |
||||
|
$this->consoleOutput = $this->getMock('Symfony\Component\Console\Output\OutputInterface'); |
||||
|
|
||||
|
/** @var \OC\SystemConfig $systemConfig */ |
||||
|
$this->command = new GetConfig($systemConfig); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public function setData() { |
||||
|
return [ |
||||
|
// String output as json
|
||||
|
['name', 'newvalue', true, null, false, 'json', 0, json_encode('newvalue')], |
||||
|
// String output as plain text
|
||||
|
['name', 'newvalue', true, null, false, 'plain', 0, 'newvalue'], |
||||
|
// String falling back to default output as json
|
||||
|
['name', null, false, 'newvalue', true, 'json', 0, json_encode('newvalue')], |
||||
|
// String falling back without default: error
|
||||
|
['name', null, false, null, false, 'json', 1, null], |
||||
|
|
||||
|
// Int "0" output as json/plain
|
||||
|
['name', 0, true, null, false, 'json', 0, json_encode(0)], |
||||
|
['name', 0, true, null, false, 'plain', 0, '0'], |
||||
|
// Int "1" output as json/plain
|
||||
|
['name', 1, true, null, false, 'json', 0, json_encode(1)], |
||||
|
['name', 1, true, null, false, 'plain', 0, '1'], |
||||
|
|
||||
|
// Bool "true" output as json/plain
|
||||
|
['name', true, true, null, false, 'json', 0, json_encode(true)], |
||||
|
['name', true, true, null, false, 'plain', 0, 'true'], |
||||
|
// Bool "false" output as json/plain
|
||||
|
['name', false, true, null, false, 'json', 0, json_encode(false)], |
||||
|
['name', false, true, null, false, 'plain', 0, 'false'], |
||||
|
|
||||
|
// Null output as json/plain
|
||||
|
['name', null, true, null, false, 'json', 0, json_encode(null)], |
||||
|
['name', null, true, null, false, 'plain', 0, 'null'], |
||||
|
|
||||
|
// Array output as json/plain
|
||||
|
['name', ['a', 'b'], true, null, false, 'json', 0, json_encode(['a', 'b'])], |
||||
|
['name', ['a', 'b'], true, null, false, 'plain', 0, "a\nb"], |
||||
|
// Key array output as json/plain
|
||||
|
['name', [0 => 'a', 1 => 'b'], true, null, false, 'json', 0, json_encode(['a', 'b'])], |
||||
|
['name', [0 => 'a', 1 => 'b'], true, null, false, 'plain', 0, "a\nb"], |
||||
|
// Associative array output as json/plain
|
||||
|
['name', ['a' => 1, 'b' => 2], true, null, false, 'json', 0, json_encode(['a' => 1, 'b' => 2])], |
||||
|
['name', ['a' => 1, 'b' => 2], true, null, false, 'plain', 0, "a: 1\nb: 2"], |
||||
|
|
||||
|
]; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @dataProvider setData |
||||
|
* |
||||
|
* @param string $configName |
||||
|
* @param mixed $value |
||||
|
* @param bool $configExists |
||||
|
* @param mixed $defaultValue |
||||
|
* @param bool $hasDefault |
||||
|
* @param string $outputFormat |
||||
|
* @param int $expectedReturn |
||||
|
* @param string $expectedMessage |
||||
|
*/ |
||||
|
public function testList($configName, $value, $configExists, $defaultValue, $hasDefault, $outputFormat, $expectedReturn, $expectedMessage) { |
||||
|
$this->systemConfig->expects($this->atLeastOnce()) |
||||
|
->method('getKeys') |
||||
|
->willReturn($configExists ? [$configName] : []); |
||||
|
|
||||
|
if (!$expectedReturn) { |
||||
|
if ($configExists) { |
||||
|
$this->systemConfig->expects($this->once()) |
||||
|
->method('getValue') |
||||
|
->with($configName) |
||||
|
->willReturn($value); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
$this->consoleInput->expects($this->once()) |
||||
|
->method('getArgument') |
||||
|
->with('name') |
||||
|
->willReturn($configName); |
||||
|
$this->consoleInput->expects($this->any()) |
||||
|
->method('getOption') |
||||
|
->willReturnMap([ |
||||
|
['default-value', $defaultValue], |
||||
|
['output', $outputFormat], |
||||
|
]); |
||||
|
$this->consoleInput->expects($this->any()) |
||||
|
->method('hasParameterOption') |
||||
|
->willReturnMap([ |
||||
|
['--output', true], |
||||
|
['--default-value', $hasDefault], |
||||
|
]); |
||||
|
|
||||
|
if ($expectedMessage !== null) { |
||||
|
global $output; |
||||
|
|
||||
|
$output = ''; |
||||
|
$this->consoleOutput->expects($this->any()) |
||||
|
->method('writeln') |
||||
|
->willReturnCallback(function($value) { |
||||
|
global $output; |
||||
|
$output .= $value . "\n"; |
||||
|
return $output; |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
$this->assertSame($expectedReturn, \Test_Helper::invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput])); |
||||
|
|
||||
|
if ($expectedMessage !== null) { |
||||
|
global $output; |
||||
|
// Remove the trailing newline
|
||||
|
$this->assertSame($expectedMessage, substr($output, 0, -1)); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue