diff --git a/core/modules/comment/comment.install b/core/modules/comment/comment.install index 936159095d9..71b2cf0556a 100644 --- a/core/modules/comment/comment.install +++ b/core/modules/comment/comment.install @@ -9,9 +9,6 @@ * Implements hook_uninstall(). */ function comment_uninstall() { - // Delete comment_body field. - field_info_field('comment_body')->delete(); - // Remove variables. variable_del('comment_block_count'); $node_types = array_keys(node_type_get_types()); diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentUninstallTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentUninstallTest.php new file mode 100644 index 00000000000..48e749feef4 --- /dev/null +++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentUninstallTest.php @@ -0,0 +1,77 @@ + 'Comment uninstallation', + 'description' => 'Tests comment module uninstallation.', + 'group' => 'Comment', + ); + } + + protected function setUp() { + parent::setup(); + + // Create a content type so that the comment module creates the + // 'comment_body' field upon installation. + $this->drupalCreateContentType(); + } + + /** + * Tests if comment module uninstallation properly deletes the field. + */ + function testCommentUninstallWithField() { + // Ensure that the field exists before uninstallation. + $field = field_info_field('comment_body'); + $this->assertNotNull($field, 'The comment_body field exists.'); + + // Uninstall the comment module which should trigger field deletion. + $this->container->get('module_handler')->disable(array('comment')); + $this->container->get('module_handler')->uninstall(array('comment')); + + // Check that the field is now deleted. + $field = field_info_field('comment_body'); + $this->assertNull($field, 'The comment_body field has been deleted.'); + } + + + /** + * Tests if uninstallation succeeds if the field has been deleted beforehand. + */ + function testCommentUninstallWithoutField() { + // Manually delete the comment_body field before module uninstallation. + $field = field_info_field('comment_body'); + $this->assertNotNull($field, 'The comment_body field exists.'); + $field->delete(); + + // Check that the field is now deleted. + $field = field_info_field('comment_body'); + $this->assertNull($field, 'The comment_body field has been deleted.'); + + // Ensure that uninstallation succeeds even if the field has already been + // deleted manually beforehand. + $this->container->get('module_handler')->disable(array('comment')); + $this->container->get('module_handler')->uninstall(array('comment')); + } + +} diff --git a/core/modules/forum/forum.install b/core/modules/forum/forum.install index f90b9665b1d..9f1609934dd 100644 --- a/core/modules/forum/forum.install +++ b/core/modules/forum/forum.install @@ -122,7 +122,10 @@ function forum_uninstall() { variable_del('node_options_forum'); - field_info_field('taxonomy_forums')->delete(); + if ($field = field_info_field('taxonomy_forums')) { + $field->delete(); + } + // Purge field data now to allow taxonomy module to be uninstalled // if this is the only field remaining. field_purge_batch(10); diff --git a/core/modules/forum/lib/Drupal/forum/Tests/ForumUninstallTest.php b/core/modules/forum/lib/Drupal/forum/Tests/ForumUninstallTest.php new file mode 100644 index 00000000000..0fe25e3ae4b --- /dev/null +++ b/core/modules/forum/lib/Drupal/forum/Tests/ForumUninstallTest.php @@ -0,0 +1,69 @@ + 'Forum uninstallation', + 'description' => 'Tests forum module uninstallation.', + 'group' => 'Forum', + ); + } + + /** + * Tests if forum module uninstallation properly deletes the field. + */ + function testForumUninstallWithField() { + // Ensure that the field exists before uninstallation. + $field = field_info_field('taxonomy_forums'); + $this->assertNotNull($field, 'The taxonomy_forums field exists.'); + + // Uninstall the forum module which should trigger field deletion. + $this->container->get('module_handler')->disable(array('forum')); + $this->container->get('module_handler')->uninstall(array('forum')); + + // Check that the field is now deleted. + $field = field_info_field('taxonomy_forums'); + $this->assertNull($field, 'The taxonomy_forums field has been deleted.'); + } + + + /** + * Tests if uninstallation succeeds if the field has been deleted beforehand. + */ + function testForumUninstallWithoutField() { + // Manually delete the taxonomy_forums field before module uninstallation. + $field = field_info_field('taxonomy_forums'); + $this->assertNotNull($field, 'The taxonomy_forums field exists.'); + $field->delete(); + + // Check that the field is now deleted. + $field = field_info_field('taxonomy_forums'); + $this->assertNull($field, 'The taxonomy_forums field has been deleted.'); + + // Ensure that uninstallation succeeds even if the field has already been + // deleted manually beforehand. + $this->container->get('module_handler')->disable(array('forum')); + $this->container->get('module_handler')->uninstall(array('forum')); + } + +}