View source
<?php
namespace Drupal\KernelTests\Core\Extension;
use Drupal\Core\Database\Database;
use Drupal\Core\Extension\MissingDependencyException;
use Drupal\Core\Extension\Exception\ObsoleteExtensionException;
use Drupal\KernelTests\KernelTestBase;
use Symfony\Component\Routing\Exception\RouteNotFoundException;
class ModuleInstallerTest extends KernelTestBase {
public function testRouteRebuild() {
Database::getConnection()
->schema()
->dropTable('router');
$this->container
->get('module_installer')
->install([
'router_test',
]);
$route = $this->container
->get('router.route_provider')
->getRouteByName('router_test.1');
$this
->assertEquals('/router_test/test1', $route
->getPath());
$this->container
->get('module_installer')
->uninstall([
'router_test',
]);
$this
->expectException(RouteNotFoundException::class);
$this->container
->get('router.route_provider')
->getRouteByName('router_test.1');
}
public function testConfigChangeOnInstall() {
$this->container
->get('module_installer')
->install([
'module_handler_test_multiple_child',
]);
$modules = $this
->config('core.extension')
->get('module');
$this
->assertArrayHasKey('module_handler_test_multiple', $modules, 'Module module_handler_test_multiple is installed');
$this
->assertArrayHasKey('module_handler_test_multiple_child', $modules, 'Module module_handler_test_multiple_child is installed');
$this
->assertEquals(1, $modules['module_handler_test_multiple'], 'Weight of module_handler_test_multiple is set.');
$this
->assertEquals(1, $modules['module_handler_test_multiple_child'], 'Weight of module_handler_test_multiple_child is set.');
}
public function testCacheBinCleanup() {
$schema = $this->container
->get('database')
->schema();
$table = 'cache_module_cachebin';
$module_installer = $this->container
->get('module_installer');
$module_installer
->install([
'module_cachebin',
]);
$cache_bin = $this->container
->get('module_cachebin.cache_bin');
$cache_bin
->set('foo', 'bar');
$this
->assertTrue($schema
->tableExists($table));
$module_installer
->uninstall([
'module_cachebin',
]);
$this
->assertFalse($schema
->tableExists($table));
}
public function testKernelRebuildDuringHookInstall() {
\Drupal::state()
->set('module_test_install:rebuild_container', TRUE);
$module_installer = $this->container
->get('module_installer');
$this
->assertTrue($module_installer
->install([
'module_test',
]));
}
public function testInvalidCoreInstall($module_name, $install_dependencies) {
$this
->expectException(MissingDependencyException::class);
$this
->expectExceptionMessage("Unable to install modules: module '{$module_name}' is incompatible with this version of Drupal core.");
$this->container
->get('module_installer')
->install([
$module_name,
], $install_dependencies);
}
public function providerTestInvalidCoreInstall() {
return [
'no dependencies system_core_incompatible_semver_test' => [
'system_core_incompatible_semver_test',
FALSE,
],
'install_dependencies system_core_incompatible_semver_test' => [
'system_core_incompatible_semver_test',
TRUE,
],
];
}
public function testDependencyInvalidCoreInstall() {
$this
->expectException(MissingDependencyException::class);
$this
->expectExceptionMessage("Unable to install modules: module 'system_incompatible_core_version_dependencies_test'. Its dependency module 'system_core_incompatible_semver_test' is incompatible with this version of Drupal core.");
$this->container
->get('module_installer')
->install([
'system_incompatible_core_version_dependencies_test',
]);
}
public function testDependencyInvalidCoreInstallNoDependencies() {
$this
->assertTrue($this->container
->get('module_installer')
->install([
'system_incompatible_core_version_dependencies_test',
], FALSE));
}
public function testObsoleteInstall() {
$this
->expectException(ObsoleteExtensionException::class);
$this
->expectExceptionMessage("Unable to install modules: module 'system_status_obsolete_test' is obsolete.");
$this->container
->get('module_installer')
->install([
'system_status_obsolete_test',
]);
}
}