Make WordPress Core


Ignore:
Timestamp:
11/03/2021 12:48:42 AM (5 years ago)
Author:
SergeyBiryukov
Message:

Tests: Split WP_Posts_List_Table and WP_Comments_List_Table tests into two separate files for clarity.

These were previously combined in the includesListTable.php file. Since the tests were specific neither to the _get_list_table() function nor the parent WP_List_Table class, the naming was confusing, which should now be resolved.

Follow-up to [31730], [38854], [40297], [48151], [48521], [49190], [51993].

See #53363.

File:
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/admin/wpCommentsListTable.php

    r51995 r51997  
    44 * @group admin
    55 */
    6 class Tests_Admin_IncludesListTable extends WP_UnitTestCase {
    7         protected static $top           = array();
    8         protected static $children      = array();
    9         protected static $grandchildren = array();
    10         protected static $post_ids      = array();
     6class Tests_Admin_wpCommentsListTable extends WP_UnitTestCase {
    117
    128        /**
    13          * @var WP_Posts_List_Table
     9         * @var WP_Comments_List_Table
    1410         */
    1511        protected $table;
     
    1713        function set_up() {
    1814                parent::set_up();
    19                 $this->table = _get_list_table( 'WP_Posts_List_Table', array( 'screen' => 'edit-page' ) );
    20         }
    21 
    22         public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) {
    23                 // Note that our top/children/grandchildren arrays are 1-indexed.
    24 
    25                 // Create top-level pages.
    26                 $num_posts = 5;
    27                 foreach ( range( 1, $num_posts ) as $i ) {
    28                         $p = $factory->post->create_and_get(
    29                                 array(
    30                                         'post_type'  => 'page',
    31                                         'post_title' => sprintf( 'Top Level Page %d', $i ),
    32                                 )
    33                         );
    34 
    35                         self::$top[ $i ]  = $p;
    36                         self::$post_ids[] = $p->ID;
    37                 }
    38 
    39                 // Create child pages.
    40                 $num_children = 3;
    41                 foreach ( self::$top as $top => $top_page ) {
    42                         foreach ( range( 1, $num_children ) as $i ) {
    43                                 $p = $factory->post->create_and_get(
    44                                         array(
    45                                                 'post_type'   => 'page',
    46                                                 'post_parent' => $top_page->ID,
    47                                                 'post_title'  => sprintf( 'Child %d', $i ),
    48                                         )
    49                                 );
    50 
    51                                 self::$children[ $top ][ $i ] = $p;
    52                                 self::$post_ids[]             = $p->ID;
    53                         }
    54                 }
    55 
    56                 // Create grand-child pages for the third and fourth top-level pages.
    57                 $num_grandchildren = 3;
    58                 foreach ( range( 3, 4 ) as $top ) {
    59                         foreach ( self::$children[ $top ] as $child => $child_page ) {
    60                                 foreach ( range( 1, $num_grandchildren ) as $i ) {
    61                                         $p = $factory->post->create_and_get(
    62                                                 array(
    63                                                         'post_type'   => 'page',
    64                                                         'post_parent' => $child_page->ID,
    65                                                         'post_title'  => sprintf( 'Grandchild %d', $i ),
    66                                                 )
    67                                         );
    68 
    69                                         self::$grandchildren[ $top ][ $child ][ $i ] = $p;
    70                                         self::$post_ids[]                            = $p->ID;
    71                                 }
    72                         }
    73                 }
    74         }
    75 
    76         /**
    77          * @ticket 15459
    78          *
    79          * @covers WP_Posts_List_Table::display_rows
    80          * @covers WP_Posts_List_Table::set_hierarchical_display
    81          */
    82         function test_list_hierarchical_pages_first_page() {
    83                 $this->_test_list_hierarchical_page(
    84                         array(
    85                                 'paged'          => 1,
    86                                 'posts_per_page' => 2,
    87                         ),
    88                         array(
    89                                 self::$top[1]->ID,
    90                                 self::$children[1][1]->ID,
    91                         )
    92                 );
    93         }
    94 
    95         /**
    96          * @ticket 15459
    97          *
    98          * @covers WP_Posts_List_Table::display_rows
    99          * @covers WP_Posts_List_Table::set_hierarchical_display
    100          */
    101         function test_list_hierarchical_pages_second_page() {
    102                 $this->_test_list_hierarchical_page(
    103                         array(
    104                                 'paged'          => 2,
    105                                 'posts_per_page' => 2,
    106                         ),
    107                         array(
    108                                 self::$top[1]->ID,
    109                                 self::$children[1][2]->ID,
    110                                 self::$children[1][3]->ID,
    111                         )
    112                 );
    113         }
    114 
    115         /**
    116          * @ticket 15459
    117          *
    118          * @covers WP_Posts_List_Table::display_rows
    119          * @covers WP_Posts_List_Table::set_hierarchical_display
    120          */
    121         function test_search_hierarchical_pages_first_page() {
    122                 $this->_test_list_hierarchical_page(
    123                         array(
    124                                 'paged'          => 1,
    125                                 'posts_per_page' => 2,
    126                                 's'              => 'Child',
    127                         ),
    128                         array(
    129                                 self::$children[1][1]->ID,
    130                                 self::$children[1][2]->ID,
    131                         )
    132                 );
    133         }
    134 
    135         /**
    136          * @ticket 15459
    137          *
    138          * @covers WP_Posts_List_Table::display_rows
    139          * @covers WP_Posts_List_Table::set_hierarchical_display
    140          */
    141         function test_search_hierarchical_pages_second_page() {
    142                 $this->_test_list_hierarchical_page(
    143                         array(
    144                                 'paged'          => 2,
    145                                 'posts_per_page' => 2,
    146                                 's'              => 'Top',
    147                         ),
    148                         array(
    149                                 self::$top[3]->ID,
    150                                 self::$top[4]->ID,
    151                         )
    152                 );
    153         }
    154 
    155         /**
    156          * @ticket 15459
    157          *
    158          * @covers WP_Posts_List_Table::display_rows
    159          * @covers WP_Posts_List_Table::set_hierarchical_display
    160          */
    161         function test_grandchildren_hierarchical_pages_first_page() {
    162                 // Page 6 is the first page with grandchildren.
    163                 $this->_test_list_hierarchical_page(
    164                         array(
    165                                 'paged'          => 6,
    166                                 'posts_per_page' => 2,
    167                         ),
    168                         array(
    169                                 self::$top[3]->ID,
    170                                 self::$children[3][1]->ID,
    171                                 self::$grandchildren[3][1][1]->ID,
    172                                 self::$grandchildren[3][1][2]->ID,
    173                         )
    174                 );
    175         }
    176 
    177         /**
    178          * @ticket 15459
    179          *
    180          * @covers WP_Posts_List_Table::display_rows
    181          * @covers WP_Posts_List_Table::set_hierarchical_display
    182          */
    183         function test_grandchildren_hierarchical_pages_second_page() {
    184                 // Page 7 is the second page with grandchildren.
    185                 $this->_test_list_hierarchical_page(
    186                         array(
    187                                 'paged'          => 7,
    188                                 'posts_per_page' => 2,
    189                         ),
    190                         array(
    191                                 self::$top[3]->ID,
    192                                 self::$children[3][1]->ID,
    193                                 self::$grandchildren[3][1][3]->ID,
    194                                 self::$children[3][2]->ID,
    195                         )
    196                 );
    197         }
    198 
    199         /**
    200          * Helper function to test the output of a page which uses `WP_Posts_List_Table`.
    201          *
    202          * @param array $args         Query args for the list of pages.
    203          * @param array $expected_ids Expected IDs of pages returned.
    204          */
    205         protected function _test_list_hierarchical_page( array $args, array $expected_ids ) {
    206                 if ( PHP_VERSION_ID >= 80100 ) {
    207                         /*
    208                          * For the time being, ignoring PHP 8.1 "null to non-nullable" deprecations coming in
    209                          * via hooked in filter functions until a more structural solution to the
    210                          * "missing input validation" conundrum has been architected and implemented.
    211                          */
    212                         $this->expectDeprecation();
    213                         $this->expectDeprecationMessageMatches( '`Passing null to parameter \#[0-9]+ \(\$[^\)]+\) of type [^ ]+ is deprecated`' );
    214                 }
    215 
    216                 $matches = array();
    217 
    218                 $_REQUEST['paged']   = $args['paged'];
    219                 $GLOBALS['per_page'] = $args['posts_per_page'];
    220 
    221                 $args = array_merge(
    222                         array(
    223                                 'post_type' => 'page',
    224                         ),
    225                         $args
    226                 );
    227 
    228                 // Mimic the behaviour of `wp_edit_posts_query()`:
    229                 if ( ! isset( $args['orderby'] ) ) {
    230                         $args['orderby']                = 'menu_order title';
    231                         $args['order']                  = 'asc';
    232                         $args['posts_per_page']         = -1;
    233                         $args['posts_per_archive_page'] = -1;
    234                 }
    235 
    236                 // Effectively ignore the output until retrieving it later via `getActualOutput()`.
    237                 $this->expectOutputRegex( '`.`' );
    238 
    239                 $pages = new WP_Query( $args );
    240 
    241                 $this->table->set_hierarchical_display( true );
    242                 $this->table->display_rows( $pages->posts );
    243                 $output = $this->getActualOutput();
    244 
    245                 // Clean up.
    246                 unset( $_REQUEST['paged'] );
    247                 unset( $GLOBALS['per_page'] );
    248 
    249                 preg_match_all( '|<tr[^>]*>|', $output, $matches );
    250 
    251                 $this->assertCount( count( $expected_ids ), array_keys( $matches[0] ) );
    252 
    253                 foreach ( $expected_ids as $id ) {
    254                         $this->assertStringContainsString( sprintf( 'id="post-%d"', $id ), $output );
    255                 }
    256         }
    257 
    258         /**
    259          * @ticket 37407
    260          *
    261          * @covers WP_Posts_List_Table::extra_tablenav
    262          */
    263         function test_filter_button_should_not_be_shown_if_there_are_no_posts() {
    264                 // Set post type to a non-existent one.
    265                 $this->table->screen->post_type = 'foo';
    266 
    267                 ob_start();
    268                 $this->table->extra_tablenav( 'top' );
    269                 $output = ob_get_clean();
    270 
    271                 $this->assertStringNotContainsString( 'id="post-query-submit"', $output );
    272         }
    273 
    274         /**
    275          * @ticket 37407
    276          *
    277          * @covers WP_Posts_List_Table::extra_tablenav
    278          */
    279         function test_months_dropdown_should_not_be_shown_if_there_are_no_posts() {
    280                 // Set post type to a non-existent one.
    281                 $this->table->screen->post_type = 'foo';
    282 
    283                 ob_start();
    284                 $this->table->extra_tablenav( 'top' );
    285                 $output = ob_get_clean();
    286 
    287                 $this->assertStringNotContainsString( 'id="filter-by-date"', $output );
    288         }
    289 
    290         /**
    291          * @ticket 37407
    292          *
    293          * @covers WP_Posts_List_Table::extra_tablenav
    294          */
    295         function test_category_dropdown_should_not_be_shown_if_there_are_no_posts() {
    296                 // Set post type to a non-existent one.
    297                 $this->table->screen->post_type = 'foo';
    298 
    299                 ob_start();
    300                 $this->table->extra_tablenav( 'top' );
    301                 $output = ob_get_clean();
    302 
    303                 $this->assertStringNotContainsString( 'id="cat"', $output );
    304         }
    305 
    306         /**
    307          * @ticket 38341
    308          *
    309          * @covers WP_Posts_List_Table::extra_tablenav
    310          */
    311         public function test_empty_trash_button_should_not_be_shown_if_there_are_no_posts() {
    312                 // Set post type to a non-existent one.
    313                 $this->table->screen->post_type = 'foo';
    314 
    315                 ob_start();
    316                 $this->table->extra_tablenav( 'top' );
    317                 $output = ob_get_clean();
    318 
    319                 $this->assertStringNotContainsString( 'id="delete_all"', $output );
     15                $this->table = _get_list_table( 'WP_Comments_List_Table', array( 'screen' => 'edit-comments' ) );
    32016        }
    32117
     
    32622         */
    32723        public function test_filter_button_should_not_be_shown_if_there_are_no_comments() {
    328                 $table = _get_list_table( 'WP_Comments_List_Table', array( 'screen' => 'edit-comments' ) );
    329 
    33024                ob_start();
    331                 $table->extra_tablenav( 'top' );
     25                $this->table->extra_tablenav( 'top' );
    33226                $output = ob_get_clean();
    33327
     
    34943                );
    35044
    351                 $table = _get_list_table( 'WP_Comments_List_Table', array( 'screen' => 'edit-comments' ) );
    352                 $table->prepare_items();
     45                $this->table->prepare_items();
    35346
    35447                ob_start();
    355                 $table->extra_tablenav( 'top' );
     48                $this->table->extra_tablenav( 'top' );
    35649                $output = ob_get_clean();
    35750
     
    37366                );
    37467
    375                 $table = _get_list_table( 'WP_Comments_List_Table', array( 'screen' => 'edit-comments' ) );
    376                 $table->prepare_items();
     68                $this->table->prepare_items();
    37769
    37870                ob_start();
    379                 $table->extra_tablenav( 'top' );
     71                $this->table->extra_tablenav( 'top' );
    38072                $output = ob_get_clean();
    38173
     
    39082         */
    39183        public function test_empty_trash_button_should_not_be_shown_if_there_are_no_comments() {
    392                 $table = _get_list_table( 'WP_Comments_List_Table', array( 'screen' => 'edit-comments' ) );
    393 
    39484                ob_start();
    395                 $table->extra_tablenav( 'top' );
     85                $this->table->extra_tablenav( 'top' );
    39686                $output = ob_get_clean();
    39787
     
    40595         */
    40696        public function test_bulk_action_menu_supports_options_and_optgroups() {
    407                 $table = _get_list_table( 'WP_Comments_List_Table', array( 'screen' => 'edit-comments' ) );
    408 
    40997                add_filter(
    41098                        'bulk_actions-edit-comments',
     
    421109
    422110                ob_start();
    423                 $table->bulk_actions();
     111                $this->table->bulk_actions();
    424112                $output = ob_get_clean();
    425113
     
    442130         */
    443131        public function test_sortable_columns() {
    444                 require_once ABSPATH . 'wp-admin/includes/class-wp-comments-list-table.php';
    445 
    446132                $override_sortable_columns = array(
    447133                        'author'   => array( 'comment_author', true ),
     
    478164         */
    479165        public function test_sortable_columns_with_current_ordering() {
    480                 require_once ABSPATH . 'wp-admin/includes/class-wp-comments-list-table.php';
    481 
    482166                $override_sortable_columns = array(
    483167                        'author'   => array( 'comment_author', false ),
Note: See TracChangeset for help on using the changeset viewer.