WordPress.org

Make WordPress Core

Ticket #38238: 38238.4.diff

File 38238.4.diff, 11.0 KB (added by rcutmore, 2 years ago)

Add tests and update code formatting (based on 38238.2.diff)

  • src/wp-admin/includes/class-wp-links-list-table.php

    diff --git src/wp-admin/includes/class-wp-links-list-table.php src/wp-admin/includes/class-wp-links-list-table.php
    index 222d6df..c8a2795 100644
    class WP_Links_List_Table extends WP_List_Table { 
    143143                        'name'    => 'name',
    144144                        'url'     => 'url',
    145145                        'visible' => 'visible',
    146                         'rating'  => 'rating'
     146                        'rating'  => array(
     147                                'query_var' => 'rating',
     148                                'order'     => 'DESC',
     149                        ),
    147150                );
    148151        }
    149152
  • src/wp-admin/includes/class-wp-list-table.php

    diff --git src/wp-admin/includes/class-wp-list-table.php src/wp-admin/includes/class-wp-list-table.php
    index dedfec9..0ffe13b 100644
    class WP_List_Table { 
    10061006
    10071007                $sortable = array();
    10081008                foreach ( $_sortable as $id => $data ) {
    1009                         if ( empty( $data ) )
     1009                        if ( empty( $data ) ) {
    10101010                                continue;
     1011                        }
    10111012
    10121013                        $data = (array) $data;
    1013                         if ( !isset( $data[1] ) )
     1014
     1015                        if ( isset( $data['query_var'] ) ) {
     1016                                if ( !isset( $data['order'] ) ) {
     1017                                        $data['order'] = 'ASC';
     1018                                }
     1019
     1020                                $data = array( $data['query_var'], ( $data['order'] == 'DESC' ) );
     1021                        }
     1022
     1023                        if ( !isset( $data[1] ) ) {
    10141024                                $data[1] = false;
     1025                        }
    10151026
    10161027                        $sortable[$id] = $data;
    10171028                }
  • src/wp-admin/includes/class-wp-media-list-table.php

    diff --git src/wp-admin/includes/class-wp-media-list-table.php src/wp-admin/includes/class-wp-media-list-table.php
    index 002c79e..be0860c 100644
    class WP_Media_List_Table extends WP_List_Table { 
    329329         */
    330330        protected function get_sortable_columns() {
    331331                return array(
    332                         'title'    => 'title',
    333                         'author'   => 'author',
    334                         'parent'   => 'parent',
    335                         'comments' => 'comment_count',
    336                         'date'     => array( 'date', true ),
     332                        'title'         => 'title',
     333                        'author'        => 'author',
     334                        'parent'        => 'parent',
     335                        'comments'      => array(
     336                                'query_var' => 'comment_count',
     337                                'order'     => 'DESC',
     338                        ),
     339                        'date'          => array(
     340                                'query_var' => 'date',
     341                                'order'     => 'DESC',
     342                        ),
    337343                );
    338344        }
    339345
  • src/wp-admin/includes/class-wp-ms-users-list-table.php

    diff --git src/wp-admin/includes/class-wp-ms-users-list-table.php src/wp-admin/includes/class-wp-ms-users-list-table.php
    index d50038a..ae6d8f3 100644
    class WP_MS_Users_List_Table extends WP_List_Table { 
    189189         */
    190190        protected function get_sortable_columns() {
    191191                return array(
    192                         'username'   => 'login',
    193                         'name'       => 'name',
    194                         'email'      => 'email',
    195                         'registered' => 'id',
     192                        'username'      => 'login',
     193                        'name'          => 'name',
     194                        'email'         => 'email',
     195                        'registered'    => array(
     196                                'query_var' => 'registered',
     197                                'order'     => 'DESC',
     198                        ),
    196199                );
    197200        }
    198201
  • src/wp-admin/includes/class-wp-posts-list-table.php

    diff --git src/wp-admin/includes/class-wp-posts-list-table.php src/wp-admin/includes/class-wp-posts-list-table.php
    index 65d9e64..d389a67 100644
    class WP_Posts_List_Table extends WP_List_Table { 
    618618         */
    619619        protected function get_sortable_columns() {
    620620                return array(
    621                         'title'    => 'title',
    622                         'parent'   => 'parent',
    623                         'comments' => 'comment_count',
    624                         'date'     => array( 'date', true )
     621                        'title'         => 'title',
     622                        'parent'        => 'parent',
     623                        'comments'      => array(
     624                                'query_var' => 'comment_count',
     625                                'order'     => 'DESC',
     626                        ),
     627                        'date'          => array(
     628                                'query_var' => 'date',
     629                                'order'     => 'DESC',
     630                        ),
    625631                );
    626632        }
    627633
  • src/wp-admin/includes/class-wp-terms-list-table.php

    diff --git src/wp-admin/includes/class-wp-terms-list-table.php src/wp-admin/includes/class-wp-terms-list-table.php
    index 7d59624..2410dcc 100644
    class WP_Terms_List_Table extends WP_List_Table { 
    197197         */
    198198        protected function get_sortable_columns() {
    199199                return array(
    200                         'name'        => 'name',
    201                         'description' => 'description',
    202                         'slug'        => 'slug',
    203                         'posts'       => 'count',
    204                         'links'       => 'count'
     200                        'name'          => 'name',
     201                        'description'   => 'description',
     202                        'slug'          => 'slug',
     203                        'posts'         => array(
     204                                'query_var' => 'count',
     205                                'order'     => 'DESC',
     206                        ),
     207                        'links'         => array(
     208                                'query_var' => 'count',
     209                                'order'     => 'DESC',
     210                        ),
    205211                );
    206212        }
    207213
  • tests/phpunit/tests/admin/includesListTable.php

    diff --git tests/phpunit/tests/admin/includesListTable.php tests/phpunit/tests/admin/includesListTable.php
    index cf40457..1c881e1 100644
    class Tests_Admin_includesListTable extends WP_UnitTestCase { 
    262262
    263263                $this->assertNotContains( 'id="delete_all"', $output );
    264264        }
     265
     266        /**
     267         * Helper function to test default sorting for sortable columns.
     268         * @param WP_ListTable $table Table to check.
     269         * @param array $columns      Column information to check for in table.
     270         */
     271        protected function _test_sortable_columns( WP_List_Table $table, array $columns ) {
     272                ob_start();
     273                $table->print_column_headers();
     274                $output = ob_get_clean();
     275
     276                foreach( $columns as $col ) {
     277                        $col_id = $col['id'];
     278                        $col_orderby = $col['orderby'];
     279                        $col_order = $col['order'];
     280
     281                        $search_pattern = "|<th[^>]*id=['\"]{$col_id}['\"][^>]*><a[^>]*>|";
     282                        $matches = array();
     283                        preg_match_all( $search_pattern, $output, $matches );
     284
     285                        $this->assertCount( 1, array_keys( $matches[0] ) );
     286                        $this->assertContains( "orderby={$col_orderby}", $matches[0][0] );
     287                        $this->assertContains( "order={$col_order}", $matches[0][0] );
     288                }
     289        }
     290
     291        /**
     292         * @ticket 38238
     293         */
     294        public function test_comments_default_column_sorting() {
     295                $table = _get_list_table( 'WP_Comments_List_Table', array( 'screen' => 'edit-comments' ) );
     296                $columns = array(
     297                        array(
     298                                'id' => 'author',
     299                                'orderby' => 'comment_author',
     300                                'order' => 'asc',
     301                        ),
     302                        array(
     303                                'id' => 'response',
     304                                'orderby' => 'comment_post_ID',
     305                                'order' => 'asc',
     306                        ),
     307                        array(
     308                                'id' => 'date',
     309                                'orderby' => 'comment_date',
     310                                'order' => 'asc',
     311                        ),
     312                );
     313                $this->_test_sortable_columns( $table, $columns );
     314        }
     315
     316        /**
     317         * @ticket 38238
     318         */
     319        public function test_links_default_column_sorting() {
     320                $table = _get_list_table( 'WP_Links_List_Table', array( 'screen' => 'link-manager' ) );
     321                $columns = array(
     322                        array(
     323                                'id' => 'name',
     324                                'orderby' => 'name',
     325                                'order' => 'asc',
     326                        ),
     327                        array(
     328                                'id' => 'url',
     329                                'orderby' => 'url',
     330                                'order' => 'asc',
     331                        ),
     332                        array(
     333                                'id' => 'visible',
     334                                'orderby' => 'visible',
     335                                'order' => 'asc',
     336                        ),
     337                        array(
     338                                'id' => 'rating',
     339                                'orderby' => 'rating',
     340                                'order' => 'desc',
     341                        ),
     342                );
     343                $this->_test_sortable_columns( $table, $columns );
     344        }
     345
     346        /*
     347         * @ticket 38238
     348         */
     349        public function test_link_categories_default_column_sorting() {
     350                $table = _get_list_table( 'WP_Terms_List_Table', array( 'screen' => 'edit-link_category' ) );
     351                $columns = array(
     352                        array(
     353                                'id' => 'name',
     354                                'orderby' => 'name',
     355                                'order' => 'asc',
     356                        ),
     357                        array(
     358                                'id' => 'description',
     359                                'orderby' => 'description',
     360                                'order' => 'asc',
     361                        ),
     362                        array(
     363                                'id' => 'slug',
     364                                'orderby' => 'slug',
     365                                'order' => 'asc',
     366                        ),
     367                        array(
     368                                'id' => 'links',
     369                                'orderby' => 'count',
     370                                'order' => 'desc',
     371                        ),
     372                );
     373                $this->_test_sortable_columns( $table, $columns );
     374        }
     375
     376        /**
     377         * @ticket 38238
     378         */
     379        public function test_media_default_column_sorting() {
     380                $table = _get_list_table( 'WP_Media_List_Table', array( 'screen' => 'upload' ) );
     381                $columns = array(
     382                        array(
     383                                'id' => 'title',
     384                                'orderby' => 'title',
     385                                'order' => 'asc',
     386                        ),
     387                        array(
     388                                'id' => 'author',
     389                                'orderby' => 'author',
     390                                'order' => 'asc',
     391                        ),
     392                        array(
     393                                'id' => 'parent',
     394                                'orderby' => 'parent',
     395                                'order' => 'asc',
     396                        ),
     397                        array(
     398                                'id' => 'comments',
     399                                'orderby' => 'comment_count',
     400                                'order' => 'desc',
     401                        ),
     402                        array(
     403                                'id' => 'date',
     404                                'orderby' => 'date',
     405                                'order' => 'desc',
     406                        ),
     407                );
     408                $this->_test_sortable_columns( $table, $columns );
     409        }
     410
     411        /*
     412         * @ticket 38238
     413         */
     414        public function test_pages_default_column_sorting() {
     415                $table = _get_list_table( 'WP_Posts_List_Table', array( 'screen' => 'edit-page' ) );
     416                $columns = array(
     417                        array(
     418                                'id' => 'title',
     419                                'orderby' => 'title',
     420                                'order' => 'asc'
     421                        ),
     422                        array(
     423                                'id' => 'comments',
     424                                'orderby' => 'comment_count',
     425                                'order' => 'desc'
     426                        ),
     427                        array(
     428                                'id' => 'date',
     429                                'orderby' => 'date',
     430                                'order' => 'desc'
     431                        ),
     432                );
     433                $this->_test_sortable_columns( $table, $columns );
     434        }
     435
     436        /**
     437         * @ticket 38238
     438         */
     439        public function test_posts_default_column_sorting() {
     440                $table = _get_list_table( 'WP_Posts_List_Table', array( 'screen' => 'edit-post' ) );
     441                $columns = array(
     442                        array(
     443                                'id' => 'title',
     444                                'orderby' => 'title',
     445                                'order' => 'asc'
     446                        ),
     447                        array(
     448                                'id' => 'comments',
     449                                'orderby' => 'comment_count',
     450                                'order' => 'desc'
     451                        ),
     452                        array(
     453                                'id' => 'date',
     454                                'orderby' => 'date',
     455                                'order' => 'desc'
     456                        ),
     457                );
     458                $this->_test_sortable_columns( $table, $columns );
     459        }
     460
     461        /*
     462         * @ticket 38238
     463         */
     464        public function test_post_categories_default_column_sorting() {
     465                $table = _get_list_table( 'WP_Terms_List_Table', array( 'screen' => 'edit-category' ) );
     466                $columns = array(
     467                        array(
     468                                'id' => 'name',
     469                                'orderby' => 'name',
     470                                'order' => 'asc',
     471                        ),
     472                        array(
     473                                'id' => 'description',
     474                                'orderby' => 'description',
     475                                'order' => 'asc',
     476                        ),
     477                        array(
     478                                'id' => 'slug',
     479                                'orderby' => 'slug',
     480                                'order' => 'asc',
     481                        ),
     482                        array(
     483                                'id' => 'posts',
     484                                'orderby' => 'count',
     485                                'order' => 'desc',
     486                        ),
     487                );
     488                $this->_test_sortable_columns( $table, $columns );
     489        }
     490
     491        /**
     492         * @ticket 38238
     493         */
     494        public function test_post_tags_default_column_sorting() {
     495                $table = _get_list_table( 'WP_Terms_List_Table', array( 'screen' => 'edit-post_tags' ) );
     496                $columns = array(
     497                        array(
     498                                'id' => 'name',
     499                                'orderby' => 'name',
     500                                'order' => 'asc',
     501                        ),
     502                        array(
     503                                'id' => 'description',
     504                                'orderby' => 'description',
     505                                'order' => 'asc',
     506                        ),
     507                        array(
     508                                'id' => 'slug',
     509                                'orderby' => 'slug',
     510                                'order' => 'asc',
     511                        ),
     512                        array(
     513                                'id' => 'posts',
     514                                'orderby' => 'count',
     515                                'order' => 'desc',
     516                        ),
     517                );
     518                $this->_test_sortable_columns( $table, $columns );
     519        }
     520
     521        /**
     522         * @ticket 38238
     523         */
     524        public function test_users_default_column_sorting() {
     525                $table = _get_list_table( 'WP_MS_Users_List_Table', array( 'screen' => 'users' ) );
     526                $columns = array(
     527                        array(
     528                                'id' => 'username',
     529                                'orderby' => 'login',
     530                                'order' => 'asc',
     531                        ),
     532                        array(
     533                                'id' => 'email',
     534                                'orderby' => 'email',
     535                                'order' => 'asc',
     536                        ),
     537                        array(
     538                                'id' => 'registered',
     539                                'orderby' => 'registered',
     540                                'order' => 'desc',
     541                        ),
     542                );
     543                $this->_test_sortable_columns( $table, $columns );
     544        }
    265545}