From 585aa50e6a2d7d8f67f8116c207a342c47728dfb Mon Sep 17 00:00:00 2001
From: Angie Byron <webchick@24967.no-reply.drupal.org>
Date: Wed, 28 Jan 2009 01:09:58 +0000
Subject: [PATCH] #346156 by stBorchert, swentel, and catch: Fix deletion of
 terms (with tests).

---
 modules/forum/forum.admin.inc       |  2 +-
 modules/forum/forum.test            | 19 +++++++++++++++++++
 modules/taxonomy/taxonomy.admin.inc |  2 +-
 modules/taxonomy/taxonomy.module    |  4 ++--
 modules/taxonomy/taxonomy.test      | 12 ++++++++++--
 5 files changed, 33 insertions(+), 6 deletions(-)

diff --git a/modules/forum/forum.admin.inc b/modules/forum/forum.admin.inc
index ce1618fca65d..c758ef442002 100644
--- a/modules/forum/forum.admin.inc
+++ b/modules/forum/forum.admin.inc
@@ -173,7 +173,7 @@ function forum_confirm_delete(&$form_state, $tid) {
  * Implementation of forms api _submit call. Deletes a forum after confirmation.
  */
 function forum_confirm_delete_submit($form, &$form_state) {
-  taxonomy_del_term($form_state['values']['tid']);
+  taxonomy_term_delete($form_state['values']['tid']);
   drupal_set_message(t('The forum %term and all sub-forums have been deleted.', array('%term' => $form_state['values']['name'])));
   watchdog('content', 'forum: deleted %term and all its sub-forums.', array('%term' => $form_state['values']['name']));
 
diff --git a/modules/forum/forum.test b/modules/forum/forum.test
index b8e9136c0486..95f0ccbfe7d0 100644
--- a/modules/forum/forum.test
+++ b/modules/forum/forum.test
@@ -103,6 +103,10 @@ class ForumTestCase extends DrupalWebTestCase {
     $this->container = $this->createForum('container');
     // Create forum inside the forum container.
     $this->forum = $this->createForum('forum', $this->container['tid']);
+    // Create second forum in container.
+    $this->delete_forum = $this->createForum('forum', $this->container['tid']);
+    // Delete this second form.
+    $this->deleteForum($this->delete_forum['tid']);
     // Create forum at the top (root) level.
     $this->root_forum = $this->createForum('forum');
   }
@@ -181,6 +185,21 @@ class ForumTestCase extends DrupalWebTestCase {
     return $term;
   }
 
+  /**
+   * Delete a forum.
+   *
+   * @param integer $tid Forum id.
+   */
+  function deleteForum($tid) {
+    // Delete the forum id.
+    $this->drupalPost('admin/build/forum/edit/forum/'. $tid, array(), t('Delete'));
+    $this->drupalPost(NULL, NULL, t('Delete'));
+    
+    // Assert that the forum no longer exists.
+    $this->drupalGet('forum/'. $tid);
+    $this->assertRaw(t('No forums defined'), 'The forum was not found');
+  }
+
   /**
    * Run basic tests on the indicated user.
    *
diff --git a/modules/taxonomy/taxonomy.admin.inc b/modules/taxonomy/taxonomy.admin.inc
index 3ba26135e005..3d9bd50929c9 100644
--- a/modules/taxonomy/taxonomy.admin.inc
+++ b/modules/taxonomy/taxonomy.admin.inc
@@ -837,7 +837,7 @@ function taxonomy_term_confirm_delete(&$form_state, $tid) {
  * @see taxonomy_term_confirm_delete()
  */
 function taxonomy_term_confirm_delete_submit($form, &$form_state) {
-  taxonomy_del_term($form_state['values']['tid']);
+  taxonomy_term_delete($form_state['values']['tid']);
   taxonomy_check_vocabulary_hierarchy($form['#vocabulary'], $form_state['values']);
   drupal_set_message(t('Deleted term %name.', array('%name' => $form_state['values']['name'])));
   watchdog('taxonomy', 'Deleted term %name.', array('%name' => $form_state['values']['name']), WATCHDOG_NOTICE);
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index 4e25c3bd8aac..b28e0a30603c 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -765,8 +765,8 @@ function taxonomy_get_parents($tid, $key = 'tid') {
  */
 function taxonomy_get_parents_all($tid) {
   $parents = array();
-  if ($tid) {
-    $parents[] = taxonomy_term_load($tid);
+  if ($term = taxonomy_term_load($tid)) {
+    $parents[] = $term;
     $n = 0;
     while ($parent = taxonomy_get_parents($parents[$n]->tid)) {
       $parents = array_merge($parents, $parent);
diff --git a/modules/taxonomy/taxonomy.test b/modules/taxonomy/taxonomy.test
index 0047e36ab608..b4ab8880c6dd 100644
--- a/modules/taxonomy/taxonomy.test
+++ b/modules/taxonomy/taxonomy.test
@@ -390,9 +390,9 @@ class TaxonomyTermTestCase extends TaxonomyWebTestCase {
   }
 
   /**
-   * Save and edit a term and assert that the name and description are correct.
+   * Save, edit and delete a term using the user interface.
    */
-  function testTermEdit() {
+  function testTermInterface() {
     $edit = array(
       'name' => $this->randomName(12),
       'description' => $this->randomName(100),
@@ -431,6 +431,14 @@ class TaxonomyTermTestCase extends TaxonomyWebTestCase {
     $this->drupalGet('taxonomy/term/' . $term[0]->tid);
     $this->assertText($edit['name'], t('The randomly generated term name is present.'));
     $this->assertText($edit['description'], t('The randomly generated term description is present.'));
+
+    // Delete the term.
+    $this->drupalPost('taxonomy/term/' . $term[0]->tid . '/edit', array(), t('Delete'));
+    $this->drupalPost(NULL, NULL, t('Delete'));
+
+    // Assert that the term no longer exists.
+    $this->drupalGet('taxonomy/term/' . $term[0]->tid);
+    $this->assertResponse(404, t('The taxonomy term page was not found'));
   }
 }
 
-- 
GitLab