parent
a83eac3762
commit
3608c1007e
@ -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)); |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue