X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests%2FPluginManagerTest.php;h=71761ac17db62f18eb199f4f85e32774b4ae2cf4;hb=HEAD;hp=61efce68310ba1c791063ecebb7544bf57acf57d;hpb=0c4c7ae818336d5b0f94562e551ca1a3f34d3435;p=github%2Fshaarli%2FShaarli.git diff --git a/tests/PluginManagerTest.php b/tests/PluginManagerTest.php index 61efce68..75b3ae00 100644 --- a/tests/PluginManagerTest.php +++ b/tests/PluginManagerTest.php @@ -1,15 +1,14 @@ pluginManager = new PluginManager($conf); @@ -36,54 +35,144 @@ class PluginManagerTest extends PHPUnit_Framework_TestCase /** * Test plugin loading and hook execution. - * - * @return void */ - public function testPlugin() + public function testPlugin(): void { PluginManager::$PLUGINS_PATH = self::$pluginPath; $this->pluginManager->load(array(self::$pluginName)); $this->assertTrue(function_exists('hook_test_random')); - $data = array(0 => 'woot'); + $data = [0 => 'woot']; $this->pluginManager->executeHooks('random', $data); - $this->assertEquals('woot', $data[1]); - $data = array(0 => 'woot'); + static::assertCount(2, $data); + static::assertSame('woot', $data[1]); + + $data = [0 => 'woot']; $this->pluginManager->executeHooks('random', $data, array('target' => 'test')); - $this->assertEquals('page test', $data[1]); - $data = array(0 => 'woot'); + static::assertCount(2, $data); + static::assertSame('page test', $data[1]); + + $data = [0 => 'woot']; $this->pluginManager->executeHooks('random', $data, array('loggedin' => true)); - $this->assertEquals('loggedin', $data[1]); + + static::assertCount(2, $data); + static::assertEquals('loggedin', $data[1]); + + $data = [0 => 'woot']; + $this->pluginManager->executeHooks('random', $data, array('loggedin' => null)); + + static::assertCount(3, $data); + static::assertEquals('loggedin', $data[1]); + static::assertArrayHasKey(2, $data); + static::assertNull($data[2]); + } + + /** + * Test plugin loading and hook execution with an error: raise an incompatibility error. + */ + public function testPluginWithPhpError(): void + { + PluginManager::$PLUGINS_PATH = self::$pluginPath; + $this->pluginManager->load(array(self::$pluginName)); + + $this->assertTrue(function_exists('hook_test_error')); + + $data = []; + $this->pluginManager->executeHooks('error', $data); + + $this->assertRegExp( + '/test \[plugin incompatibility\]: Class [\'"]Unknown[\'"] not found/', + $this->pluginManager->getErrors()[0] + ); } /** * Test missing plugin loading. - * - * @return void */ - public function testPluginNotFound() + public function testPluginNotFound(): void { - $this->pluginManager->load(array()); - $this->pluginManager->load(array('nope', 'renope')); + $this->pluginManager->load([]); + $this->pluginManager->load(['nope', 'renope']); + $this->addToAssertionCount(1); } /** * Test plugin metadata loading. */ - public function testGetPluginsMeta() + public function testGetPluginsMeta(): void { PluginManager::$PLUGINS_PATH = self::$pluginPath; - $this->pluginManager->load(array(self::$pluginName)); + $this->pluginManager->load([self::$pluginName]); - $expectedParameters = array( - 'pop' => '', - 'hip' => '', - ); + $expectedParameters = [ + 'pop' => [ + 'value' => '', + 'desc' => 'pop description', + ], + 'hip' => [ + 'value' => '', + 'desc' => '', + ], + ]; $meta = $this->pluginManager->getPluginsMeta(); $this->assertEquals('test plugin', $meta[self::$pluginName]['description']); $this->assertEquals($expectedParameters, $meta[self::$pluginName]['parameters']); } -} \ No newline at end of file + + /** + * Test plugin custom routes - note that there is no check on callable functions + */ + public function testRegisteredRoutes(): void + { + PluginManager::$PLUGINS_PATH = self::$pluginPath; + $this->pluginManager->load([self::$pluginName]); + + $expectedParameters = [ + [ + 'method' => 'GET', + 'route' => '/test', + 'callable' => 'getFunction', + ], + [ + 'method' => 'POST', + 'route' => '/custom', + 'callable' => 'postFunction', + ], + ]; + $meta = $this->pluginManager->getRegisteredRoutes(); + static::assertSame($expectedParameters, $meta[self::$pluginName]); + } + + /** + * Test plugin custom routes with invalid route + */ + public function testRegisteredRoutesInvalid(): void + { + $plugin = 'test_route_invalid'; + $this->pluginManager->load([$plugin]); + + $meta = $this->pluginManager->getRegisteredRoutes(); + static::assertSame([], $meta); + + $errors = $this->pluginManager->getErrors(); + static::assertSame(['test_route_invalid [plugin incompatibility]: trying to register invalid route.'], $errors); + } + + public function testSearchFilterPlugin(): void + { + PluginManager::$PLUGINS_PATH = self::$pluginPath; + $this->pluginManager->load([self::$pluginName]); + + static::assertNull($this->pluginManager->getFilterSearchEntryHooks()); + + static::assertTrue($this->pluginManager->filterSearchEntry(new Bookmark(), ['_result' => true])); + + static::assertCount(1, $this->pluginManager->getFilterSearchEntryHooks()); + static::assertSame('hook_test_filter_search_entry', $this->pluginManager->getFilterSearchEntryHooks()[0]); + + static::assertFalse($this->pluginManager->filterSearchEntry(new Bookmark(), ['_result' => false])); + } +}