Make WordPress Core


Ignore:
Timestamp:
11/05/2019 08:41:12 PM (7 years ago)
Author:
SergeyBiryukov
Message:

REST API: Speed up pagination unit tests by creating less fixtures and reusing them where possible.

Includes minor documentation and code layout fixes for better readability.

See #30017, #48145.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/rest-api/rest-categories-controller.php

    r46586 r46657  
    1616        protected static $subscriber;
    1717
     18        protected static $category_ids     = array();
     19        protected static $total_categories = 30;
     20        protected static $per_page         = 50;
     21
    1822        public static function wpSetUpBeforeClass( $factory ) {
    1923                self::$administrator = $factory->user->create(
     
    3236                        )
    3337                );
     38
     39                // Set up categories for pagination tests.
     40                for ( $i = 0; $i < self::$total_categories - 1; $i++ ) {
     41                        $category_ids[] = $factory->category->create(
     42                                array(
     43                                        'name' => "Category {$i}",
     44                                )
     45                        );
     46                }
    3447        }
    3548
     
    3750                self::delete_user( self::$administrator );
    3851                self::delete_user( self::$subscriber );
     52
     53                // Remove categories for pagination tests.
     54                foreach ( self::$category_ids as $category_id ) {
     55                        wp_delete_term( $category_id, 'category' );
     56                }
    3957        }
    4058
     
    137155
    138156        public function test_get_items() {
    139                 $request  = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     157                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     158                $request->set_param( 'per_page', self::$per_page );
    140159                $response = rest_get_server()->dispatch( $request );
    141160                $this->check_get_taxonomy_terms_response( $response );
     
    144163        public function test_get_items_invalid_permission_for_context() {
    145164                wp_set_current_user( 0 );
     165
    146166                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    147167                $request->set_param( 'context', 'edit' );
     
    154174                $category1 = $this->factory->category->create( array( 'name' => 'Season 5' ) );
    155175                $category2 = $this->factory->category->create( array( 'name' => 'The Be Sharps' ) );
     176
     177                $total_categories = self::$total_categories + 2;
     178
    156179                wp_set_object_terms( $post_id, array( $category1, $category2 ), 'category' );
    157                 $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     180
     181                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     182                $request->set_param( 'per_page', self::$per_page );
    158183                $request->set_param( 'hide_empty', true );
    159184                $response = rest_get_server()->dispatch( $request );
     
    167192                $response = rest_get_server()->dispatch( $request );
    168193                $data     = $response->get_data();
    169                 $this->assertEquals( 3, count( $data ) );
     194                $this->assertEquals( $total_categories, count( $data ) );
    170195        }
    171196
     
    185210                        )
    186211                );
    187                 $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     212
     213                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     214                $request->set_param( 'per_page', self::$per_page );
    188215                $request->set_param( 'parent', 0 );
    189216                $response = rest_get_server()->dispatch( $request );
     
    215242                        )
    216243                );
    217                 $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     244
     245                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     246                $request->set_param( 'per_page', self::$per_page );
    218247                $request->set_param( 'parent', '0' );
    219248                $response = rest_get_server()->dispatch( $request );
     
    255284        public function test_get_items_include_query() {
    256285                $id1 = $this->factory->category->create();
    257                 $this->factory->category->create();
    258                 $id3     = $this->factory->category->create();
    259                 $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    260                 // Orderby=>asc
    261                 $request->set_param( 'include', array( $id3, $id1 ) );
     286                $id2 = $this->factory->category->create();
     287
     288                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     289
     290                // 'orderby' => 'asc'.
     291                $request->set_param( 'include', array( $id2, $id1 ) );
    262292                $response = rest_get_server()->dispatch( $request );
    263293                $data     = $response->get_data();
    264294                $this->assertEquals( 2, count( $data ) );
    265295                $this->assertEquals( $id1, $data[0]['id'] );
    266                 // Orderby=>include
     296
     297                // 'orderby' => 'include'.
    267298                $request->set_param( 'orderby', 'include' );
    268299                $response = rest_get_server()->dispatch( $request );
    269300                $data     = $response->get_data();
    270301                $this->assertEquals( 2, count( $data ) );
    271                 $this->assertEquals( $id3, $data[0]['id'] );
     302                $this->assertEquals( $id2, $data[0]['id'] );
    272303        }
    273304
    274305        public function test_get_items_exclude_query() {
    275                 $id1      = $this->factory->category->create();
    276                 $id2      = $this->factory->category->create();
    277                 $request  = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    278                 $response = rest_get_server()->dispatch( $request );
    279                 $data     = $response->get_data();
    280                 $this->assertTrue( in_array( $id1, wp_list_pluck( $data, 'id' ), true ) );
    281                 $this->assertTrue( in_array( $id2, wp_list_pluck( $data, 'id' ), true ) );
     306                $id1 = $this->factory->category->create();
     307                $id2 = $this->factory->category->create();
     308
     309                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     310                $request->set_param( 'per_page', self::$per_page );
     311                $response = rest_get_server()->dispatch( $request );
     312                $data     = $response->get_data();
     313                $ids      = wp_list_pluck( $data, 'id' );
     314                $this->assertTrue( in_array( $id1, $ids, true ) );
     315                $this->assertTrue( in_array( $id2, $ids, true ) );
     316
    282317                $request->set_param( 'exclude', array( $id2 ) );
    283318                $response = rest_get_server()->dispatch( $request );
    284319                $data     = $response->get_data();
    285                 $this->assertTrue( in_array( $id1, wp_list_pluck( $data, 'id' ), true ) );
    286                 $this->assertFalse( in_array( $id2, wp_list_pluck( $data, 'id' ), true ) );
     320                $ids      = wp_list_pluck( $data, 'id' );
     321                $this->assertTrue( in_array( $id1, $ids, true ) );
     322                $this->assertFalse( in_array( $id2, $ids, true ) );
    287323        }
    288324
     
    290326                $this->factory->category->create( array( 'name' => 'Apple' ) );
    291327                $this->factory->category->create( array( 'name' => 'Banana' ) );
     328
    292329                /*
    293330                 * Tests:
     
    305342                $this->assertEquals( 1, count( $data ) );
    306343                $this->assertEquals( 'Uncategorized', $data[0]['name'] );
     344
    307345                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    308346                $request->set_param( 'orderby', 'name' );
     
    320358                $this->factory->category->create( array( 'name' => 'Apple' ) );
    321359                $this->factory->category->create( array( 'name' => 'Banana' ) );
    322                 // defaults to orderby=name, order=asc
     360
     361                // Defaults to 'orderby' => 'name', 'order' => 'asc'.
    323362                $request  = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    324363                $response = rest_get_server()->dispatch( $request );
     
    328367                $this->assertEquals( 'Banana', $data[1]['name'] );
    329368                $this->assertEquals( 'Cantaloupe', $data[2]['name'] );
    330                 $this->assertEquals( 'Uncategorized', $data[3]['name'] );
    331                 // orderby=id, with default order=asc
     369
     370                // 'orderby' => 'id', with default 'order' => 'asc'.
    332371                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    333372                $request->set_param( 'orderby', 'id' );
     
    335374                $this->assertEquals( 200, $response->get_status() );
    336375                $data = $response->get_data();
    337                 $this->assertEquals( 'Uncategorized', $data[0]['name'] );
    338                 $this->assertEquals( 'Cantaloupe', $data[1]['name'] );
    339                 $this->assertEquals( 'Apple', $data[2]['name'] );
    340                 $this->assertEquals( 'Banana', $data[3]['name'] );
    341                 // orderby=id, order=desc
     376                $this->assertEquals( 'Category 0', $data[1]['name'] );
     377                $this->assertEquals( 'Category 1', $data[2]['name'] );
     378                $this->assertEquals( 'Category 2', $data[3]['name'] );
     379
     380                // 'orderby' => 'id', 'order' => 'desc'.
    342381                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    343382                $request->set_param( 'orderby', 'id' );
     
    487526                $this->factory->category->create( array( 'name' => 'Apple' ) );
    488527                $this->factory->category->create( array( 'name' => 'Banana' ) );
     528
    489529                /*
    490530                 * Tests:
     
    498538                $this->assertEquals( 1, count( $data ) );
    499539                $this->assertEquals( 'Apple', $data[0]['name'] );
     540
    500541                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    501542                $request->set_param( 'search', 'Garbage' );
     
    509550                $this->factory->category->create( array( 'name' => 'Apple' ) );
    510551                $this->factory->category->create( array( 'name' => 'Banana' ) );
     552
    511553                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    512554                $request->set_param( 'slug', 'apple' );
     
    526568                        )
    527569                );
     570
    528571                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    529572                $request->set_param( 'parent', $category1 );
     
    535578
    536579        public function test_get_terms_invalid_parent_arg() {
    537                 $category1 = $this->factory->category->create( array( 'name' => 'Parent' ) );
    538                 $this->factory->category->create(
    539                         array(
    540                                 'name'   => 'Child',
    541                                 'parent' => $category1,
    542                         )
    543                 );
    544580                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    545581                $request->set_param( 'parent', 'invalid-parent' );
     
    575611
    576612        public function test_get_terms_pagination_headers() {
    577                 // Start of the index + Uncategorized default term
    578                 for ( $i = 0; $i < 49; $i++ ) {
    579                         $this->factory->category->create(
    580                                 array(
    581                                         'name' => "Category {$i}",
    582                                 )
    583                         );
    584                 }
     613                $total_categories = self::$total_categories;
     614                $total_pages      = (int) ceil( $total_categories / 10 );
     615
     616                // Start of the index + Uncategorized default term.
    585617                $request  = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    586618                $response = rest_get_server()->dispatch( $request );
    587619                $headers  = $response->get_headers();
    588                 $this->assertEquals( 50, $headers['X-WP-Total'] );
    589                 $this->assertEquals( 5, $headers['X-WP-TotalPages'] );
     620                $this->assertEquals( $total_categories, $headers['X-WP-Total'] );
     621                $this->assertEquals( $total_pages, $headers['X-WP-TotalPages'] );
    590622                $this->assertCount( 10, $response->get_data() );
    591623                $next_link = add_query_arg(
     
    597629                $this->assertFalse( stripos( $headers['Link'], 'rel="prev"' ) );
    598630                $this->assertContains( '<' . $next_link . '>; rel="next"', $headers['Link'] );
    599                 // 3rd page
    600                 $this->factory->category->create(
    601                         array(
    602                                 'name' => 'Category 51',
    603                         )
    604                 );
     631
     632                // 3rd page.
     633                $this->factory->category->create();
     634                $total_categories++;
     635                $total_pages++;
    605636                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    606637                $request->set_param( 'page', 3 );
    607638                $response = rest_get_server()->dispatch( $request );
    608639                $headers  = $response->get_headers();
    609                 $this->assertEquals( 51, $headers['X-WP-Total'] );
    610                 $this->assertEquals( 6, $headers['X-WP-TotalPages'] );
     640                $this->assertEquals( $total_categories, $headers['X-WP-Total'] );
     641                $this->assertEquals( $total_pages, $headers['X-WP-TotalPages'] );
    611642                $this->assertCount( 10, $response->get_data() );
    612643                $prev_link = add_query_arg(
     
    624655                );
    625656                $this->assertContains( '<' . $next_link . '>; rel="next"', $headers['Link'] );
    626                 // Last page
    627                 $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    628                 $request->set_param( 'page', 6 );
     657
     658                // Last page.
     659                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     660                $request->set_param( 'page', $total_pages );
    629661                $response = rest_get_server()->dispatch( $request );
    630662                $headers  = $response->get_headers();
    631                 $this->assertEquals( 51, $headers['X-WP-Total'] );
    632                 $this->assertEquals( 6, $headers['X-WP-TotalPages'] );
     663                $this->assertEquals( $total_categories, $headers['X-WP-Total'] );
     664                $this->assertEquals( $total_pages, $headers['X-WP-TotalPages'] );
    633665                $this->assertCount( 1, $response->get_data() );
    634666                $prev_link = add_query_arg(
    635667                        array(
    636                                 'page' => 5,
     668                                'page' => $total_pages - 1,
    637669                        ),
    638670                        rest_url( 'wp/v2/categories' )
     
    640672                $this->assertContains( '<' . $prev_link . '>; rel="prev"', $headers['Link'] );
    641673                $this->assertFalse( stripos( $headers['Link'], 'rel="next"' ) );
    642                 // Out of bounds
    643                 $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    644                 $request->set_param( 'page', 8 );
     674
     675                // Out of bounds.
     676                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
     677                $request->set_param( 'page', 100 );
    645678                $response = rest_get_server()->dispatch( $request );
    646679                $headers  = $response->get_headers();
    647                 $this->assertEquals( 51, $headers['X-WP-Total'] );
    648                 $this->assertEquals( 6, $headers['X-WP-TotalPages'] );
     680                $this->assertEquals( $total_categories, $headers['X-WP-Total'] );
     681                $this->assertEquals( $total_pages, $headers['X-WP-TotalPages'] );
    649682                $this->assertCount( 0, $response->get_data() );
    650683                $prev_link = add_query_arg(
    651684                        array(
    652                                 'page' => 6,
     685                                'page' => $total_pages,
    653686                        ),
    654687                        rest_url( 'wp/v2/categories' )
     
    659692
    660693        public function test_get_items_per_page_exceeds_number_of_items() {
    661                 // Start of the index + Uncategorized default term
    662                 for ( $i = 0; $i < 17; $i++ ) {
    663                         $this->factory->category->create(
    664                                 array(
    665                                         'name' => "Category {$i}",
    666                                 )
    667                         );
    668                 }
     694                // Start of the index + Uncategorized default term.
    669695                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    670696                $request->set_param( 'page', 1 );
     
    672698                $response = rest_get_server()->dispatch( $request );
    673699                $headers  = $response->get_headers();
    674                 $this->assertEquals( 18, $headers['X-WP-Total'] );
     700                $this->assertEquals( self::$total_categories, $headers['X-WP-Total'] );
    675701                $this->assertEquals( 1, $headers['X-WP-TotalPages'] );
    676                 $this->assertCount( 18, $response->get_data() );
     702                $this->assertCount( self::$total_categories, $response->get_data() );
     703
    677704                $request = new WP_REST_Request( 'GET', '/wp/v2/categories' );
    678705                $request->set_param( 'page', 2 );
     
    680707                $response = rest_get_server()->dispatch( $request );
    681708                $headers  = $response->get_headers();
    682                 $this->assertEquals( 18, $headers['X-WP-Total'] );
     709                $this->assertEquals( self::$total_categories, $headers['X-WP-Total'] );
    683710                $this->assertEquals( 1, $headers['X-WP-TotalPages'] );
    684711                $this->assertCount( 0, $response->get_data() );
     
    738765        public function test_get_item_invalid_permission_for_context() {
    739766                wp_set_current_user( 0 );
     767
    740768                $request = new WP_REST_Request( 'GET', '/wp/v2/categories/1' );
    741769                $request->set_param( 'context', 'edit' );
     
    760788        public function test_get_item_incorrect_taxonomy() {
    761789                register_taxonomy( 'robin', 'post' );
    762                 $term1    = $this->factory->term->create(
     790                $term1 = $this->factory->term->create(
    763791                        array(
    764792                                'name'     => 'Cape',
     
    766794                        )
    767795                );
     796
    768797                $request  = new WP_REST_Request( 'GET', '/wp/v2/categories/' . $term1 );
    769798                $response = rest_get_server()->dispatch( $request );
     
    773802        public function test_create_item() {
    774803                wp_set_current_user( self::$administrator );
     804
    775805                $request = new WP_REST_Request( 'POST', '/wp/v2/categories' );
    776806                $request->set_param( 'name', 'My Awesome Term' );
     
    792822        public function test_create_item_term_already_exists() {
    793823                wp_set_current_user( self::$administrator );
     824
    794825                $existing_id = $this->factory->category->create( array( 'name' => 'Existing' ) );
    795826
     
    808839        public function test_create_item_invalid_taxonomy() {
    809840                wp_set_current_user( self::$administrator );
     841
    810842                $request = new WP_REST_Request( 'POST', '/wp/v2/invalid-taxonomy' );
    811843                $request->set_param( 'name', 'Invalid Taxonomy' );
     
    816848        public function test_create_item_incorrect_permissions() {
    817849                wp_set_current_user( self::$subscriber );
     850
    818851                $request = new WP_REST_Request( 'POST', '/wp/v2/categories' );
    819852                $request->set_param( 'name', 'Incorrect permissions' );
     
    824857        public function test_create_item_incorrect_permissions_contributor() {
    825858                wp_set_current_user( self::$contributor );
     859
    826860                $request = new WP_REST_Request( 'POST', '/wp/v2/categories' );
    827861                $request->set_param( 'name', 'Incorrect permissions' );
     
    832866        public function test_create_item_missing_arguments() {
    833867                wp_set_current_user( self::$administrator );
     868
    834869                $request  = new WP_REST_Request( 'POST', '/wp/v2/categories' );
    835870                $response = rest_get_server()->dispatch( $request );
     
    839874        public function test_create_item_with_parent() {
    840875                wp_set_current_user( self::$administrator );
    841                 $parent  = wp_insert_term( 'test-category', 'category' );
     876
     877                $parent = wp_insert_term( 'test-category', 'category' );
     878
    842879                $request = new WP_REST_Request( 'POST', '/wp/v2/categories' );
    843880                $request->set_param( 'name', 'My Awesome Term' );
     
    851888        public function test_create_item_invalid_parent() {
    852889                wp_set_current_user( self::$administrator );
     890
    853891                $term = get_term_by( 'id', $this->factory->category->create(), 'category' );
    854892
     
    862900        public function test_create_item_with_no_parent() {
    863901                wp_set_current_user( self::$administrator );
    864                 $parent  = 0;
     902
     903                $parent = 0;
     904
    865905                $request = new WP_REST_Request( 'POST', '/wp/v2/categories' );
    866906                $request->set_param( 'name', 'My Awesome Term' );
     
    874914        public function test_update_item() {
    875915                wp_set_current_user( self::$administrator );
     916
    876917                $orig_args = array(
    877918                        'name'        => 'Original Name',
     
    879920                        'slug'        => 'original-slug',
    880921                );
    881                 $term      = get_term_by( 'id', $this->factory->category->create( $orig_args ), 'category' );
    882                 $request   = new WP_REST_Request( 'POST', '/wp/v2/categories/' . $term->term_id );
     922
     923                $term = get_term_by( 'id', $this->factory->category->create( $orig_args ), 'category' );
     924
     925                $request = new WP_REST_Request( 'POST', '/wp/v2/categories/' . $term->term_id );
    883926                $request->set_param( 'name', 'New Name' );
    884927                $request->set_param( 'description', 'New Description' );
     
    905948        public function test_update_item_invalid_taxonomy() {
    906949                wp_set_current_user( self::$administrator );
     950
    907951                $request = new WP_REST_Request( 'POST', '/wp/v2/invalid-taxonomy/' . REST_TESTS_IMPOSSIBLY_HIGH_NUMBER );
    908952                $request->set_param( 'name', 'Invalid Taxonomy' );
     
    913957        public function test_update_item_invalid_term() {
    914958                wp_set_current_user( self::$administrator );
     959
    915960                $request = new WP_REST_Request( 'POST', '/wp/v2/categories/' . REST_TESTS_IMPOSSIBLY_HIGH_NUMBER );
    916961                $request->set_param( 'name', 'Invalid Term' );
     
    921966        public function test_update_item_incorrect_permissions() {
    922967                wp_set_current_user( self::$subscriber );
    923                 $term    = get_term_by( 'id', $this->factory->category->create(), 'category' );
     968
     969                $term = get_term_by( 'id', $this->factory->category->create(), 'category' );
     970
    924971                $request = new WP_REST_Request( 'POST', '/wp/v2/categories/' . $term->term_id );
    925972                $request->set_param( 'name', 'Incorrect permissions' );
     
    930977        public function test_update_item_parent() {
    931978                wp_set_current_user( self::$administrator );
     979
    932980                $parent = get_term_by( 'id', $this->factory->category->create(), 'category' );
    933981                $term   = get_term_by( 'id', $this->factory->category->create(), 'category' );
     
    9711019        public function test_update_item_invalid_parent() {
    9721020                wp_set_current_user( self::$administrator );
     1021
    9731022                $term = get_term_by( 'id', $this->factory->category->create(), 'category' );
    9741023
     
    9811030        public function test_delete_item() {
    9821031                wp_set_current_user( self::$administrator );
    983                 $term    = get_term_by( 'id', $this->factory->category->create( array( 'name' => 'Deleted Category' ) ), 'category' );
     1032
     1033                $term = get_term_by( 'id', $this->factory->category->create( array( 'name' => 'Deleted Category' ) ), 'category' );
     1034
    9841035                $request = new WP_REST_Request( 'DELETE', '/wp/v2/categories/' . $term->term_id );
    9851036                $request->set_param( 'force', true );
     
    9931044        public function test_delete_item_no_trash() {
    9941045                wp_set_current_user( self::$administrator );
     1046
    9951047                $term = get_term_by( 'id', $this->factory->category->create( array( 'name' => 'Deleted Category' ) ), 'category' );
    9961048
     
    10061058        public function test_delete_item_invalid_taxonomy() {
    10071059                wp_set_current_user( self::$administrator );
     1060
    10081061                $request  = new WP_REST_Request( 'DELETE', '/wp/v2/invalid-taxonomy/' . REST_TESTS_IMPOSSIBLY_HIGH_NUMBER );
    10091062                $response = rest_get_server()->dispatch( $request );
     
    10131066        public function test_delete_item_invalid_term() {
    10141067                wp_set_current_user( self::$administrator );
     1068
    10151069                $request  = new WP_REST_Request( 'DELETE', '/wp/v2/categories/' . REST_TESTS_IMPOSSIBLY_HIGH_NUMBER );
    10161070                $response = rest_get_server()->dispatch( $request );
     
    10201074        public function test_delete_item_incorrect_permissions() {
    10211075                wp_set_current_user( self::$subscriber );
     1076
    10221077                $term     = get_term_by( 'id', $this->factory->category->create(), 'category' );
    10231078                $request  = new WP_REST_Request( 'DELETE', '/wp/v2/categories/' . $term->term_id );
Note: See TracChangeset for help on using the changeset viewer.