diff options
author | Robin McCorkell <rmccorkell@owncloud.com> | 2015-08-20 00:13:20 +0100 |
---|---|---|
committer | Joas Schilling <nickvergessen@owncloud.com> | 2016-01-14 15:02:54 +0100 |
commit | b9d384d837b0400933d71701f0bcfcd38fe4285b (patch) | |
tree | 3ea18f40496f583db00eecc2054a1527489fd1af /tests | |
parent | 8f89e3520d74e1805dc46947742a17683ece6ca7 (diff) | |
download | nextcloud-server-b9d384d837b0400933d71701f0bcfcd38fe4285b.tar.gz nextcloud-server-b9d384d837b0400933d71701f0bcfcd38fe4285b.zip |
occ config:system:set can now set other value types
Integers, doubles, booleans and even arrays can now be set, with the
--type=... option. Array setting can be specified by passing multiple
name arguments, e.g. `./occ config:system:set redis port --value=123
--type=integer`
Diffstat (limited to 'tests')
-rw-r--r-- | tests/core/command/config/system/setconfigtest.php | 156 |
1 files changed, 113 insertions, 43 deletions
diff --git a/tests/core/command/config/system/setconfigtest.php b/tests/core/command/config/system/setconfigtest.php index bbabee9b18f..14a6a980938 100644 --- a/tests/core/command/config/system/setconfigtest.php +++ b/tests/core/command/config/system/setconfigtest.php @@ -53,63 +53,133 @@ class SetConfigTest extends TestCase { public function setData() { return [ - [ - 'name', - 'newvalue', - true, - true, - true, - 'info', - ], - [ - 'name', - 'newvalue', - false, - true, - false, - 'comment', - ], + [['name'], 'newvalue', null, 'newvalue'], + [['a', 'b', 'c'], 'foobar', null, ['b' => ['c' => 'foobar']]], + [['a', 'b', 'c'], 'foobar', ['b' => ['d' => 'barfoo']], ['b' => ['d' => 'barfoo', 'c' => 'foobar']]], ]; } /** * @dataProvider setData * - * @param string $configName - * @param mixed $newValue - * @param bool $configExists - * @param bool $updateOnly - * @param bool $updated - * @param string $expectedMessage + * @param array $configNames + * @param string $newValue + * @param mixed $existingData + * @param mixed $expectedValue */ - public function testSet($configName, $newValue, $configExists, $updateOnly, $updated, $expectedMessage) { + public function testSet($configNames, $newValue, $existingData, $expectedValue) { $this->systemConfig->expects($this->once()) - ->method('getKeys') - ->willReturn($configExists ? [$configName] : []); + ->method('setValue') + ->with($configNames[0], $expectedValue); + $this->systemConfig->method('getValue') + ->with($configNames[0]) + ->willReturn($existingData); - if ($updated) { - $this->systemConfig->expects($this->once()) - ->method('setValue') - ->with($configName, $newValue); - } + $this->consoleInput->expects($this->once()) + ->method('getArgument') + ->with('name') + ->willReturn($configNames); + $this->consoleInput->method('getOption') + ->will($this->returnValueMap([ + ['value', $newValue], + ['type', 'string'], + ])); + + $this->invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); + } + + public function setUpdateOnlyProvider() { + return [ + [['name'], null], + [['a', 'b', 'c'], null], + [['a', 'b', 'c'], ['b' => 'foobar']], + [['a', 'b', 'c'], ['b' => ['d' => 'foobar']]], + ]; + } + + /** + * @dataProvider setUpdateOnlyProvider + * @expectedException \UnexpectedValueException + */ + public function testSetUpdateOnly($configNames, $existingData) { + $this->systemConfig->expects($this->never()) + ->method('setValue'); + $this->systemConfig->method('getValue') + ->with($configNames[0]) + ->willReturn($existingData); + $this->systemConfig->method('getKeys') + ->willReturn($existingData ? $configNames[0] : []); $this->consoleInput->expects($this->once()) ->method('getArgument') ->with('name') - ->willReturn($configName); - $this->consoleInput->expects($this->any()) - ->method('getOption') - ->with('value') - ->willReturn($newValue); - $this->consoleInput->expects($this->any()) - ->method('hasParameterOption') - ->with('--update-only') - ->willReturn($updateOnly); - - $this->consoleOutput->expects($this->any()) - ->method('writeln') - ->with($this->stringContains($expectedMessage)); + ->willReturn($configNames); + $this->consoleInput->method('getOption') + ->will($this->returnValueMap([ + ['value', 'foobar'], + ['type', 'string'], + ['update-only', true], + ])); $this->invokePrivate($this->command, 'execute', [$this->consoleInput, $this->consoleOutput]); } + + public function castValueProvider() { + return [ + [null, 'integer', null], + [null, 'string', null], + + ['abc', 'string', 'abc'], + ['dEF', 'str', 'dEF'], + ['123', 's', '123'], + + ['123', 'integer', 123], + ['456', 'int', 456], + ['-666', 'i', -666], + + // only use powers of 2 to avoid precision errors + ['2', 'double', 2.0], + ['0.25', 'd', 0.25], + ['0.5', 'float', 0.5], + ['0.125', 'f', 0.125], + + ['true', 'boolean', true], + ['false', 'bool', false], + ['yes', 'b', true], + ['no', 'b', false], + ['y', 'b', true], + ['n', 'b', false], + ['1', 'b', true], + ['0', 'b', false], + ]; + } + + /** + * @dataProvider castValueProvider + */ + public function testCastValue($value, $type, $expectedValue) { + $this->assertSame($expectedValue, + $this->invokePrivate($this->command, 'castValue', [$value, $type]) + ); + } + + public function castValueInvalidProvider() { + return [ + ['123', 'foobar'], + + ['abc', 'integer'], + ['76ggg', 'double'], + ['true', 'float'], + ['foobar', 'boolean'], + ]; + } + + /** + * @dataProvider castValueInvalidProvider + * @expectedException \InvalidArgumentException + */ + public function testCastValueInvalid($value, $type) { + $this->invokePrivate($this->command, 'castValue', [$value, $type]); + } + } |