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