Make WordPress Core

Changeset 36768


Ignore:
Timestamp:
02/28/2016 10:58:45 PM (11 years ago)
Author:
DrewAPicture
Message:

Posts: Add tests for the cascading fallback behavior of several 'public'-related arguments in register_post_type().

Covers the 'exclude_from_search', 'publicly_queryable', 'show_ui', 'show_in_menu', 'show_in_nav_menus', and 'show_in_admin_bar' arguments, all of which eventually inherit from 'public' if not set.

Fixes #35985.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tests/phpunit/tests/post/types.php

    r36652 r36768  
    55 */
    66class Tests_Post_Types extends WP_UnitTestCase {
     7
     8        /**
     9         * Post type.
     10         *
     11         * @since 4.5.0
     12         * @var string
     13         */
     14        public $post_type;
     15
     16        /**
     17         * Set up.
     18         *
     19         * @since 4.5.0
     20         */
     21        function setUp() {
     22                parent::setUp();
     23
     24                $this->post_type = rand_str( 20 );
     25        }
     26
    727        function test_register_post_type() {
    828                $this->assertNull( get_post_type_object( 'foo' ) );
    … …  
    3858                // post type too short
    3959                $this->assertInstanceOf( 'WP_Error', register_post_type( '' ) );
     60        }
     61
     62        /**
     63         * @ticket 35985
     64         * @covers register_post_type()
     65         */
     66        function test_register_post_type_exclude_from_search_should_default_to_opposite_value_of_public() {
     67                /*
     68                 * 'public'              Default is false
     69                 * 'exclude_from_search' Default is null (opposite 'public')
     70                 */
     71                $args = $this->register_post_type( array( 'public' => $public = false ) );
     72
     73                $this->assertNotEquals( $public, $args->exclude_from_search );
     74        }
     75
     76        /**
     77         * @ticket 35985
     78         * @covers register_post_type()
     79         */
     80        function test_register_post_type_publicly_queryable_should_default_to_value_of_public() {
     81                /*
     82                 * 'public'             Default is false
     83                 * 'publicly_queryable' Default is null ('public')
     84                 */
     85                $args = $this->register_post_type( array( 'public' => $public = false ) );
     86
     87                $this->assertSame( $public, $args->publicly_queryable );
     88        }
     89
     90        /**
     91         * @ticket 35985
     92         * @covers register_post_type()
     93         */
     94        function test_register_post_type_show_ui_should_default_to_value_of_public() {
     95                /*
     96                 * 'public'  Default is false
     97                 * 'show_ui' Default is null ('public')
     98                 */
     99                $args = $this->register_post_type( array( 'public' => $public = false ) );
     100
     101                $this->assertSame( $public, $args->show_ui );
     102        }
     103
     104        /**
     105         * @ticket 35985
     106         * @covers register_post_type()
     107         */
     108        function test_register_post_type_show_in_menu_should_default_to_value_of_show_ui() {
     109                /*
     110                 * 'public'      Default is false
     111                 * 'show_ui'     Default is null ('public')
     112                 * 'show_in_menu Default is null ('show_ui' > 'public')
     113                 */
     114                $args = $this->register_post_type( array( 'public' => $public = false ) );
     115
     116                // Should fall back to 'show_ui'.
     117                $this->assertSame( $args->show_ui, $args->show_in_menu );
     118
     119                // Should fall back to 'show_ui', then 'public'.
     120                $this->assertSame( $public, $args->show_in_menu );
     121        }
     122
     123        /**
     124         * @ticket 35985
     125         * @covers register_post_type()
     126         */
     127        function test_register_post_type_show_in_nav_menus_should_default_to_value_of_public() {
     128                /*
     129                 * 'public'            Default is false
     130                 * 'show_in_nav_menus' Default is null ('public')
     131                 */
     132                $args = $this->register_post_type( array( 'public' => $public = false ) );
     133
     134                $this->assertSame( $public, $args->show_in_nav_menus );
     135        }
     136
     137        /**
     138         * @ticket 35985
     139         * @covers register_post_type()
     140         */
     141        function test_register_post_type_show_in_admin_bar_should_default_to_value_of_show_in_menu() {
     142                /*
     143                 * 'public'            Default is false
     144                 * 'show_in_menu'      Default is null ('show_ui' > 'public')
     145                 * 'show_in_admin_bar' Default is null ('show_in_menu' > 'show_ui' > 'public')
     146                 */
     147                $args = $this->register_post_type( array( 'public' => $public = false ) );
     148
     149                // Should fall back to 'show_in_menu'.
     150                $this->assertSame( $args->show_in_menu, $args->show_in_admin_bar );
     151
     152                // Should fall back to 'show_ui'.
     153                $this->assertSame( $args->show_ui, $args->show_in_admin_bar );
     154
     155                // Should fall back to 'public'.
     156                $this->assertSame( $public, $args->show_in_admin_bar );
    40157        }
    41158
    … …  
    429546                $this->assertEqualSets( array(), get_post_types_by_support( 'somefeature' ) );
    430547        }
     548
     549        /**
     550         * Serves as a helper to register a post type for tests.
     551         *
     552         * Uses `$this->post_type` initialized in setUp().
     553         *
     554         * @since 4.5.0
     555         *
     556         * @param array $args register_post_type() arguments.
     557         * @return stdClass Post type object for `$this->post_type`.
     558         */
     559        public function register_post_type( $args = array() ) {
     560                register_post_type( $this->post_type, $args );
     561                return get_post_type_object( $this->post_type );
     562        }
    431563}
Note: See TracChangeset for help on using the changeset viewer.