WordPress.org

Make WordPress Core

Ticket #38420: 38420.2.diff

File 38420.2.diff, 3.6 KB (added by kadamwhite, 5 years ago)

Adds unit tests

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

    diff --git src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
    index 9d7f85a..c047d06 100644
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    137137                        'parent_exclude' => 'post_parent__not_in',
    138138                        'search'         => 's',
    139139                        'slug'           => 'name',
    140                         'status'         => 'post_status',
     140                        'status'         => 'post_status'
    141141                );
    142142
    143143                // For each known parameter which is both registered and present in the request,
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    19061906                        'default'           => 'publish',
    19071907                        'description'       => __( 'Limit result set to posts assigned a specific status; can be comma-delimited list of status types.' ),
    19081908                        'enum'              => array_merge( array_keys( get_post_stati() ), array( 'any' ) ),
    1909                         'sanitize_callback' => 'sanitize_key',
    1910                         'type'              => 'string',
     1909                        'sanitize_callback' => 'wp_parse_slug_list',
     1910                        'type'              => 'array',
    19111911                        'validate_callback' => array( $this, 'validate_user_can_query_private_statuses' ),
    19121912                );
    19131913                $params['filter'] = array(
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    19461946         * @return WP_Error|boolean
    19471947         */
    19481948        public function validate_user_can_query_private_statuses( $value, $request, $parameter ) {
    1949                 if ( 'publish' === $value ) {
     1949                if ( 'publish' === $value || is_array( $value ) && count( 1 === $value ) && in_array( 'publish', $value, true ) ) {
    19501950                        return true;
    19511951                }
    19521952                $post_type_obj = get_post_type_object( $this->post_type );
  • tests/phpunit/tests/rest-api/rest-posts-controller.php

    diff --git tests/phpunit/tests/rest-api/rest-posts-controller.php tests/phpunit/tests/rest-api/rest-posts-controller.php
    index 648d74f..34affe7 100644
    class WP_Test_REST_Posts_Controller extends WP_Test_REST_Post_Type_Controller_Te 
    240240                $this->assertEquals( 1, count( $response->get_data() ) );
    241241        }
    242242
     243        public function test_get_items_multiple_status_query_1() {
     244                wp_set_current_user( 0 );
     245                $this->factory->post->create( array( 'post_status' => 'draft' ) );
     246
     247                $request = new WP_REST_Request( 'GET', '/wp/v2/posts' );
     248                $request->set_param( 'status', array( 'publish' ) );
     249                $response = $this->server->dispatch( $request );
     250                $this->assertEquals( 200, $response->get_status() );
     251                $this->assertEquals( 1, count( $response->get_data() ) );
     252
     253                $request = new WP_REST_Request( 'GET', '/wp/v2/posts' );
     254                $request->set_param( 'status', array( 'draft', 'post' ) );
     255                $response = $this->server->dispatch( $request );
     256                $this->assertErrorResponse( 'rest_invalid_param', $response, 400 );
     257
     258                wp_set_current_user( $this->editor_id );
     259
     260                $request = new WP_REST_Request( 'GET', '/wp/v2/posts' );
     261                $request->set_param( 'status', 'draft,publish' );
     262                $response = $this->server->dispatch( $request );
     263                $this->assertEquals( 200, $response->get_status() );
     264                $this->assertEquals( 2, count( $response->get_data() ) );
     265
     266                $request = new WP_REST_Request( 'GET', '/wp/v2/posts' );
     267                $request->set_param( 'status', array( 'draft', 'publish' ) );
     268                $response = $this->server->dispatch( $request );
     269                $this->assertEquals( 200, $response->get_status() );
     270                $this->assertEquals( 2, count( $response->get_data() ) );
     271        }
     272
    243273        public function test_get_items_status_without_permissions() {
    244274                $draft_id = $this->factory->post->create( array(
    245275                        'post_status' => 'draft',