Make WordPress Core


Ignore:
Timestamp:
10/11/2018 07:15:22 AM (8 years ago)
Author:
SergeyBiryukov
Message:

REST API: Revert [43648] from the 4.9 branch.

This change is out of the 4.9.x scope, and will be reintroduced in 5.0.x.

See #40510.

Location:
branches/4.9
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.9

  • branches/4.9/tests/phpunit/tests/rest-api/rest-revisions-controller.php

    r43648 r43715  
    77 */
    88
    9 /**
    10  * @group restapi
    11  */
     9 /**
     10  * @group restapi
     11  */
    1212class WP_Test_REST_Revisions_Controller extends WP_Test_REST_Controller_Testcase {
    1313    protected static $post_id;
     
    3131        wp_update_post( array( 'post_content' => 'This content is better.', 'ID' => self::$post_id ) );
    3232        wp_update_post( array( 'post_content' => 'This content is marvelous.', 'ID' => self::$post_id ) );
    33         wp_update_post(
    34             array(
    35                 'post_content' => 'This content is fantastic.',
    36                 'ID'           => self::$post_id,
    37             )
    38         );
    3933        wp_set_current_user( 0 );
    4034    }
     
    5246        parent::setUp();
    5347
    54         $revisions             = wp_get_post_revisions( self::$post_id );
    55         $this->total_revisions = count( $revisions );
    56         $this->revisions       = $revisions;
    57         $this->revision_1      = array_pop( $revisions );
    58         $this->revision_id1    = $this->revision_1->ID;
    59         $this->revision_2      = array_pop( $revisions );
    60         $this->revision_id2    = $this->revision_2->ID;
    61         $this->revision_3      = array_pop( $revisions );
    62         $this->revision_id3    = $this->revision_3->ID;
     48        $revisions = wp_get_post_revisions( self::$post_id );
     49        $this->revision_1 = array_pop( $revisions );
     50        $this->revision_id1 = $this->revision_1->ID;
     51        $this->revision_2 = array_pop( $revisions );
     52        $this->revision_id2 = $this->revision_2->ID;
    6353    }
    6454
     
    9282        $data = $response->get_data();
    9383        $this->assertEquals( 200, $response->get_status() );
    94         $this->assertCount( $this->total_revisions, $data );
     84        $this->assertCount( 2, $data );
    9585
    9686        // Reverse chron
    97         $this->assertEquals( $this->revision_id3, $data[0]['id'] );
    98         $this->check_get_revision_response( $data[0], $this->revision_3 );
    99 
    100         $this->assertEquals( $this->revision_id2, $data[1]['id'] );
    101         $this->check_get_revision_response( $data[1], $this->revision_2 );
    102 
    103         $this->assertEquals( $this->revision_id1, $data[2]['id'] );
    104         $this->check_get_revision_response( $data[2], $this->revision_1 );
     87        $this->assertEquals( $this->revision_id2, $data[0]['id'] );
     88        $this->check_get_revision_response( $data[0], $this->revision_2 );
     89
     90        $this->assertEquals( $this->revision_id1, $data[1]['id'] );
     91        $this->check_get_revision_response( $data[1], $this->revision_1 );
    10592    }
    10693
     
    375362    }
    376363
    377     /**
    378      * Test the pagination header of the first page.
    379      *
    380      * @ticket 40510
    381      */
    382     public function test_get_items_pagination_header_of_the_first_page() {
    383         wp_set_current_user( self::$editor_id );
    384 
    385         $rest_route  = '/wp/v2/posts/' . self::$post_id . '/revisions';
    386         $per_page    = 2;
    387         $total_pages = (int) ceil( $this->total_revisions / $per_page );
    388         $page        = 1;  // First page.
    389 
    390         $request = new WP_REST_Request( 'GET', $rest_route );
    391         $request->set_query_params(
    392             array(
    393                 'per_page' => $per_page,
    394                 'page'     => $page,
    395             )
    396         );
    397         $response = rest_get_server()->dispatch( $request );
    398         $headers  = $response->get_headers();
    399         $this->assertSame( $this->total_revisions, $headers['X-WP-Total'] );
    400         $this->assertSame( $total_pages, $headers['X-WP-TotalPages'] );
    401         $next_link = add_query_arg(
    402             array(
    403                 'per_page' => $per_page,
    404                 'page'     => $page + 1,
    405             ),
    406             rest_url( $rest_route )
    407         );
    408         $this->assertFalse( stripos( $headers['Link'], 'rel="prev"' ) );
    409         $this->assertContains( '<' . $next_link . '>; rel="next"', $headers['Link'] );
    410     }
    411 
    412     /**
    413      * Test the pagination header of the last page.
    414      *
    415      * @ticket 40510
    416      */
    417     public function test_get_items_pagination_header_of_the_last_page() {
    418         wp_set_current_user( self::$editor_id );
    419 
    420         $rest_route  = '/wp/v2/posts/' . self::$post_id . '/revisions';
    421         $per_page    = 2;
    422         $total_pages = (int) ceil( $this->total_revisions / $per_page );
    423         $page        = 2;  // Last page.
    424 
    425         $request = new WP_REST_Request( 'GET', $rest_route );
    426         $request->set_query_params(
    427             array(
    428                 'per_page' => $per_page,
    429                 'page'     => $page,
    430             )
    431         );
    432         $response = rest_get_server()->dispatch( $request );
    433         $headers  = $response->get_headers();
    434         $this->assertSame( $this->total_revisions, $headers['X-WP-Total'] );
    435         $this->assertSame( $total_pages, $headers['X-WP-TotalPages'] );
    436         $prev_link = add_query_arg(
    437             array(
    438                 'per_page' => $per_page,
    439                 'page'     => $page - 1,
    440             ),
    441             rest_url( $rest_route )
    442         );
    443         $this->assertContains( '<' . $prev_link . '>; rel="prev"', $headers['Link'] );
    444     }
    445 
    446     /**
    447      * Test that invalid 'per_page' query should error.
    448      *
    449      * @ticket 40510
    450      */
    451     public function test_get_items_invalid_per_page_should_error() {
    452         wp_set_current_user( self::$editor_id );
    453 
    454         $per_page        = -1; // Invalid number.
    455         $expected_error  = 'rest_invalid_param';
    456         $expected_status = 400;
    457 
    458         $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    459         $request->set_param( 'per_page', $per_page );
    460         $response = rest_get_server()->dispatch( $request );
    461         $this->assertErrorResponse( $expected_error, $response, $expected_status );
    462     }
    463 
    464     /**
    465      * Test that out of bounds 'page' query should error.
    466      *
    467      * @ticket 40510
    468      */
    469     public function test_get_items_out_of_bounds_page_should_error() {
    470         wp_set_current_user( self::$editor_id );
    471 
    472         $per_page        = 2;
    473         $total_pages     = (int) ceil( $this->total_revisions / $per_page );
    474         $page            = $total_pages + 1; // Out of bound page.
    475         $expected_error  = 'rest_revision_invalid_page_number';
    476         $expected_status = 400;
    477 
    478         $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    479         $request->set_query_params(
    480             array(
    481                 'per_page' => $per_page,
    482                 'page'     => $page,
    483             )
    484         );
    485         $response = rest_get_server()->dispatch( $request );
    486         $this->assertErrorResponse( $expected_error, $response, $expected_status );
    487     }
    488 
    489     /**
    490      * Test that impossibly high 'page' query should error.
    491      *
    492      * @ticket 40510
    493      */
    494     public function test_get_items_invalid_max_pages_should_error() {
    495         wp_set_current_user( self::$editor_id );
    496 
    497         $per_page        = 2;
    498         $page            = REST_TESTS_IMPOSSIBLY_HIGH_NUMBER; // Invalid number.
    499         $expected_error  = 'rest_revision_invalid_page_number';
    500         $expected_status = 400;
    501 
    502         $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    503         $request->set_query_params(
    504             array(
    505                 'per_page' => $per_page,
    506                 'page'     => $page,
    507             )
    508         );
    509         $response = rest_get_server()->dispatch( $request );
    510         $this->assertErrorResponse( $expected_error, $response, $expected_status );
    511     }
    512 
    513     /**
    514      * Test the search query.
    515      *
    516      * @ticket 40510
    517      */
    518     public function test_get_items_search_query() {
    519         wp_set_current_user( self::$editor_id );
    520 
    521         $search_string    = 'better';
    522         $expected_count   = 1;
    523         $expected_content = 'This content is better.';
    524 
    525         $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    526         $request->set_param( 'search', $search_string );
    527         $response = rest_get_server()->dispatch( $request );
    528         $data     = $response->get_data();
    529         $this->assertCount( $expected_count, $data );
    530         $this->assertContains( $expected_content, $data[0]['content']['rendered'] );
    531     }
    532 
    533     /**
    534      * Test that the default query should fetch all revisions.
    535      *
    536      * @ticket 40510
    537      */
    538     public function test_get_items_default_query_should_fetch_all_revisons() {
    539         wp_set_current_user( self::$editor_id );
    540 
    541         $expected_count = $this->total_revisions;
    542 
    543         $request  = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    544         $response = rest_get_server()->dispatch( $request );
    545         $this->assertCount( $expected_count, $response->get_data() );
    546     }
    547 
    548     /**
    549      * Test that 'offset' query shouldn't work without 'per_page' (fallback -1).
    550      *
    551      * @ticket 40510
    552      */
    553     public function test_get_items_offset_should_not_work_without_per_page() {
    554         wp_set_current_user( self::$editor_id );
    555 
    556         $offset         = 1;
    557         $expected_count = $this->total_revisions;
    558 
    559         $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    560         $request->set_param( 'offset', $offset );
    561         $response = rest_get_server()->dispatch( $request );
    562         $this->assertCount( $expected_count, $response->get_data() );
    563     }
    564 
    565     /**
    566      * Test that 'offset' query should work with 'per_page'.
    567      *
    568      * @ticket 40510
    569      */
    570     public function test_get_items_offset_should_work_with_per_page() {
    571         wp_set_current_user( self::$editor_id );
    572 
    573         $per_page       = 2;
    574         $offset         = 1;
    575         $expected_count = 2;
    576 
    577         $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    578         $request->set_query_params(
    579             array(
    580                 'offset'   => $offset,
    581                 'per_page' => $per_page,
    582             )
    583         );
    584         $response = rest_get_server()->dispatch( $request );
    585         $this->assertCount( $expected_count, $response->get_data() );
    586     }
    587 
    588     /**
    589      * Test that 'offset' query should take priority over 'page'.
    590      *
    591      * @ticket 40510
    592      */
    593     public function test_get_items_offset_should_take_priority_over_page() {
    594         wp_set_current_user( self::$editor_id );
    595 
    596         $per_page       = 2;
    597         $offset         = 1;
    598         $page           = 1;
    599         $expected_count = 2;
    600 
    601         $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    602         $request->set_query_params(
    603             array(
    604                 'offset'   => $offset,
    605                 'per_page' => $per_page,
    606                 'page'     => $page,
    607             )
    608         );
    609         $response = rest_get_server()->dispatch( $request );
    610         $this->assertCount( $expected_count, $response->get_data() );
    611     }
    612 
    613     /**
    614      * Test that 'offset' query, as the total revisions count, should return empty data.
    615      *
    616      * @ticket 40510
    617      */
    618     public function test_get_items_total_revisions_offset_should_return_empty_data() {
    619         wp_set_current_user( self::$editor_id );
    620 
    621         $per_page        = 2;
    622         $offset          = $this->total_revisions;
    623         $expected_error  = 'rest_revision_invalid_offset_number';
    624         $expected_status = 400;
    625 
    626         $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    627         $request->set_query_params(
    628             array(
    629                 'offset'   => $offset,
    630                 'per_page' => $per_page,
    631             )
    632         );
    633         $response = rest_get_server()->dispatch( $request );
    634         $this->assertErrorResponse( $expected_error, $response, $expected_status );
    635     }
    636 
    637     /**
    638      * Test that out of bound 'offset' query should error.
    639      *
    640      * @ticket 40510
    641      */
    642     public function test_get_items_out_of_bound_offset_should_error() {
    643         wp_set_current_user( self::$editor_id );
    644 
    645         $per_page        = 2;
    646         $offset          = $this->total_revisions + 1;
    647         $expected_error  = 'rest_revision_invalid_offset_number';
    648         $expected_status = 400;
    649 
    650         $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    651         $request->set_query_params(
    652             array(
    653                 'offset'   => $offset,
    654                 'per_page' => $per_page,
    655             )
    656         );
    657         $response = rest_get_server()->dispatch( $request );
    658         $this->assertErrorResponse( $expected_error, $response, $expected_status );
    659     }
    660 
    661     /**
    662      * Test that impossible high number for 'offset' query should error.
    663      *
    664      * @ticket 40510
    665      */
    666     public function test_get_items_impossible_high_number_offset_should_error() {
    667         wp_set_current_user( self::$editor_id );
    668 
    669         $per_page        = 2;
    670         $offset          = REST_TESTS_IMPOSSIBLY_HIGH_NUMBER;
    671         $expected_error  = 'rest_revision_invalid_offset_number';
    672         $expected_status = 400;
    673 
    674         $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    675         $request->set_query_params(
    676             array(
    677                 'offset'   => $offset,
    678                 'per_page' => $per_page,
    679             )
    680         );
    681         $response = rest_get_server()->dispatch( $request );
    682         $this->assertErrorResponse( $expected_error, $response, $expected_status );
    683     }
    684 
    685     /**
    686      * Test that invalid 'offset' query should error.
    687      *
    688      * @ticket 40510
    689      */
    690     public function test_get_items_invalid_offset_should_error() {
    691         wp_set_current_user( self::$editor_id );
    692 
    693         $per_page        = 2;
    694         $offset          = 'moreplease';
    695         $expected_error  = 'rest_invalid_param';
    696         $expected_status = 400;
    697 
    698         $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    699         $request->set_query_params(
    700             array(
    701                 'offset'   => $offset,
    702                 'per_page' => $per_page,
    703             )
    704         );
    705         $response = rest_get_server()->dispatch( $request );
    706         $this->assertErrorResponse( $expected_error, $response, $expected_status );
    707     }
    708 
    709     /**
    710      * Test that out of bounds 'page' query should not error when offset is provided,
    711      * because it takes precedence.
    712      *
    713      * @ticket 40510
    714      */
    715     public function test_get_items_out_of_bounds_page_should_not_error_if_offset() {
    716         wp_set_current_user( self::$editor_id );
    717 
    718         $per_page       = 2;
    719         $total_pages    = (int) ceil( $this->total_revisions / $per_page );
    720         $page           = $total_pages + 1; // Out of bound page.
    721         $expected_count = 2;
    722 
    723         $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' );
    724         $request->set_query_params(
    725             array(
    726                 'offset'   => 1,
    727                 'per_page' => $per_page,
    728                 'page'     => $page,
    729             )
    730         );
    731         $response = rest_get_server()->dispatch( $request );
    732         $this->assertCount( $expected_count, $response->get_data() );
    733     }
    734364}
Note: See TracChangeset for help on using the changeset viewer.