Make WordPress Core


Ignore:
Timestamp:
11/05/2019 08:41:12 PM (6 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.