Issue #2022769 by fubhy, xjm: Fixed conversion of field_delete_field() in hook_uninstall().

8.0.x
Dries 2013-06-20 14:07:44 -04:00
parent 5d0f9d91c3
commit 2fe57efec0
4 changed files with 150 additions and 4 deletions

View File

@ -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());

View File

@ -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'));
}
}

View File

@ -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);

View File

@ -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'));
}
}