123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413 |
- <?php
- /**
- * @group user
- * @group capabilities
- */
- class Tests_User_MapMetaCap extends WP_UnitTestCase {
- protected static $post_type = 'mapmetacap';
- protected static $super_admins = null;
- protected static $user_id = null;
- protected static $author_id = null;
- protected static $post_id = null;
- public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) {
- self::$user_id = $factory->user->create( array( 'role' => 'administrator' ) );
- self::$author_id = $factory->user->create( array( 'role' => 'administrator' ) );
- if ( isset( $GLOBALS['super_admins'] ) ) {
- self::$super_admins = $GLOBALS['super_admins'];
- }
- $user = new WP_User( self::$user_id );
- $GLOBALS['super_admins'] = array( $user->user_login );
- register_post_type( self::$post_type );
- self::$post_id = $factory->post->create(
- array(
- 'post_type' => self::$post_type,
- 'post_status' => 'private',
- 'post_author' => self::$author_id,
- )
- );
- }
- public static function wpTearDownAfterClass() {
- $GLOBALS['super_admins'] = self::$super_admins;
- unset( $GLOBALS['wp_post_types'][ self::$post_type ] );
- }
- /**
- * @ticket 13905
- */
- function test_capability_type_post_with_invalid_id() {
- $this->assertSame(
- array( 'do_not_allow' ),
- map_meta_cap( 'edit_post', self::$user_id, self::$post_id + 1 )
- );
- }
- function test_capability_type_post_with_no_extra_caps() {
- register_post_type(
- self::$post_type,
- array(
- 'capability_type' => 'post',
- )
- );
- $post_type_object = get_post_type_object( self::$post_type );
- $this->assertTrue( $post_type_object->map_meta_cap );
- $this->assertSame(
- array( 'edit_others_posts', 'edit_private_posts' ),
- map_meta_cap( 'edit_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'edit_others_posts', 'edit_private_posts' ),
- map_meta_cap( $post_type_object->cap->edit_post, self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'read_private_posts' ),
- map_meta_cap( 'read_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'read_private_posts' ),
- map_meta_cap( $post_type_object->cap->read_post, self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'delete_others_posts', 'delete_private_posts' ),
- map_meta_cap( 'delete_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'delete_others_posts', 'delete_private_posts' ),
- map_meta_cap( $post_type_object->cap->delete_post, self::$user_id, self::$post_id )
- );
- }
- function test_custom_capability_type_with_map_meta_cap() {
- register_post_type(
- self::$post_type,
- array(
- 'capability_type' => 'book',
- 'map_meta_cap' => true,
- )
- );
- $post_type_object = get_post_type_object( self::$post_type );
- $this->assertSame(
- array( 'edit_others_books', 'edit_private_books' ),
- map_meta_cap( 'edit_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'edit_others_books', 'edit_private_books' ),
- map_meta_cap( $post_type_object->cap->edit_post, self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'read_private_books' ),
- map_meta_cap( 'read_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'read_private_books' ),
- map_meta_cap( $post_type_object->cap->read_post, self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'delete_others_books', 'delete_private_books' ),
- map_meta_cap( 'delete_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'delete_others_books', 'delete_private_books' ),
- map_meta_cap( $post_type_object->cap->delete_post, self::$user_id, self::$post_id )
- );
- }
- function test_capability_type_post_with_one_renamed_cap() {
- register_post_type(
- self::$post_type,
- array(
- 'capability_type' => 'post',
- 'capabilities' => array( 'edit_posts' => 'edit_books' ),
- )
- );
- $post_type_object = get_post_type_object( self::$post_type );
- $this->assertFalse( $post_type_object->map_meta_cap );
- $this->assertSame(
- array( 'edit_post' ),
- map_meta_cap( 'edit_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'edit_post' ),
- map_meta_cap( $post_type_object->cap->edit_post, self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'read_post' ),
- map_meta_cap( 'read_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'read_post' ),
- map_meta_cap( $post_type_object->cap->read_post, self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'delete_post' ),
- map_meta_cap( 'delete_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'delete_post' ),
- map_meta_cap( $post_type_object->cap->delete_post, self::$user_id, self::$post_id )
- );
- }
- function test_capability_type_post_map_meta_cap_true_with_renamed_cap() {
- register_post_type(
- self::$post_type,
- array(
- 'capability_type' => 'post',
- 'map_meta_cap' => true,
- 'capabilities' => array(
- 'edit_post' => 'edit_book', // maps back to itself.
- 'edit_others_posts' => 'edit_others_books',
- ),
- )
- );
- $post_type_object = get_post_type_object( self::$post_type );
- $this->assertTrue( $post_type_object->map_meta_cap );
- $this->assertSame(
- array( 'edit_others_books', 'edit_private_posts' ),
- map_meta_cap( 'edit_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'edit_others_books', 'edit_private_posts' ),
- map_meta_cap( $post_type_object->cap->edit_post, self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'read_private_posts' ),
- map_meta_cap( 'read_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'read_private_posts' ),
- map_meta_cap( $post_type_object->cap->read_post, self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'delete_others_posts', 'delete_private_posts' ),
- map_meta_cap( 'delete_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'delete_others_posts', 'delete_private_posts' ),
- map_meta_cap( $post_type_object->cap->delete_post, self::$user_id, self::$post_id )
- );
- }
- function test_capability_type_post_with_all_meta_caps_renamed() {
- register_post_type(
- self::$post_type,
- array(
- 'capability_type' => 'post',
- 'capabilities' => array(
- 'edit_post' => 'edit_book',
- 'read_post' => 'read_book',
- 'delete_post' => 'delete_book',
- ),
- )
- );
- $post_type_object = get_post_type_object( self::$post_type );
- $this->assertFalse( $post_type_object->map_meta_cap );
- $this->assertSame(
- array( 'edit_book' ),
- map_meta_cap( 'edit_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'edit_book' ),
- map_meta_cap( $post_type_object->cap->edit_post, self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'read_book' ),
- map_meta_cap( 'read_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'read_book' ),
- map_meta_cap( $post_type_object->cap->read_post, self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'delete_book' ),
- map_meta_cap( 'delete_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'delete_book' ),
- map_meta_cap( $post_type_object->cap->delete_post, self::$user_id, self::$post_id )
- );
- }
- function test_capability_type_post_with_all_meta_caps_renamed_mapped() {
- register_post_type(
- self::$post_type,
- array(
- 'capability_type' => 'post',
- 'map_meta_cap' => true,
- 'capabilities' => array(
- 'edit_post' => 'edit_book',
- 'read_post' => 'read_book',
- 'delete_post' => 'delete_book',
- ),
- )
- );
- $post_type_object = get_post_type_object( self::$post_type );
- $this->assertTrue( $post_type_object->map_meta_cap );
- $this->assertSame(
- array( 'edit_others_posts', 'edit_private_posts' ),
- map_meta_cap( 'edit_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'edit_others_posts', 'edit_private_posts' ),
- map_meta_cap( $post_type_object->cap->edit_post, self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'read_private_posts' ),
- map_meta_cap( 'read_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'read_private_posts' ),
- map_meta_cap( $post_type_object->cap->read_post, self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'delete_others_posts', 'delete_private_posts' ),
- map_meta_cap( 'delete_post', self::$user_id, self::$post_id )
- );
- $this->assertSame(
- array( 'delete_others_posts', 'delete_private_posts' ),
- map_meta_cap( $post_type_object->cap->delete_post, self::$user_id, self::$post_id )
- );
- }
- /**
- * @ticket 30991
- */
- function test_delete_posts_cap_without_map_meta_cap() {
- register_post_type(
- self::$post_type,
- array(
- 'capability_type' => 'post',
- 'map_meta_cap' => false,
- )
- );
- $post_type_object = get_post_type_object( self::$post_type );
- $this->assertFalse( $post_type_object->map_meta_cap );
- $this->assertSame( 'delete_posts', $post_type_object->cap->delete_posts );
- }
- function test_unfiltered_html_cap() {
- if ( defined( 'DISALLOW_UNFILTERED_HTML' ) ) {
- $this->assertFalse( DISALLOW_UNFILTERED_HTML );
- }
- if ( is_multisite() ) {
- $this->assertSame( array( 'do_not_allow' ), map_meta_cap( 'unfiltered_html', 0 ) );
- $this->assertSame( array( 'unfiltered_html' ), map_meta_cap( 'unfiltered_html', self::$user_id ) );
- } else {
- $this->assertSame( array( 'unfiltered_html' ), map_meta_cap( 'unfiltered_html', self::$user_id ) );
- }
- }
- /**
- * @ticket 20488
- */
- function test_file_edit_caps_not_reliant_on_unfiltered_html_constant() {
- $this->assertFalse( defined( 'DISALLOW_FILE_MODS' ) );
- $this->assertFalse( defined( 'DISALLOW_FILE_EDIT' ) );
- if ( ! defined( 'DISALLOW_UNFILTERED_HTML' ) ) {
- define( 'DISALLOW_UNFILTERED_HTML', true );
- }
- $this->assertTrue( DISALLOW_UNFILTERED_HTML );
- $this->assertSame( array( 'update_core' ), map_meta_cap( 'update_core', self::$user_id ) );
- $this->assertSame( array( 'edit_plugins' ), map_meta_cap( 'edit_plugins', self::$user_id ) );
- }
- /**
- * Test a post without an author.
- *
- * @ticket 27020
- */
- function test_authorless_posts_capabilties() {
- $post_id = self::factory()->post->create(
- array(
- 'post_author' => 0,
- 'post_type' => 'post',
- 'post_status' => 'publish',
- )
- );
- $editor = self::factory()->user->create( array( 'role' => 'editor' ) );
- $this->assertSame( array( 'edit_others_posts', 'edit_published_posts' ), map_meta_cap( 'edit_post', $editor, $post_id ) );
- $this->assertSame( array( 'delete_others_posts', 'delete_published_posts' ), map_meta_cap( 'delete_post', $editor, $post_id ) );
- }
- /**
- * Test deleting front page.
- *
- * @ticket 37580
- */
- function test_only_users_who_can_manage_options_can_delete_page_on_front() {
- $post_id = self::factory()->post->create(
- array(
- 'post_type' => 'page',
- 'post_status' => 'publish',
- )
- );
- update_option( 'page_on_front', $post_id );
- $caps = map_meta_cap( 'delete_page', self::$user_id, $post_id );
- delete_option( 'page_on_front' );
- $this->assertSame( array( 'manage_options' ), $caps );
- }
- /**
- * Test deleting posts page.
- *
- * @ticket 37580
- */
- function test_only_users_who_can_manage_options_can_delete_page_for_posts() {
- $post_id = self::factory()->post->create(
- array(
- 'post_type' => 'page',
- 'post_status' => 'publish',
- )
- );
- update_option( 'page_for_posts', $post_id );
- $caps = map_meta_cap( 'delete_page', self::$user_id, $post_id );
- delete_option( 'page_for_posts' );
- $this->assertSame( array( 'manage_options' ), $caps );
- }
- }
|