diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/PHPUnit/Framework/TestingEnvironmentManipulator.php | 20 | ||||
-rw-r--r-- | tests/PHPUnit/Integration/Application/Kernel/PluginListTest.php | 113 |
2 files changed, 120 insertions, 13 deletions
diff --git a/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php b/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php index 1aa1a74de8..59bac60155 100644 --- a/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php +++ b/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php @@ -227,16 +227,15 @@ class TestingEnvironmentManipulator implements EnvironmentManipulator private function getPluginAndRequiredPlugins($pluginName, $plugins) { - $pluginJsonPath = $this->makePathToPluginJson($pluginName); + $pluginLoader = new Plugin\MetadataLoader($pluginName); + $pluginJson = $pluginLoader->loadPluginInfoJson(); - if (file_exists($pluginJsonPath)) { - $pluginJson = json_decode(trim(file_get_contents($pluginJsonPath)), true); + if (!empty($pluginJson['require'])) { + foreach ($pluginJson['require'] as $possiblePluginName => $requiredVersion) { - if (!empty($pluginJson['require'])) { - foreach ($pluginJson['require'] as $possiblePluginName => $requiredVersion) { - if (file_exists($this->makePathToPluginJson($possiblePluginName))) { - $plugins = $this->getPluginAndRequiredPlugins($possiblePluginName, $plugins); - } + $pluginLoader2 = new Plugin\MetadataLoader($possiblePluginName); + if (file_exists($pluginLoader2->getPathToPluginJson())) { + $plugins = $this->getPluginAndRequiredPlugins($possiblePluginName, $plugins); } } } @@ -248,11 +247,6 @@ class TestingEnvironmentManipulator implements EnvironmentManipulator return $plugins; } - private function makePathToPluginJson($pluginName) - { - return Plugin\Manager::getPluginsDirectory() . $pluginName . '/' . Plugin\MetadataLoader::PLUGIN_JSON_FILENAME; - } - private function classExists($klass) { if (class_exists($klass)) { diff --git a/tests/PHPUnit/Integration/Application/Kernel/PluginListTest.php b/tests/PHPUnit/Integration/Application/Kernel/PluginListTest.php new file mode 100644 index 0000000000..00f873b2ee --- /dev/null +++ b/tests/PHPUnit/Integration/Application/Kernel/PluginListTest.php @@ -0,0 +1,113 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ +namespace Piwik\Tests\Integration\Application\Kernel; + +use Piwik\Application\Kernel\PluginList; +use Piwik\Container\StaticContainer; +use Piwik\Tests\Framework\TestCase\IntegrationTestCase; + +/** + * @group PluginListTest + * @group Core + */ +class PluginListTest extends IntegrationTestCase +{ + + /** + * @var PluginList + */ + private $pluginList = array(); + + public function setUp() + { + parent::setUp(); + $this->pluginList = $this->makePluginList(); + } + + public function test_sortPlugins() + { + $pluginList = $this->makePluginList(); + $sorted = $pluginList->sortPlugins(array('UsersManager', 'CoreHome', 'MyCustomPlugin', 'ExampleCommand', 'MyCustomPlugin2', 'Abcdef')); + $this->assertSame(array( + 'CoreHome', // core plugins loaded first + 'UsersManager', + 'ExampleCommand', // a "by default disabled plugin" is loaded before custom plugins + 'Abcdef', // then we load custom plugins + 'MyCustomPlugin', + 'MyCustomPlugin2', + ), $sorted); + } + + public function test_sortPlugins_onlyCorePlugins() + { + $pluginList = $this->makePluginList(); + $sorted = $pluginList->sortPlugins(array('UsersManager', 'CoreHome')); + $this->assertSame(array('CoreHome','UsersManager'), $sorted); + } + + public function test_sortPluginsAndRespectDependencies_sortsPluginsAlphabetically() + { + $pluginList = $this->makePluginList(); + $sorted = $pluginList->sortPluginsAndRespectDependencies(array( + 'UsersManager', 'MyCustomPlugin', 'ExampleCommand', 'MyCustomPlugin2', 'CoreHome', 'Abcdef' + )); + $this->assertSame(array( + 'CoreHome', // core plugins loaded first + 'UsersManager', + 'ExampleCommand', // a "by default disabled plugin" is loaded before custom plugins + 'Abcdef', // then we load custom plugins + 'MyCustomPlugin', + 'MyCustomPlugin2', + ), $sorted); + } + + public function test_sortPluginsAndRespectDependencies_makesSureToListRequiredDependencyFirst() + { + $pluginJsonInfo = array( + 'Abcdef' => array('require' => array('MyCustomPlugin2' => '2.2.1')), + 'MyCustomPlugin2' => array('require' => array('CoreHome' => '4.2.1', 'MyCustomPlugin3' => '3.0.3')), + 'fooBar' => array('require' => array('Ast' => '1.2.1', 'MyCustomPlugin3' => '3.0.3')) + ); + + $pluginList = $this->makePluginList(); + $sorted = $pluginList->sortPluginsAndRespectDependencies(array( + 'UsersManager', 'MyCustomPlugin', + 'ExampleCommand', 'MyCustomPlugin2', 'Ast', + 'Acc', 'MyCustomPlugin3', 'CoreHome', 'Abcdef', 'fooBar', + ), $pluginJsonInfo); + $this->assertSame(array( + 'CoreHome', // core plugins loaded first + 'UsersManager', + 'ExampleCommand', // a "by default disabled plugin" is loaded before custom plugins + 'MyCustomPlugin3', + 'MyCustomPlugin2', + 'Abcdef', + 'Acc', + 'Ast', + 'fooBar', + 'MyCustomPlugin', + ), $sorted); + } + + public function test_sortPluginsAndRespectDependencies_onlyCorePlugins() + { + $pluginList = $this->makePluginList(); + $sorted = $pluginList->sortPluginsAndRespectDependencies(array('UsersManager', 'CoreHome')); + $this->assertSame(array('CoreHome','UsersManager'), $sorted); + } + + private function makePluginList() + { + $globalSettingsProvider = StaticContainer::get('Piwik\Application\Kernel\GlobalSettingsProvider'); + $section = $globalSettingsProvider->getSection('Plugins'); + // $section['Plugins'] = $pluginsToLoad; + $globalSettingsProvider->setSection('Plugins', $section); + return new PluginList($globalSettingsProvider); + } + +} |