. declare(strict_types=1); namespace core\plugininfo; use advanced_testcase; /** * Unit tests for the mod plugininfo class * * @package core * @covers \core\plugininfo\block * @copyright 2023 Andrew Lyons * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class block_test extends advanced_testcase { /** * Test the get_enabled_plugins method. * * @covers ::get_enabled_plugins */ public function test_get_enabled_plugins(): void { $this->resetAfterTest(); // The bigbluebuttonbn plugin is disabled by default. // Check all default formats. $plugins = block::get_enabled_plugins(); $this->assertArrayHasKey('badges', $plugins); $this->assertArrayHasKey('timeline', $plugins); $this->assertArrayHasKey('admin_bookmarks', $plugins); // Disable a plugin. block::enable_plugin('timeline', 0); $plugins = block::get_enabled_plugins(); $this->assertArrayHasKey('badges', $plugins); $this->assertArrayNotHasKey('timeline', $plugins); $this->assertArrayHasKey('admin_bookmarks', $plugins); } /** * Test the is_uninstall_allowed method. * * @dataProvider is_uninstall_allowed_provider * @param string $plugin * @param bool $expected */ public function test_is_uninstall_allowed( string $plugin, bool $expected, ): void { $pluginmanager = \core_plugin_manager::instance(); $plugininfo = $pluginmanager->get_plugin_info("block_{$plugin}"); $this->assertEquals($expected, $plugininfo->is_uninstall_allowed()); } public function is_uninstall_allowed_provider(): array { $plugins = block::get_enabled_plugins(); return array_map(function ($plugin) { $expected = true; if ($plugin === 'settings' || $plugin === 'navigation') { $expected = false; } return [ 'plugin' => $plugin, 'expected' => $expected, ]; }, array_keys($plugins)); } }