From 2fe57efec0208b6ba304ab18b0919218b46c6ba6 Mon Sep 17 00:00:00 2001 From: Dries <dries@buytaert.net> Date: Thu, 20 Jun 2013 14:07:44 -0400 Subject: [PATCH] Issue #2022769 by fubhy, xjm: Fixed conversion of field_delete_field() in hook_uninstall(). --- core/modules/comment/comment.install | 3 - .../comment/Tests/CommentUninstallTest.php | 77 +++++++++++++++++++ core/modules/forum/forum.install | 5 +- .../Drupal/forum/Tests/ForumUninstallTest.php | 69 +++++++++++++++++ 4 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 core/modules/comment/lib/Drupal/comment/Tests/CommentUninstallTest.php create mode 100644 core/modules/forum/lib/Drupal/forum/Tests/ForumUninstallTest.php diff --git a/core/modules/comment/comment.install b/core/modules/comment/comment.install index 936159095d97..71b2cf0556aa 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 000000000000..48e749feef4d --- /dev/null +++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentUninstallTest.php @@ -0,0 +1,77 @@ +<?php + +/** + * @file + * Definition of Drupal\comment\Tests\CommentUninstallTest. + */ + +namespace Drupal\comment\Tests; + +use Drupal\simpletest\WebTestBase; + +/** + * Tests comment module uninstallation. + */ +class CommentUninstallTest extends WebTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = array('comment', 'node'); + + public static function getInfo() { + return array( + 'name' => '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 f90b9665b1de..9f1609934dda 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 000000000000..0fe25e3ae4b1 --- /dev/null +++ b/core/modules/forum/lib/Drupal/forum/Tests/ForumUninstallTest.php @@ -0,0 +1,69 @@ +<?php + +/** + * @file + * Definition of Drupal\forum\Tests\ForumUninstallTest. + */ + +namespace Drupal\forum\Tests; + +use Drupal\simpletest\WebTestBase; + +/** + * Tests forum module uninstallation. + */ +class ForumUninstallTest extends WebTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = array('forum'); + + public static function getInfo() { + return array( + 'name' => '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')); + } + +} -- GitLab