<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[39444] trunk: REST API: Fix bug where comment author and author email could be an empty string when creating a comment.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/39444">39444</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/39444","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>rachelbaker</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2016-12-02 22:43:03 +0000 (Fri, 02 Dec 2016)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>REST API: Fix bug where comment author and author email could be an empty string when creating a comment.

If the `require_name_email` option is true, creating a comment with an empty string for the author name or email should not be accepted.  Both values can be an empty string on update.

Props flixos90, hnle, dd32, rachelbaker, jnylen0, ChopinBach, joehoyle, pento.

Fixes <a href="https://core.trac.wordpress.org/ticket/38971">#38971</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesrestapiendpointsclasswprestcommentscontrollerphp">trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php</a></li>
<li><a href="#trunktestsphpunittestsrestapirestcommentscontrollerphp">trunk/tests/phpunit/tests/rest-api/rest-comments-controller.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludesrestapiendpointsclasswprestcommentscontrollerphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php    2016-12-02 22:36:25 UTC (rev 39443)
+++ trunk/src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php      2016-12-02 22:43:03 UTC (rev 39444)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -508,17 +508,9 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                // Honor the discussion setting that requires a name and email address of the comment author.
</span><span class="cx" style="display: block; padding: 0 10px">                if ( get_option( 'require_name_email' ) ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if ( ! isset( $prepared_comment['comment_author'] ) && ! isset( $prepared_comment['comment_author_email'] ) ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if ( empty( $prepared_comment['comment_author'] ) || empty( $prepared_comment['comment_author_email'] ) ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 return new WP_Error( 'rest_comment_author_data_required', __( 'Creating a comment requires valid author name and email values.' ), array( 'status' => 400 ) );
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-                       if ( ! isset( $prepared_comment['comment_author'] ) ) {
-                               return new WP_Error( 'rest_comment_author_required', __( 'Creating a comment requires a valid author name.' ), array( 'status' => 400 ) );
-                       }
-
-                       if ( ! isset( $prepared_comment['comment_author_email'] ) ) {
-                               return new WP_Error( 'rest_comment_author_email_required', __( 'Creating a comment requires a valid author email.' ), array( 'status' => 400 ) );
-                       }
</del><span class="cx" style="display: block; padding: 0 10px">                 }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                if ( ! isset( $prepared_comment['comment_author_email'] ) ) {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1155,6 +1147,10 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        'type'         => 'string',
</span><span class="cx" style="display: block; padding: 0 10px">                                        'format'       => 'email',
</span><span class="cx" style="display: block; padding: 0 10px">                                        'context'      => array( 'edit' ),
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                        'arg_options'  => array(
+                                               'sanitize_callback' => array( $this, 'check_comment_author_email' ),
+                                               'validate_callback' => null, // skip built-in validation of 'email'.
+                                       ),
</ins><span class="cx" style="display: block; padding: 0 10px">                                 ),
</span><span class="cx" style="display: block; padding: 0 10px">                                'author_ip'     => array(
</span><span class="cx" style="display: block; padding: 0 10px">                                        'description'  => __( 'IP address for the object author.' ),
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1581,4 +1577,33 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                return current_user_can( 'edit_comment', $comment->comment_ID );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
+       /**
+        * Checks a comment author email for validity.
+        *
+        * Accepts either a valid email address or empty string as a valid comment
+        * author email address. Setting the comment author email to an empty
+        * string is allowed when a comment is being updated.
+        *
+        * @since 4.7.0
+        *
+        * @param string          $value   Author email value submitted.
+        * @param WP_REST_Request $request Full details about the request.
+        * @param string          $param   The parameter name.
+        * @return WP_Error|string The sanitized email address, if valid,
+        *                         otherwise an error.
+        */
+       public function check_comment_author_email( $value, $request, $param ) {
+               $email = (string) $value;
+               if ( empty( $email ) ) {
+                       return $email;
+               }
+
+               $check_email = rest_validate_request_arg( $email, $request, $param );
+               if ( is_wp_error( $check_email ) ) {
+                       return $check_email;
+               }
+
+               return $email;
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> }
</span></span></pre></div>
<a id="trunktestsphpunittestsrestapirestcommentscontrollerphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/tests/phpunit/tests/rest-api/rest-comments-controller.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/tests/phpunit/tests/rest-api/rest-comments-controller.php   2016-12-02 22:36:25 UTC (rev 39443)
+++ trunk/tests/phpunit/tests/rest-api/rest-comments-controller.php     2016-12-02 22:43:03 UTC (rev 39444)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -97,10 +97,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function tearDown() {
-               parent::tearDown();
-       }
-
</del><span class="cx" style="display: block; padding: 0 10px">         public function test_register_routes() {
</span><span class="cx" style="display: block; padding: 0 10px">                $routes = $this->server->get_routes();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -987,13 +983,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $this->assertEquals( $params['content']['raw'], $new_comment->comment_content );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function test_create_comment_missing_required_author_name_and_email_per_option_value() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function test_create_comment_missing_required_author_name() {
</ins><span class="cx" style="display: block; padding: 0 10px">                 add_filter( 'rest_allow_anonymous_comments', '__return_true' );
</span><span class="cx" style="display: block; padding: 0 10px">                update_option( 'require_name_email', 1 );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $params = array(
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        'post'    => self::$post_id,
-                       'content' => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 'post'         => self::$post_id,
+                       'author_email' => 'ekrabappel@springfield-elementary.edu',
+                       'content'      => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
</ins><span class="cx" style="display: block; padding: 0 10px">                 );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $request = new WP_REST_Request( 'POST', '/wp/v2/comments' );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1003,17 +1000,16 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $response = $this->server->dispatch( $request );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $this->assertErrorResponse( 'rest_comment_author_data_required', $response, 400 );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-               update_option( 'require_name_email', 0 );
</del><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function test_create_comment_missing_required_author_name_per_option_value() {
-               wp_set_current_user( self::$admin_id );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function test_create_comment_empty_required_author_name() {
+               add_filter( 'rest_allow_anonymous_comments', '__return_true' );
</ins><span class="cx" style="display: block; padding: 0 10px">                 update_option( 'require_name_email', 1 );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $params = array(
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        'author_name'  => '',
+                       'author_email' => 'ekrabappel@springfield-elementary.edu',
</ins><span class="cx" style="display: block; padding: 0 10px">                         'post'         => self::$post_id,
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        'author_email' => 'ekrabappel@springfield-elementary.edu',
</del><span class="cx" style="display: block; padding: 0 10px">                         'content'      => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
</span><span class="cx" style="display: block; padding: 0 10px">                );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1022,12 +1018,11 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $request->set_body( wp_json_encode( $params ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $response = $this->server->dispatch( $request );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $this->assertErrorResponse( 'rest_comment_author_required', $response, 400 );
</del><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                update_option( 'require_name_email', 0 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $this->assertErrorResponse( 'rest_comment_author_data_required', $response, 400 );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        public function test_create_comment_missing_required_author_email_per_option_value() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function test_create_comment_missing_required_author_email() {
</ins><span class="cx" style="display: block; padding: 0 10px">                 wp_set_current_user( self::$admin_id );
</span><span class="cx" style="display: block; padding: 0 10px">                update_option( 'require_name_email', 1 );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1042,9 +1037,26 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $request->set_body( wp_json_encode( $params ) );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                $response = $this->server->dispatch( $request );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $this->assertErrorResponse( 'rest_comment_author_email_required', $response, 400 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         $this->assertErrorResponse( 'rest_comment_author_data_required', $response, 400 );
+       }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                update_option( 'require_name_email', 0 );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ public function test_create_comment_empty_required_author_email() {
+               wp_set_current_user( self::$admin_id );
+               update_option( 'require_name_email', 1 );
+
+               $params = array(
+                       'post'         => self::$post_id,
+                       'author_name'  => 'Edna Krabappel',
+                       'author_email' => '',
+                       'content'      => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
+               );
+
+               $request = new WP_REST_Request( 'POST', '/wp/v2/comments' );
+               $request->add_header( 'content-type', 'application/json' );
+               $request->set_body( wp_json_encode( $params ) );
+
+               $response = $this->server->dispatch( $request );
+               $this->assertErrorResponse( 'rest_comment_author_data_required', $response, 400 );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        public function test_create_comment_author_email_too_short() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -1992,6 +2004,100 @@
</span><span class="cx" style="display: block; padding: 0 10px">                $this->assertEquals( $params['date_gmt'], mysql_to_rfc3339( $updated->comment_date_gmt ) );
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+        public function test_update_comment_author_email_only() {
+               wp_set_current_user( self::$editor_id );
+               update_option( 'require_name_email', 1 );
+
+               $params = array(
+                       'post'         => self::$post_id,
+                       'author_email' => 'ekrabappel@springfield-elementary.edu',
+                       'content'      => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
+               );
+
+               $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/comments/%d', self::$approved_id ) );
+               $request->add_header( 'content-type', 'application/json' );
+               $request->set_body( wp_json_encode( $params ) );
+
+               $response = $this->server->dispatch( $request );
+               $this->assertEquals( 200, $response->get_status() );
+       }
+
+       public function test_update_comment_empty_author_name() {
+               wp_set_current_user( self::$editor_id );
+               update_option( 'require_name_email', 1 );
+
+               $params = array(
+                       'author_name'  => '',
+                       'author_email' => 'ekrabappel@springfield-elementary.edu',
+                       'post'         => self::$post_id,
+                       'content'      => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
+               );
+
+               $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/comments/%d', self::$approved_id ) );
+               $request->add_header( 'content-type', 'application/json' );
+               $request->set_body( wp_json_encode( $params ) );
+
+               $response = $this->server->dispatch( $request );
+               $this->assertEquals( 200, $response->get_status() );
+       }
+
+       public function test_update_comment_author_name_only() {
+               wp_set_current_user( self::$admin_id );
+               update_option( 'require_name_email', 1 );
+
+               $params = array(
+                       'post'        => self::$post_id,
+                       'author_name' => 'Edna Krabappel',
+                       'content'     => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
+               );
+
+               $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/comments/%d', self::$approved_id ) );
+               $request->add_header( 'content-type', 'application/json' );
+               $request->set_body( wp_json_encode( $params ) );
+
+               $response = $this->server->dispatch( $request );
+               $this->assertEquals( 200, $response->get_status() );
+       }
+
+       public function test_update_comment_empty_author_email() {
+               wp_set_current_user( self::$admin_id );
+               update_option( 'require_name_email', 1 );
+
+               $params = array(
+                       'post'         => self::$post_id,
+                       'author_name'  => 'Edna Krabappel',
+                       'author_email' => '',
+                       'content'      => 'Now, I don\'t want you to worry class. These tests will have no affect on your grades. They merely determine your future social status and financial success. If any.',
+               );
+
+               $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/comments/%d', self::$approved_id ) );
+               $request->add_header( 'content-type', 'application/json' );
+               $request->set_body( wp_json_encode( $params ) );
+
+               $response = $this->server->dispatch( $request );
+               $this->assertEquals( 200, $response->get_status() );
+       }
+
+       public function test_update_comment_author_email_too_short() {
+               wp_set_current_user( self::$admin_id );
+
+               $params = array(
+                       'post'         => self::$post_id,
+                       'author_name'  => 'Homer J. Simpson',
+                       'author_email' => 'a@b',
+                       'content'      => 'in this house, we obey the laws of thermodynamics!',
+               );
+
+               $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/comments/%d', self::$approved_id ) );
+               $request->add_header( 'content-type', 'application/json' );
+               $request->set_body( wp_json_encode( $params ) );
+               $response = $this->server->dispatch( $request );
+
+               $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
+               $data = $response->get_data();
+               $this->assertArrayHasKey( 'author_email', $data['data']['params'] );
+       }
+
</ins><span class="cx" style="display: block; padding: 0 10px">         public function test_update_comment_invalid_type() {
</span><span class="cx" style="display: block; padding: 0 10px">                wp_set_current_user( self::$admin_id );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span></span></pre>
</div>
</div>

</body>
</html>