From 56cf0aa6aa3d2981525518580df7eb061ddf47d2 Mon Sep 17 00:00:00 2001 From: Denis Zunke Date: Tue, 13 Aug 2024 19:43:55 +0200 Subject: [PATCH] Remove single plugin loader methods in favor for single method initialize --- src/Configuration/PluginLoader.php | 23 +---- src/Plugin/BasePlugin.php | 18 ---- src/Plugin/Plugin.php | 24 ----- tests/Configuration/PluginLoaderTest.php | 57 ++---------- tests/Fixtures/Plugin/TestPlugin.php | 109 +++++++++++------------ 5 files changed, 58 insertions(+), 173 deletions(-) diff --git a/src/Configuration/PluginLoader.php b/src/Configuration/PluginLoader.php index 84705f3..d13c66a 100644 --- a/src/Configuration/PluginLoader.php +++ b/src/Configuration/PluginLoader.php @@ -8,7 +8,6 @@ use Panaly\Plugin\Plugin; use Throwable; -use function array_walk; use function assert; class PluginLoader @@ -24,28 +23,10 @@ public function load(ConfigurationFile $configurationFile, RuntimeConfiguration throw PluginLoadingFailed::instantiationFailed($plugin->class, $e); } + $runtimeConfiguration->addPlugin($loadedPlugin); + $loadedPlugin->initialize($configurationFile, $runtimeConfiguration, $plugin->options); $runtimeConfiguration->getLogger()->debug('Plugin "' . $plugin->class . '" initialized.', $plugin->options); - - $loadedPluginMetrics = $loadedPlugin->getAvailableMetrics($plugin->options); - array_walk( - $loadedPluginMetrics, - static fn (Plugin\Metric $metric) => $runtimeConfiguration->addMetric($metric), - ); - - $loadedPluginStorages = $loadedPlugin->getAvailableStorages($plugin->options); - array_walk( - $loadedPluginStorages, - static fn (Plugin\Storage $storage) => $runtimeConfiguration->addStorage($storage), - ); - - $loadedPluginReports = $loadedPlugin->getAvailableReporting($plugin->options); - array_walk( - $loadedPluginReports, - static fn (Plugin\Reporting $reporting) => $runtimeConfiguration->addReporting($reporting), - ); - - $runtimeConfiguration->addPlugin($loadedPlugin); } } } diff --git a/src/Plugin/BasePlugin.php b/src/Plugin/BasePlugin.php index 166c3a6..17d26b8 100644 --- a/src/Plugin/BasePlugin.php +++ b/src/Plugin/BasePlugin.php @@ -15,22 +15,4 @@ public function initialize( array $options, ): void { } - - /** @inheritDoc */ - public function getAvailableMetrics(array $options): array - { - return []; - } - - /** @inheritDoc */ - public function getAvailableStorages(array $options): array - { - return []; - } - - /** @inheritDoc */ - public function getAvailableReporting(array $options): array - { - return []; - } } diff --git a/src/Plugin/Plugin.php b/src/Plugin/Plugin.php index cb5f22b..b78a18b 100644 --- a/src/Plugin/Plugin.php +++ b/src/Plugin/Plugin.php @@ -6,9 +6,6 @@ use Panaly\Configuration\ConfigurationFile; use Panaly\Configuration\RuntimeConfiguration; -use Panaly\Plugin\Plugin\Metric; -use Panaly\Plugin\Plugin\Reporting; -use Panaly\Plugin\Plugin\Storage; interface Plugin { @@ -18,25 +15,4 @@ public function initialize( RuntimeConfiguration $runtimeConfiguration, array $options, ): void; - - /** - * @param array $options - * - * @return list - */ - public function getAvailableMetrics(array $options): array; - - /** - * @param array $options - * - * @return list - */ - public function getAvailableStorages(array $options): array; - - /** - * @param array $options - * - * @return list - */ - public function getAvailableReporting(array $options): array; } diff --git a/tests/Configuration/PluginLoaderTest.php b/tests/Configuration/PluginLoaderTest.php index da16b9d..c1eed5f 100644 --- a/tests/Configuration/PluginLoaderTest.php +++ b/tests/Configuration/PluginLoaderTest.php @@ -13,8 +13,6 @@ use PHPUnit\Framework\TestCase; use stdClass; -use function assert; - class PluginLoaderTest extends TestCase { public function testThatTheInstantiationOfPluginsFailsWithException(): void @@ -62,18 +60,10 @@ public function testThatOptionsAreHandOverToThePlugin(): void { $plugin = new class () extends BasePlugin { /** @var array{ - * initialize: array|null, - * metrics: array|null, - * storages: array|null, - * reporting: array|null + * initialize: array|null * } */ - public array $expectedCalls = [ - 'initialize' => null, - 'metrics' => null, - 'storages' => null, - 'reporting' => null, - ]; + public array $expectedCalls = ['initialize' => null]; public function initialize( ConfigurationFile $configurationFile, @@ -82,30 +72,6 @@ public function initialize( ): void { $this->expectedCalls['initialize'] = $options; } - - /** @inheritDoc */ - public function getAvailableMetrics(array $options): array - { - $this->expectedCalls['metrics'] = $options; - - return []; - } - - /** @inheritDoc */ - public function getAvailableStorages(array $options): array - { - $this->expectedCalls['storages'] = $options; - - return []; - } - - /** @inheritDoc */ - public function getAvailableReporting(array $options): array - { - $this->expectedCalls['reporting'] = $options; - - return []; - } }; $pluginOptions = ['foo' => 'bar']; @@ -116,23 +82,12 @@ public function getAvailableReporting(array $options): array [], ); - $runtimeConfiguration = new RuntimeConfiguration(); + $runtimeConfiguration = $this->createMock(RuntimeConfiguration::class); $loader = new PluginLoader(); $loader->load($configurationFile, $runtimeConfiguration); - $loadedPlugin = $runtimeConfiguration->getPlugins()[0]; - assert($loadedPlugin instanceof $plugin); - - self::assertIsArray($loadedPlugin->expectedCalls['initialize']); - self::assertSame($pluginOptions, $loadedPlugin->expectedCalls['initialize']); - - self::assertIsArray($loadedPlugin->expectedCalls['metrics']); - self::assertSame($pluginOptions, $loadedPlugin->expectedCalls['metrics']); - - self::assertIsArray($loadedPlugin->expectedCalls['storages']); - self::assertSame($pluginOptions, $loadedPlugin->expectedCalls['storages']); - - self::assertIsArray($loadedPlugin->expectedCalls['reporting']); - self::assertSame($pluginOptions, $loadedPlugin->expectedCalls['reporting']); + $runtimeConfiguration->expects($this->never())->method('addMetric'); + $runtimeConfiguration->expects($this->never())->method('addReporting'); + $runtimeConfiguration->expects($this->never())->method('addStorage'); } } diff --git a/tests/Fixtures/Plugin/TestPlugin.php b/tests/Fixtures/Plugin/TestPlugin.php index 5c107fd..760219f 100644 --- a/tests/Fixtures/Plugin/TestPlugin.php +++ b/tests/Fixtures/Plugin/TestPlugin.php @@ -5,6 +5,8 @@ namespace Panaly\Test\Fixtures\Plugin; use InvalidArgumentException; +use Panaly\Configuration\ConfigurationFile; +use Panaly\Configuration\RuntimeConfiguration; use Panaly\Plugin\BasePlugin; use Panaly\Plugin\Plugin\Metric; use Panaly\Plugin\Plugin\Reporting; @@ -23,72 +25,61 @@ class TestPlugin extends BasePlugin { /** @inheritDoc */ - public function getAvailableMetrics(array $options): array - { - return [ - new class implements Metric { - public function getIdentifier(): string - { - return 'a_static_integer'; - } + public function initialize( + ConfigurationFile $configurationFile, + RuntimeConfiguration $runtimeConfiguration, + array $options, + ): void { + $runtimeConfiguration->addMetric(new class implements Metric { + public function getIdentifier(): string + { + return 'a_static_integer'; + } - public function getDefaultTitle(): string - { - return 'I am a default title'; - } + public function getDefaultTitle(): string + { + return 'I am a default title'; + } - public function calculate(array $options): Value - { - return new IntegerValue(12); - } - }, - ]; - } + public function calculate(array $options): Value + { + return new IntegerValue(12); + } + }); - /** @inheritDoc */ - public function getAvailableStorages(array $options): array - { - return [ - new class implements Storage { - public function getIdentifier(): string - { - return 'single_json'; - } + $runtimeConfiguration->addStorage(new class implements Storage { + public function getIdentifier(): string + { + return 'single_json'; + } - public function store(Result $result, array $options): void - { - $file = __DIR__ . '/../../../' . ($options['file'] ?? 'panaly-single-json-result.json'); + public function store(Result $result, array $options): void + { + $file = __DIR__ . '/../../../' . ($options['file'] ?? 'panaly-single-json-result.json'); - if ( - file_put_contents( - $file, - json_encode($result->toArray(), JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT), - ) === false - ) { - throw new InvalidArgumentException( - 'The file "' . $file . '" configured in "file" option is not writable.', - ); - } + if ( + file_put_contents( + $file, + json_encode($result->toArray(), JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT), + ) === false + ) { + throw new InvalidArgumentException( + 'The file "' . $file . '" configured in "file" option is not writable.', + ); } - }, - ]; - } + } + }); - /** @inheritDoc */ - public function getAvailableReporting(array $options): array - { - return [ - new class implements Reporting { - public function getIdentifier(): string - { - return 'symfony_dump'; - } + $runtimeConfiguration->addReporting(new class implements Reporting { + public function getIdentifier(): string + { + return 'symfony_dump'; + } - public function report(Result $result, array $options): void - { - VarDumper::dump($result); - } - }, - ]; + public function report(Result $result, array $options): void + { + VarDumper::dump($result); + } + }); } }