Make WordPress Core

Ticket #38720: 38720.2.diff

File 38720.2.diff, 5.7 KB (added by jnylen0, 10 years ago)

We still want to prohibit comment updates with content: ''.

  • src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php

    diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php
    index 365c4f6..3e0071f 100644
    a b class WP_REST_Comments_Controller extends WP_REST_Controller {  
    431431                }
    432432
    433433                /*
    434                  * Do not allow a comment to be created with an empty string for
     434                 * Do not allow a comment to be created with missing or empty
    435435                 * comment_content. See wp_handle_comment_submission().
    436436                 */
    437                 if ( '' === $prepared_comment['comment_content'] ) {
    438                         return new WP_Error( 'rest_comment_content_invalid', __( 'Comment content is invalid.' ), array( 'status' => 400 ) );
     437                if ( empty( $prepared_comment['comment_content'] ) ) {
     438                        return new WP_Error( 'rest_comment_content_required', __( 'Missing comment content.' ), array( 'status' => 400 ) );
    439439                }
    440440
    441441                // Setting remaining values before wp_insert_comment so we can use wp_allow_comment().
    class WP_REST_Comments_Controller extends WP_REST_Controller {  
    636636                                return $prepared_args;
    637637                        }
    638638
     639                        if ( isset( $prepared_args['comment_content'] ) && empty( $prepared_args['comment_content'] ) ) {
     640                                return new WP_Error( 'rest_comment_invalid_content', __( 'Comment content cannot be empty.' ), array( 'status' => 400 ) );
     641                        }
     642
    639643                        $prepared_args['comment_ID'] = $id;
    640644
    641645                        $check_comment_lengths = wp_check_comment_data_max_lengths( $prepared_args );
    class WP_REST_Comments_Controller extends WP_REST_Controller {  
    10641068                        }
    10651069                }
    10661070
    1067                 // Require 'comment_content' unless only the 'comment_status' is being updated.
    1068                 if ( ! empty( $prepared_comment ) && ! isset( $prepared_comment['comment_content'] ) ) {
    1069                         return new WP_Error( 'rest_comment_content_required', __( 'Missing comment content.' ), array( 'status' => 400 ) );
    1070                 }
    1071 
    10721071                /**
    10731072                 * Filters a comment after it is prepared for the database.
    10741073                 *
  • tests/phpunit/tests/rest-api/rest-comments-controller.php

    diff --git a/tests/phpunit/tests/rest-api/rest-comments-controller.php b/tests/phpunit/tests/rest-api/rest-comments-controller.php
    index e225cbc..e5ab1b7 100644
    a b class WP_Test_REST_Comments_Controller extends WP_Test_REST_Controller_Testcase  
    827827                $this->assertEquals( self::$post_id, $data['post'] );
    828828        }
    829829
     830        public function test_create_item_no_content() {
     831                wp_set_current_user( 0 );
     832
     833                $params = array(
     834                        'post'         => self::$post_id,
     835                        'author_name'  => 'Comic Book Guy',
     836                        'author_email' => 'cbg@androidsdungeon.com',
     837                        'author_url'   => 'http://androidsdungeon.com',
     838                        'content'      => '',
     839                        'date'         => '2014-11-07T10:14:25',
     840                );
     841
     842                $request = new WP_REST_Request( 'POST', '/wp/v2/comments' );
     843                $request->add_header( 'content-type', 'application/json' );
     844                $request->set_body( wp_json_encode( $params ) );
     845                $response = $this->server->dispatch( $request );
     846                $this->assertErrorResponse( 'rest_comment_content_required', $response, 400 );
     847
     848                unset( $params['content'] );
     849                $request->set_body( wp_json_encode( $params ) );
     850                $response = $this->server->dispatch( $request );
     851                $this->assertErrorResponse( 'rest_comment_content_required', $response, 400 );
     852        }
     853
    830854        public function test_create_item_using_accepted_content_raw_value() {
    831855                wp_set_current_user( 0 );
    832856
    class WP_Test_REST_Comments_Controller extends WP_Test_REST_Controller_Testcase  
    929953                $this->assertArrayHasKey( 'author_email', $data['data']['params'] );
    930954        }
    931955
    932         public function test_create_item_invalid_blank_content() {
     956        public function test_create_item_invalid_no_content() {
    933957                wp_set_current_user( 0 );
    934958
    935959                $params = array(
    class WP_Test_REST_Comments_Controller extends WP_Test_REST_Controller_Testcase  
    937961                        'author_name'  => 'Reverend Lovejoy',
    938962                        'author_email' => 'lovejoy@example.com',
    939963                        'author_url'   => 'http://timothylovejoy.jr',
    940                         'content'      => '',
    941964                );
    942965
    943966                $request = new WP_REST_Request( 'POST', '/wp/v2/comments' );
    class WP_Test_REST_Comments_Controller extends WP_Test_REST_Controller_Testcase  
    945968                $request->set_body( wp_json_encode( $params ) );
    946969
    947970                $response = $this->server->dispatch( $request );
    948                 $this->assertErrorResponse( 'rest_comment_content_invalid', $response, 400 );
     971                $this->assertErrorResponse( 'rest_comment_content_required', $response, 400 );
     972
     973                $params['content'] = '';
     974                $request->set_body( wp_json_encode( $params ) );
     975                $response = $this->server->dispatch( $request );
     976                $this->assertErrorResponse( 'rest_comment_content_required', $response, 400 );
    949977        }
    950978
    951979        public function test_create_item_invalid_date() {
    class WP_Test_REST_Comments_Controller extends WP_Test_REST_Controller_Testcase  
    16181646                $this->assertEquals( '2014-11-07T10:14:25', $comment['date'] );
    16191647        }
    16201648
     1649        public function test_update_item_no_content() {
     1650                $post_id = $this->factory->post->create();
     1651
     1652                wp_set_current_user( self::$admin_id );
     1653
     1654                $request = new WP_REST_Request( 'PUT', sprintf( '/wp/v2/comments/%d', self::$approved_id ) );
     1655                $request->set_param( 'author_email', 'another@email.com' );
     1656
     1657                // Sending a request without content is fine.
     1658                $response = $this->server->dispatch( $request );
     1659                $this->assertEquals( 200, $response->get_status() );
     1660
     1661                // Sending a request with empty comment is not fine.
     1662                $request->set_param( 'author_email', 'yetanother@email.com' );
     1663                $request->set_param( 'content', '' );
     1664                $response = $this->server->dispatch( $request );
     1665                $this->assertErrorResponse( 'rest_comment_invalid_content', $response, 400 );
     1666        }
     1667
    16211668        public function test_update_comment_status() {
    16221669                wp_set_current_user( self::$admin_id );
    16231670