mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-23 18:03:17 +00:00
Fix #1663 : Remove plugin configuration on uninstall
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
namespace Alchemy\Phrasea\Command\Plugin;
|
||||
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
|
||||
@@ -23,7 +24,8 @@ class RemovePlugin extends AbstractPluginCommand
|
||||
|
||||
$this
|
||||
->setDescription('Removes a plugin given its name')
|
||||
->addArgument('name', InputArgument::REQUIRED, 'The name of the plugin');
|
||||
->addArgument('name', InputArgument::REQUIRED, 'The name of the plugin')
|
||||
->addOption('keep-config', 'k', InputOption::VALUE_NONE, 'Use this flag to keep configuration');
|
||||
}
|
||||
|
||||
protected function doExecute(InputInterface $input, OutputInterface $output)
|
||||
@@ -42,6 +44,12 @@ class RemovePlugin extends AbstractPluginCommand
|
||||
|
||||
$this->updateConfigFiles($input, $output);
|
||||
|
||||
if (!$input->getOption('keep-config')) {
|
||||
$conf = $this->container['phraseanet.configuration']->getConfig();
|
||||
unset($conf['plugins'][$name]);
|
||||
$this->container['phraseanet.configuration']->setConfig($conf);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@@ -15,6 +15,13 @@ class RemovePluginTest extends PluginCommandTestCase
|
||||
->method('getArgument')
|
||||
->with($this->equalTo('name'))
|
||||
->will($this->returnValue($name));
|
||||
$input->expects($this->any())
|
||||
->method('getOption')
|
||||
->will($this->returnCallback(function ($option) {
|
||||
if ($option === 'keep-config') {
|
||||
return false;
|
||||
}
|
||||
}));
|
||||
|
||||
$output = $this->getMock('Symfony\Component\Console\Output\OutputInterface');
|
||||
|
||||
@@ -33,5 +40,60 @@ class RemovePluginTest extends PluginCommandTestCase
|
||||
$result = $command->execute($input, $output);
|
||||
|
||||
$this->assertSame(0, $result);
|
||||
|
||||
$conf = self::$DI['cli']['phraseanet.configuration']->getConfig();
|
||||
$this->assertArrayNotHasKey('test-plugin', $conf['plugins']);
|
||||
}
|
||||
|
||||
public function testExecuteWithoutRemoveConfig()
|
||||
{
|
||||
$name = 'test-plugin';
|
||||
|
||||
$input = $this->getMock('Symfony\Component\Console\Input\InputInterface');
|
||||
$input->expects($this->once())
|
||||
->method('getArgument')
|
||||
->with($this->equalTo('name'))
|
||||
->will($this->returnValue($name));
|
||||
$input->expects($this->any())
|
||||
->method('getOption')
|
||||
->will($this->returnCallback(function ($option) {
|
||||
if ($option === 'keep-config') {
|
||||
return true;
|
||||
}
|
||||
}));
|
||||
|
||||
$output = $this->getMock('Symfony\Component\Console\Output\OutputInterface');
|
||||
|
||||
$command = new RemovePlugin();
|
||||
$command->setContainer(self::$DI['cli']);
|
||||
|
||||
$data = $this->addPluginData();
|
||||
|
||||
self::$DI['cli']['filesystem'] = $this->createFilesystemMock();
|
||||
self::$DI['cli']['filesystem']->expects($this->at(0))
|
||||
->method('remove')
|
||||
->with(self::$DI['cli']['root.path'].'/www/plugins/'.$name);
|
||||
|
||||
self::$DI['cli']['filesystem']->expects($this->at(1))
|
||||
->method('remove')
|
||||
->with(self::$DI['cli']['plugins.directory'].'/'.$name);
|
||||
|
||||
$result = $command->execute($input, $output);
|
||||
|
||||
$this->assertSame(0, $result);
|
||||
|
||||
$conf = self::$DI['cli']['phraseanet.configuration']->getConfig();
|
||||
$this->assertSame($data, $conf['plugins']['test-plugin']);
|
||||
}
|
||||
|
||||
private function addPluginData()
|
||||
{
|
||||
$data = array('key' => 'value');
|
||||
|
||||
$conf = self::$DI['cli']['phraseanet.configuration']->getConfig();
|
||||
$conf['plugins']['test-plugin'] = $data;
|
||||
self::$DI['cli']['phraseanet.configuration']->setConfig($conf);
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user