2015-05-15 14:01:12 +03:00
|
|
|
<?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;
|
|
|
|
|
|
|
|
use OC\Core\Command\Config\Import;
|
2016-09-01 10:20:54 +03:00
|
|
|
use OCP\IConfig;
|
|
|
|
use Symfony\Component\Console\Input\InputInterface;
|
|
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
2015-05-15 14:01:12 +03:00
|
|
|
use Test\TestCase;
|
|
|
|
|
|
|
|
class ImportTest extends TestCase {
|
2020-08-11 22:32:18 +03:00
|
|
|
/** @var \PHPUnit\Framework\MockObject\MockObject */
|
2015-05-15 14:01:12 +03:00
|
|
|
protected $config;
|
|
|
|
|
2020-08-11 22:32:18 +03:00
|
|
|
/** @var \PHPUnit\Framework\MockObject\MockObject */
|
2015-05-15 14:01:12 +03:00
|
|
|
protected $consoleInput;
|
2020-08-11 22:32:18 +03:00
|
|
|
/** @var \PHPUnit\Framework\MockObject\MockObject */
|
2015-05-15 14:01:12 +03:00
|
|
|
protected $consoleOutput;
|
|
|
|
|
|
|
|
/** @var \Symfony\Component\Console\Command\Command */
|
|
|
|
protected $command;
|
|
|
|
|
2019-11-21 18:40:38 +03:00
|
|
|
protected function setUp(): void {
|
2015-05-15 14:01:12 +03:00
|
|
|
parent::setUp();
|
|
|
|
|
2016-09-01 10:20:54 +03:00
|
|
|
$config = $this->config = $this->getMockBuilder(IConfig::class)
|
2015-05-15 14:01:12 +03:00
|
|
|
->disableOriginalConstructor()
|
|
|
|
->getMock();
|
2016-09-01 10:20:54 +03:00
|
|
|
$this->consoleInput = $this->getMockBuilder(InputInterface::class)->getMock();
|
|
|
|
$this->consoleOutput = $this->getMockBuilder(OutputInterface::class)->getMock();
|
2015-05-15 14:01:12 +03:00
|
|
|
|
|
|
|
/** @var \OCP\IConfig $config */
|
|
|
|
$this->command = new Import($config);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validateAppsArrayData() {
|
|
|
|
return [
|
|
|
|
[0],
|
|
|
|
[1],
|
|
|
|
[null],
|
|
|
|
['new \Exception()'],
|
|
|
|
[json_encode([])],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider validateAppsArrayData
|
|
|
|
*
|
|
|
|
* @param mixed $configValue
|
|
|
|
*/
|
|
|
|
public function testValidateAppsArray($configValue) {
|
2015-06-10 18:09:14 +03:00
|
|
|
$this->invokePrivate($this->command, 'validateAppsArray', [['app' => ['name' => $configValue]]]);
|
2015-05-15 14:01:12 +03:00
|
|
|
$this->assertTrue(true, 'Asserting that no exception is thrown');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validateAppsArrayThrowsData() {
|
|
|
|
return [
|
|
|
|
[false],
|
|
|
|
[true],
|
|
|
|
[[]],
|
|
|
|
[new \Exception()],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider validateAppsArrayThrowsData
|
|
|
|
*
|
|
|
|
* @param mixed $configValue
|
|
|
|
*/
|
|
|
|
public function testValidateAppsArrayThrows($configValue) {
|
|
|
|
try {
|
2015-06-10 18:09:14 +03:00
|
|
|
$this->invokePrivate($this->command, 'validateAppsArray', [['app' => ['name' => $configValue]]]);
|
2015-05-15 14:01:12 +03:00
|
|
|
$this->fail('Did not throw expected UnexpectedValueException');
|
|
|
|
} catch (\UnexpectedValueException $e) {
|
|
|
|
$this->assertStringStartsWith('Invalid app config value for "app":"name".', $e->getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function checkTypeRecursivelyData() {
|
|
|
|
return [
|
|
|
|
[0],
|
|
|
|
[1],
|
|
|
|
[null],
|
|
|
|
['new \Exception()'],
|
|
|
|
[json_encode([])],
|
|
|
|
[false],
|
|
|
|
[true],
|
|
|
|
[[]],
|
|
|
|
[['string']],
|
|
|
|
[['test' => 'string']],
|
|
|
|
[['test' => ['sub' => 'string']]],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider checkTypeRecursivelyData
|
|
|
|
*
|
|
|
|
* @param mixed $configValue
|
|
|
|
*/
|
|
|
|
public function testCheckTypeRecursively($configValue) {
|
2015-06-10 18:09:14 +03:00
|
|
|
$this->invokePrivate($this->command, 'checkTypeRecursively', [$configValue, 'name']);
|
2015-05-15 14:01:12 +03:00
|
|
|
$this->assertTrue(true, 'Asserting that no exception is thrown');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function checkTypeRecursivelyThrowsData() {
|
|
|
|
return [
|
|
|
|
[new \Exception()],
|
|
|
|
[[new \Exception()]],
|
|
|
|
[['test' => new \Exception()]],
|
|
|
|
[['test' => ['sub' => new \Exception()]]],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider checkTypeRecursivelyThrowsData
|
|
|
|
*
|
|
|
|
* @param mixed $configValue
|
|
|
|
*/
|
|
|
|
public function testCheckTypeRecursivelyThrows($configValue) {
|
|
|
|
try {
|
2015-06-10 18:09:14 +03:00
|
|
|
$this->invokePrivate($this->command, 'checkTypeRecursively', [$configValue, 'name']);
|
2015-05-15 14:01:12 +03:00
|
|
|
$this->fail('Did not throw expected UnexpectedValueException');
|
|
|
|
} catch (\UnexpectedValueException $e) {
|
|
|
|
$this->assertStringStartsWith('Invalid system config value for "name"', $e->getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validateArrayData() {
|
|
|
|
return [
|
|
|
|
[['system' => []]],
|
|
|
|
[['apps' => []]],
|
|
|
|
[['system' => [], 'apps' => []]],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider validateArrayData
|
|
|
|
*
|
|
|
|
* @param array $configArray
|
|
|
|
*/
|
|
|
|
public function testValidateArray($configArray) {
|
2015-06-10 18:09:14 +03:00
|
|
|
$this->invokePrivate($this->command, 'validateArray', [$configArray]);
|
2015-05-15 14:01:12 +03:00
|
|
|
$this->assertTrue(true, 'Asserting that no exception is thrown');
|
|
|
|
}
|
|
|
|
|
|
|
|
public function validateArrayThrowsData() {
|
|
|
|
return [
|
|
|
|
[[], 'At least one key of the following is expected:'],
|
|
|
|
[[0 => []], 'Found invalid entries in root'],
|
|
|
|
[['string' => []], 'Found invalid entries in root'],
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @dataProvider validateArrayThrowsData
|
|
|
|
*
|
|
|
|
* @param mixed $configArray
|
|
|
|
* @param string $expectedException
|
|
|
|
*/
|
|
|
|
public function testValidateArrayThrows($configArray, $expectedException) {
|
|
|
|
try {
|
2015-06-10 18:09:14 +03:00
|
|
|
$this->invokePrivate($this->command, 'validateArray', [$configArray]);
|
2015-05-15 14:01:12 +03:00
|
|
|
$this->fail('Did not throw expected UnexpectedValueException');
|
|
|
|
} catch (\UnexpectedValueException $e) {
|
|
|
|
$this->assertStringStartsWith($expectedException, $e->getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|