Make WordPress Core


Ignore:
Timestamp:
09/18/2022 01:08:33 PM (3 years ago)
Author:
SergeyBiryukov
Message:

Tests: Move the basic get_block_templates() test to the dedicated file.

Now that the function has its own test class, the remaining test from Tests_Block_Template_Utils can be moved to Tests_Blocks_GetBlockTemplates for consistency.

Includes:

  • Uncommenting some assertions previously commented out.
  • Moving the get_template_ids() helper method to the top of the class.
  • Standardizing on wpSetUpBeforeClass()/wpTearDownAfterClass() in both classes.
  • Declaring the test theme name as a constant in both classes, since the value is not changed by any of the tests.
  • Renaming some properties in both classes for clarity.

Follow-up to [51003], [52062], [53927], [54184], [54187].

See #55652.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/block-template-utils.php

    r54187 r54198  
    1212 */
    1313class Tests_Block_Template_Utils extends WP_UnitTestCase {
    14     private static $post;
     14
     15    const TEST_THEME = 'block-theme';
     16
     17    private static $template_post;
    1518    private static $template_part_post;
    16     private static $test_theme = 'block-theme';
    17 
    18     public static function wpSetUpBeforeClass() {
    19         // Set up a template post corresponding to a different theme.
    20         // We do this to ensure resolution and slug creation works as expected,
    21         // even with another post of that same name present for another theme.
    22         $args       = array(
    23             'post_type'    => 'wp_template',
    24             'post_name'    => 'my_template',
    25             'post_title'   => 'My Template',
    26             'post_content' => 'Content',
    27             'post_excerpt' => 'Description of my template',
    28             'tax_input'    => array(
    29                 'wp_theme' => array(
    30                     'this-theme-should-not-resolve',
     19
     20    public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) {
     21        /*
     22         * Set up a template post corresponding to a different theme.
     23         * We do this to ensure resolution and slug creation works as expected,
     24         * even with another post of that same name present for another theme.
     25         */
     26        self::$template_post = $factory->post->create_and_get(
     27            array(
     28                'post_type'    => 'wp_template',
     29                'post_name'    => 'my_template',
     30                'post_title'   => 'My Template',
     31                'post_content' => 'Content',
     32                'post_excerpt' => 'Description of my template',
     33                'tax_input'    => array(
     34                    'wp_theme' => array(
     35                        'this-theme-should-not-resolve',
     36                    ),
    3137                ),
    32             ),
    33         );
    34         self::$post = self::factory()->post->create_and_get( $args );
    35         wp_set_post_terms( self::$post->ID, 'this-theme-should-not-resolve', 'wp_theme' );
     38            )
     39        );
     40
     41        wp_set_post_terms( self::$template_post->ID, 'this-theme-should-not-resolve', 'wp_theme' );
    3642
    3743        // Set up template post.
    38         $args       = array(
    39             'post_type'    => 'wp_template',
    40             'post_name'    => 'my_template',
    41             'post_title'   => 'My Template',
    42             'post_content' => 'Content',
    43             'post_excerpt' => 'Description of my template',
    44             'tax_input'    => array(
    45                 'wp_theme' => array(
    46                     self::$test_theme,
     44        self::$template_post = $factory->post->create_and_get(
     45            array(
     46                'post_type'    => 'wp_template',
     47                'post_name'    => 'my_template',
     48                'post_title'   => 'My Template',
     49                'post_content' => 'Content',
     50                'post_excerpt' => 'Description of my template',
     51                'tax_input'    => array(
     52                    'wp_theme' => array(
     53                        self::TEST_THEME,
     54                    ),
    4755                ),
    48             ),
    49         );
    50         self::$post = self::factory()->post->create_and_get( $args );
    51         wp_set_post_terms( self::$post->ID, self::$test_theme, 'wp_theme' );
     56            )
     57        );
     58
     59        wp_set_post_terms( self::$template_post->ID, self::TEST_THEME, 'wp_theme' );
    5260
    5361        // Set up template part post.
    54         $template_part_args       = array(
    55             'post_type'    => 'wp_template_part',
    56             'post_name'    => 'my_template_part',
    57             'post_title'   => 'My Template Part',
    58             'post_content' => 'Content',
    59             'post_excerpt' => 'Description of my template part',
    60             'tax_input'    => array(
    61                 'wp_theme'              => array(
    62                     self::$test_theme,
     62        self::$template_part_post = $factory->post->create_and_get(
     63            array(
     64                'post_type'    => 'wp_template_part',
     65                'post_name'    => 'my_template_part',
     66                'post_title'   => 'My Template Part',
     67                'post_content' => 'Content',
     68                'post_excerpt' => 'Description of my template part',
     69                'tax_input'    => array(
     70                    'wp_theme'              => array(
     71                        self::TEST_THEME,
     72                    ),
     73                    'wp_template_part_area' => array(
     74                        WP_TEMPLATE_PART_AREA_HEADER,
     75                    ),
    6376                ),
    64                 'wp_template_part_area' => array(
    65                     WP_TEMPLATE_PART_AREA_HEADER,
    66                 ),
    67             ),
    68         );
    69         self::$template_part_post = self::factory()->post->create_and_get( $template_part_args );
     77            )
     78        );
     79
    7080        wp_set_post_terms( self::$template_part_post->ID, WP_TEMPLATE_PART_AREA_HEADER, 'wp_template_part_area' );
    71         wp_set_post_terms( self::$template_part_post->ID, self::$test_theme, 'wp_theme' );
     81        wp_set_post_terms( self::$template_part_post->ID, self::TEST_THEME, 'wp_theme' );
     82    }
     83
     84    public static function wpTearDownAfterClass() {
     85        wp_delete_post( self::$template_post->ID );
    7286    }
    7387
    7488    public function set_up() {
    7589        parent::set_up();
    76         switch_theme( self::$test_theme );
    77     }
    78 
    79     public static function wpTearDownAfterClass() {
    80         wp_delete_post( self::$post->ID );
     90        switch_theme( self::TEST_THEME );
    8191    }
    8292
    8393    public function test_build_block_template_result_from_post() {
    8494        $template = _build_block_template_result_from_post(
    85             self::$post,
     95            self::$template_post,
    8696            'wp_template'
    8797        );
     
    273283        $this->assertSame( 'wp_template_part', $template->type );
    274284        $this->assertSame( WP_TEMPLATE_PART_AREA_HEADER, $template->area );
    275     }
    276 
    277     /**
    278      * Should retrieve block templates (file and CPT)
    279      */
    280     public function test_get_block_templates() {
    281         function get_template_ids( $templates ) {
    282             return array_map(
    283                 static function( $template ) {
    284                     return $template->id;
    285                 },
    286                 $templates
    287             );
    288         }
    289 
    290         // All results.
    291         $templates    = get_block_templates( array(), 'wp_template' );
    292         $template_ids = get_template_ids( $templates );
    293 
    294         // Avoid testing the entire array because the theme might add/remove templates.
    295         $this->assertContains( get_stylesheet() . '//' . 'my_template', $template_ids );
    296 
    297         // The result might change in a block theme.
    298         // $this->assertContains( get_stylesheet() . '//' . 'index', $template_ids );
    299 
    300         // Filter by slug.
    301         $templates    = get_block_templates( array( 'slug__in' => array( 'my_template' ) ), 'wp_template' );
    302         $template_ids = get_template_ids( $templates );
    303         $this->assertSame( array( get_stylesheet() . '//' . 'my_template' ), $template_ids );
    304 
    305         // Filter by CPT ID.
    306         $templates    = get_block_templates( array( 'wp_id' => self::$post->ID ), 'wp_template' );
    307         $template_ids = get_template_ids( $templates );
    308         $this->assertSame( array( get_stylesheet() . '//' . 'my_template' ), $template_ids );
    309 
    310         // Filter template part by area.
    311         // Requires a block theme.
    312         /*$templates    = get_block_templates( array( 'area' => WP_TEMPLATE_PART_AREA_HEADER ), 'wp_template_part' );
    313         $template_ids = get_template_ids( $templates );
    314         $this->assertSame(
    315             array(
    316                 get_stylesheet() . '//' . 'my_template_part',
    317                 get_stylesheet() . '//' . 'header',
    318             ),
    319             $template_ids
    320         );
    321         */
    322285    }
    323286
Note: See TracChangeset for help on using the changeset viewer.