summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorDries2013-06-20 18:07:44 (GMT)
committerDries2013-06-20 18:07:44 (GMT)
commit2fe57efec0208b6ba304ab18b0919218b46c6ba6 (patch)
tree11155e4cac7e6f9e459509884cf5afe190998226 /core
parent5d0f9d91c33f4c28fbc86bb86fcbff6cb9321fe2 (diff)
Issue #2022769 by fubhy, xjm: Fixed conversion of field_delete_field() in hook_uninstall().
Diffstat (limited to 'core')
-rw-r--r--core/modules/comment/comment.install3
-rw-r--r--core/modules/comment/lib/Drupal/comment/Tests/CommentUninstallTest.php77
-rw-r--r--core/modules/forum/forum.install5
-rw-r--r--core/modules/forum/lib/Drupal/forum/Tests/ForumUninstallTest.php69
4 files changed, 150 insertions, 4 deletions
diff --git a/core/modules/comment/comment.install b/core/modules/comment/comment.install
index 9361590..71b2cf0 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 0000000..48e749f
--- /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 f90b966..9f16099 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 0000000..0fe25e3
--- /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'));
+ }
+
+}