commit 39dbe028ebe4eefd7209c83feaf0cd97b45be4f7 Author: pratik Date: Sun Dec 4 22:23:06 2022 +0530 new commit diff --git a/core/modules/system/tests/src/Functional/Module/InstallTest.php b/core/modules/system/tests/src/Functional/Module/InstallTest.php deleted file mode 100644 index 151c7d8318..0000000000 --- a/core/modules/system/tests/src/Functional/Module/InstallTest.php +++ /dev/null @@ -1,102 +0,0 @@ -select('module_test', 'mt')->fields('mt', ['data'])->execute()->fetchField(); - $this->assertSame('varchar', $value); - } - - /** - * Tests enabling User module once more. - * - * Regression: The installer might enable a module twice due to automatic - * dependency resolution. A bug caused the stored weight for User module to - * be an array. - */ - public function testEnableUserTwice() { - \Drupal::service('module_installer')->install(['user'], FALSE); - $this->assertSame(0, $this->config('core.extension')->get('module.user')); - } - - /** - * Tests recorded schema versions of early installed modules in the installer. - */ - public function testRequiredModuleSchemaVersions() { - /** @var \Drupal\Core\Update\UpdateHookRegistry $update_registry */ - $update_registry = \Drupal::service('update.update_hook_registry'); - $version = $update_registry->getInstalledVersion('system'); - $this->assertGreaterThan(0, $version); - $version = $update_registry->getInstalledVersion('user'); - $this->assertGreaterThan(0, $version); - - $post_update_key_value = \Drupal::keyValue('post_update'); - $existing_updates = $post_update_key_value->get('existing_updates', []); - $this->assertContains('module_test_post_update_test', $existing_updates); - } - - /** - * Ensures that post update functions are removed on uninstall. - */ - public function testUninstallPostUpdateFunctions() { - \Drupal::service('module_installer')->uninstall(['module_test']); - - $post_update_key_value = \Drupal::keyValue('post_update'); - $existing_updates = $post_update_key_value->get('existing_updates', []); - $this->assertNotContains('module_test_post_update_test', $existing_updates); - } - - /** - * Tests that an exception is thrown when a module name is too long. - */ - public function testModuleNameLength() { - $module_name = 'invalid_module_name_over_the_maximum_allowed_character_length'; - $message = new FormattableMarkup('Exception thrown when enabling module %name with a name length over the allowed maximum', ['%name' => $module_name]); - try { - $this->container->get('module_installer')->install([$module_name]); - $this->fail($message); - } - catch (\Exception $e) { - $this->assertInstanceOf(ExtensionNameLengthException::class, $e); - } - - // Since for the UI, the submit callback uses FALSE, test that too. - $message = new FormattableMarkup('Exception thrown when enabling as if via the UI the module %name with a name length over the allowed maximum', ['%name' => $module_name]); - try { - $this->container->get('module_installer')->install([$module_name], FALSE); - $this->fail($message); - } - catch (\Exception $e) { - $this->assertInstanceOf(ExtensionNameLengthException::class, $e); - } - } - -} diff --git a/core/modules/system/tests/src/Kernel/Module/InstallTest.php b/core/modules/system/tests/src/Kernel/Module/InstallTest.php new file mode 100644 index 0000000000..93561ddd01 --- /dev/null +++ b/core/modules/system/tests/src/Kernel/Module/InstallTest.php @@ -0,0 +1,123 @@ +moduleInstaller = $this->container->get('module_installer'); + $this->moduleInstaller->install([ + 'module_test', + 'system', + 'user', + ]); + } + + /** + * Verify that drupal_get_schema() can be used during module installation. + */ + public function testGetSchemaAtInstallTime(): void { + // @see module_test_install() + $database = $this->container->get('database'); + $value = $database->select('module_test') + ->fields('module_test', ['data']) + ->execute() + ->fetchField(); + $this->assertEquals('varchar', $value); + } + + /** + * Tests enabling User module once more. + * + * Regression: The installer might enable a module twice due to automatic + * dependency resolution. A bug caused the stored weight for user.module to + * be an array. + */ + public function testEnableUserTwice(): void { + $this->moduleInstaller->install(['user'], FALSE); + $this->assertSame(0, $this->config('core.extension')->get('module.user')); + + // To avoid false positives, ensure that a module that does not exist does + // not return exactly zero. + $this->assertNotSame(0, $this->config('core.extension') + ->get('module.does_not_exist')); + } + + /** + * Tests recorded schema versions of early installed modules in the installer. + */ + public function testRequiredModuleSchemaVersions(): void { + /** @var \Drupal\Core\Update\UpdateHookRegistry $update_registry */ + $update_registry = \Drupal::service('update.update_hook_registry'); + $version = $update_registry->getInstalledVersion('system'); + $this->assertGreaterThan(0, $version); + $version = $update_registry->getInstalledVersion('user'); + $this->assertGreaterThan(0, $version); + + $post_update_key_value = \Drupal::keyValue('post_update'); + $existing_updates = $post_update_key_value->get('existing_updates', []); + $this->assertContains('module_test_post_update_test', $existing_updates); + } + + /** + * Ensures that post update functions are removed on uninstallation. + */ + public function testUninstallPostUpdateFunctions(): void { + // First, to avoid false positives, ensure that the post_update function + // exists while the module is still installed. + $post_update_key_value = $this->container->get('keyvalue') + ->get('post_update'); + $existing_updates = $post_update_key_value->get('existing_updates', []); + $this->assertContains('module_test_post_update_test', $existing_updates); + + // Uninstall the module. + $this->moduleInstaller->uninstall(['module_test']); + + // Ensure the post update function is no longer listed. + $existing_updates = $post_update_key_value->get('existing_updates', []); + $this->assertNotContains('module_test_post_update_test', $existing_updates); + } + + /** + * Tests that an exception is thrown when a module name is too long. + */ + public function testModuleNameLength(): void { + $module_name = 'invalid_module_name_over_the_maximum_allowed_character_length'; + $this->expectException(ExtensionNameLengthException::class); + $this->expectExceptionMessage("Module name 'invalid_module_name_over_the_maximum_allowed_character_length' is over the maximum allowed length of 50 characters"); + $this->moduleInstaller->install([$module_name]); + } + + /** + * Tests that an exception is thrown when a module name is too long. + * + * We do this without checking dependencies for the module to install. + */ + public function testModuleNameLengthWithoutDependencyCheck(): void { + $module_name = 'invalid_module_name_over_the_maximum_allowed_character_length'; + $this->expectException(ExtensionNameLengthException::class); + $this->expectExceptionMessage("Module name 'invalid_module_name_over_the_maximum_allowed_character_length' is over the maximum allowed length of 50 characters"); + $this->moduleInstaller->install([$module_name], FALSE); + } + +} \ No newline at end of file