#974072: fix comment actions.

From: Damien Tournoud <damien@commerceguys.com>


---
 comment/comment.module |    8 +++---
 comment/comment.test   |   69 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 73 insertions(+), 4 deletions(-)

diff --git modules/comment/comment.module modules/comment/comment.module
index fe6f9b5..6395add 100644
--- modules/comment/comment.module
+++ modules/comment/comment.module
@@ -2500,13 +2500,13 @@ function comment_action_info() {
  * @ingroup actions
  */
 function comment_publish_action($comment, $context = array()) {
-  if (isset($comment->comment)) {
+  if (isset($comment->subject)) {
     $subject = $comment->subject;
     $comment->status = COMMENT_PUBLISHED;
   }
   else {
     $cid = $context['cid'];
-    $subject = db_query('SELECT subject FROM {comment} WHERE cid = :cid', array(':cid', $cid))->fetchField();
+    $subject = db_query('SELECT subject FROM {comment} WHERE cid = :cid', array(':cid' => $cid))->fetchField();
     db_update('comment')
       ->fields(array('status' => COMMENT_PUBLISHED))
       ->condition('cid', $cid)
@@ -2527,13 +2527,13 @@ function comment_publish_action($comment, $context = array()) {
  * @ingroup actions
  */
 function comment_unpublish_action($comment, $context = array()) {
-  if (isset($comment->comment)) {
+  if (isset($comment->subject)) {
     $subject = $comment->subject;
     $comment->status = COMMENT_NOT_PUBLISHED;
   }
   else {
     $cid = $context['cid'];
-    $subject = db_query('SELECT subject FROM {comment} WHERE cid = :cid', array(':cid', $cid))->fetchField();
+    $subject = db_query('SELECT subject FROM {comment} WHERE cid = :cid', array(':cid' => $cid))->fetchField();
     db_update('comment')
       ->fields(array('status' => COMMENT_NOT_PUBLISHED))
       ->condition('cid', $cid)
diff --git modules/comment/comment.test modules/comment/comment.test
index 49ae21b..4583a3b 100644
--- modules/comment/comment.test
+++ modules/comment/comment.test
@@ -1340,3 +1340,72 @@ class CommentTokenReplaceTestCase extends CommentHelperCase {
     }
   }
 }
+
+/**
+ * Test actions provided by the comment module.
+ */
+class CommentActionsTestCase extends CommentHelperCase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Comment actions',
+      'description' => 'Test actions provided by the comment module.',
+      'group' => 'Comment',
+    );
+  }
+
+  /**
+   * Test comment publish and unpublish actions.
+   */
+  function testCommentPublishUnpublishActions() {
+    $this->drupalLogin($this->web_user);
+    $comment_text = $this->randomName();
+    $subject = $this->randomName();
+    $comment = $this->postComment($this->node, $comment_text, $subject);
+    $comment = comment_load($comment->id);
+
+    // Unpublish a comment (direct form: doesn't actually save the comment).
+    comment_unpublish_action($comment);
+    $this->assertEqual($comment->status, COMMENT_NOT_PUBLISHED, t('Comment was unpublished'));
+    $this->assertWatchdogMessage('Unpublished comment %subject.', array('%subject' => $subject), t('Found watchdog message'));
+    $this->clearWatchdog();
+
+    // Unpublish a comment (indirect form: modify the comment in the database).
+    comment_unpublish_action(NULL, array('cid' => $comment->cid));
+    $this->assertEqual(comment_load($comment->cid)->status, COMMENT_NOT_PUBLISHED, t('Comment was unpublished'));
+    $this->assertWatchdogMessage('Unpublished comment %subject.', array('%subject' => $subject), t('Found watchdog message'));
+
+    // Publish a comment (direct form: doesn't actually save the comment).
+    comment_publish_action($comment);
+    $this->assertEqual($comment->status, COMMENT_PUBLISHED, t('Comment was published'));
+    $this->assertWatchdogMessage('Published comment %subject.', array('%subject' => $subject), t('Found watchdog message'));
+    $this->clearWatchdog();
+
+    // Publish a comment (indirect form: modify the comment in the database).
+    comment_publish_action(NULL, array('cid' => $comment->cid));
+    $this->assertEqual(comment_load($comment->cid)->status, COMMENT_PUBLISHED, t('Comment was published'));
+    $this->assertWatchdogMessage('Published comment %subject.', array('%subject' => $subject), t('Found watchdog message'));
+    $this->clearWatchdog();
+  }
+
+  /**
+   * Verify that a watchdog message has been entered.
+   *
+   * @param $watchdog_message
+   *   The watchdog message.
+   * @param $variables
+   *   The array of variables passed to watchdog().
+   * @param $message
+   *   The assertion message.
+   */
+  function assertWatchdogMessage($watchdog_message, $variables, $message) {
+    $status = (bool) db_query_range("SELECT 1 FROM {watchdog} WHERE message = :message AND variables = :variables", 0, 1, array(':message' => $watchdog_message, ':variables' => serialize($variables)))->fetchField();
+    return $this->assert($status, $message);
+  }
+
+  /**
+   * Helper function: clear the watchdog.
+   */
+  function clearWatchdog() {
+    db_truncate('watchdog')->execute();
+  }
+}
