Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Steur <tsteur@users.noreply.github.com>2017-05-15 08:01:58 +0300
committerMatthieu Aubry <mattab@users.noreply.github.com>2017-05-15 08:01:58 +0300
commitb18fb8241ed64e7d7adf30993f6e954351452ec5 (patch)
tree0f6caee720819dba0b64d48c14ee1aa5a9cb1a57 /tests/PHPUnit
parent210655cc0bb01edc88511087751bc0c6c471a58b (diff)
Make sure plugins in config.ini.php are sorted depending on dependencies (#11683)
* fix #11681 make sure plugins in config.ini.php are sorted depending on dependencies * added comment * add missing tests
Diffstat (limited to 'tests/PHPUnit')
-rw-r--r--tests/PHPUnit/Framework/TestingEnvironmentManipulator.php20
-rw-r--r--tests/PHPUnit/Integration/Application/Kernel/PluginListTest.php113
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);
+ }
+
+}