258 lines
7.8 KiB
PHP
258 lines
7.8 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @group admin-bar
|
|
* @group toolbar
|
|
* @group admin
|
|
*/
|
|
class Tests_AdminBar extends WP_UnitTestCase {
|
|
|
|
static function setUpBeforeClass() {
|
|
WP_UnitTestCase::setUpBeforeClass();
|
|
require_once ABSPATH . WPINC . '/class-wp-admin-bar.php';
|
|
}
|
|
|
|
function setUp() {
|
|
parent::setUp();
|
|
$this->current_user = get_current_user_id();
|
|
}
|
|
|
|
function tearDown() {
|
|
wp_set_current_user( $this->current_user );
|
|
parent::tearDown();
|
|
}
|
|
|
|
/**
|
|
* @ticket 21117
|
|
*/
|
|
function test_content_post_type() {
|
|
wp_set_current_user( $this->factory->user->create( array( 'role' => 'editor' ) ) );
|
|
|
|
register_post_type( 'content', array( 'show_in_admin_bar' => true ) );
|
|
|
|
$admin_bar = new WP_Admin_Bar;
|
|
|
|
wp_admin_bar_new_content_menu( $admin_bar );
|
|
|
|
$nodes = $admin_bar->get_nodes();
|
|
$this->assertFalse( $nodes['new-content']->parent );
|
|
$this->assertEquals( 'new-content', $nodes['add-new-content']->parent );
|
|
|
|
_unregister_post_type( 'content' );
|
|
}
|
|
|
|
/**
|
|
* @ticket 21117
|
|
*/
|
|
function test_merging_existing_meta_values() {
|
|
wp_set_current_user( $this->factory->user->create( array( 'role' => 'editor' ) ) );
|
|
|
|
$admin_bar = new WP_Admin_Bar;
|
|
|
|
$admin_bar->add_node( array(
|
|
'id' => 'test-node',
|
|
'meta' => array( 'class' => 'test-class' ),
|
|
) );
|
|
$node = $admin_bar->get_node( 'test-node' );
|
|
$this->assertEquals( array( 'class' => 'test-class' ), $node->meta );
|
|
|
|
$admin_bar->add_node( array(
|
|
'id' => 'test-node',
|
|
'meta' => array( 'some-meta' => 'value' ),
|
|
) );
|
|
|
|
$node = $admin_bar->get_node( 'test-node' );
|
|
$this->assertEquals( array( 'class' => 'test-class', 'some-meta' => 'value' ), $node->meta );
|
|
}
|
|
|
|
/**
|
|
* @ticket 25162
|
|
*/
|
|
public function test_admin_bar_contains_correct_links_for_users_with_no_role() {
|
|
if ( is_multisite() ) {
|
|
$this->markTestSkipped( 'Test does not run in multisite' );
|
|
}
|
|
|
|
$nobody = $this->factory->user->create( array( 'role' => '' ) );
|
|
$this->assertFalse( user_can( $nobody, 'read' ) );
|
|
|
|
wp_set_current_user( $nobody );
|
|
|
|
$wp_admin_bar = $this->get_standard_admin_bar();
|
|
|
|
$node_site_name = $wp_admin_bar->get_node( 'site-name' );
|
|
$node_my_account = $wp_admin_bar->get_node( 'my-account' );
|
|
$node_user_info = $wp_admin_bar->get_node( 'user-info' );
|
|
$node_edit_profile = $wp_admin_bar->get_node( 'edit-profile' );
|
|
|
|
// Site menu points to the home page instead of the admin URL
|
|
$this->assertEquals( home_url( '/' ), $node_site_name->href );
|
|
|
|
// No profile links as the user doesn't have any permissions on the site
|
|
$this->assertFalse( $node_my_account->href );
|
|
$this->assertFalse( $node_user_info->href );
|
|
$this->assertNull( $node_edit_profile );
|
|
|
|
}
|
|
|
|
/**
|
|
* @ticket 25162
|
|
*/
|
|
public function test_admin_bar_contains_correct_links_for_users_with_role() {
|
|
if ( is_multisite() ) {
|
|
$this->markTestSkipped( 'Test does not run in multisite' );
|
|
}
|
|
|
|
$editor = $this->factory->user->create( array( 'role' => 'editor' ) );
|
|
$this->assertTrue( user_can( $editor, 'read' ) );
|
|
|
|
wp_set_current_user( $editor );
|
|
|
|
$wp_admin_bar = $this->get_standard_admin_bar();
|
|
|
|
$node_site_name = $wp_admin_bar->get_node( 'site-name' );
|
|
$node_my_account = $wp_admin_bar->get_node( 'my-account' );
|
|
$node_user_info = $wp_admin_bar->get_node( 'user-info' );
|
|
$node_edit_profile = $wp_admin_bar->get_node( 'edit-profile' );
|
|
|
|
// Site menu points to the admin URL
|
|
$this->assertEquals( admin_url( '/' ), $node_site_name->href );
|
|
|
|
$profile_url = admin_url( 'profile.php' );
|
|
|
|
// Profile URLs point to profile.php
|
|
$this->assertEquals( $profile_url, $node_my_account->href );
|
|
$this->assertEquals( $profile_url, $node_user_info->href );
|
|
$this->assertEquals( $profile_url, $node_edit_profile->href );
|
|
|
|
}
|
|
|
|
/**
|
|
* @ticket 25162
|
|
* @group multisite
|
|
*/
|
|
public function test_admin_bar_contains_correct_links_for_users_with_no_role_on_blog() {
|
|
if ( ! is_multisite() ) {
|
|
$this->markTestSkipped( 'Test only runs in multisite' );
|
|
}
|
|
|
|
$admin = $this->factory->user->create( array( 'role' => 'administrator' ) );
|
|
$editor = $this->factory->user->create( array( 'role' => 'editor' ) );
|
|
|
|
$this->assertTrue( user_can( $admin, 'read' ) );
|
|
$this->assertTrue( user_can( $editor, 'read' ) );
|
|
|
|
$new_blog_id = $this->factory->blog->create( array(
|
|
'user_id' => $admin,
|
|
) );
|
|
|
|
$this->assertTrue( is_user_member_of_blog( $admin, $new_blog_id ) );
|
|
$this->assertFalse( is_user_member_of_blog( $editor, $new_blog_id ) );
|
|
|
|
wp_set_current_user( $editor );
|
|
|
|
switch_to_blog( $new_blog_id );
|
|
|
|
$wp_admin_bar = $this->get_standard_admin_bar();
|
|
|
|
$node_site_name = $wp_admin_bar->get_node( 'site-name' );
|
|
$node_my_account = $wp_admin_bar->get_node( 'my-account' );
|
|
$node_user_info = $wp_admin_bar->get_node( 'user-info' );
|
|
$node_edit_profile = $wp_admin_bar->get_node( 'edit-profile' );
|
|
|
|
// get primary blog
|
|
$primary = get_active_blog_for_user( $editor );
|
|
$this->assertInternalType( 'object', $primary );
|
|
|
|
// No Site menu as the user isn't a member of this blog
|
|
$this->assertNull( $node_site_name );
|
|
|
|
$primary_profile_url = get_admin_url( $primary->blog_id, 'profile.php' );
|
|
|
|
// Ensure the user's primary blog is not the same as the main site
|
|
$this->assertNotEquals( $primary_profile_url, admin_url( 'profile.php' ) );
|
|
|
|
// Profile URLs should go to the user's primary blog
|
|
$this->assertEquals( $primary_profile_url, $node_my_account->href );
|
|
$this->assertEquals( $primary_profile_url, $node_user_info->href );
|
|
$this->assertEquals( $primary_profile_url, $node_edit_profile->href );
|
|
|
|
restore_current_blog();
|
|
|
|
}
|
|
|
|
/**
|
|
* @ticket 25162
|
|
* @group multisite
|
|
*/
|
|
public function test_admin_bar_contains_correct_links_for_users_with_no_role_on_network() {
|
|
if ( ! is_multisite() ) {
|
|
$this->markTestSkipped( 'Test only runs in multisite' );
|
|
}
|
|
|
|
$admin = $this->factory->user->create( array( 'role' => 'administrator' ) );
|
|
$nobody = $this->factory->user->create( array( 'role' => '' ) );
|
|
|
|
$this->assertTrue( user_can( $admin, 'read' ) );
|
|
$this->assertFalse( user_can( $nobody, 'read' ) );
|
|
|
|
$new_blog_id = $this->factory->blog->create( array(
|
|
'user_id' => $admin,
|
|
) );
|
|
|
|
$this->assertTrue( is_user_member_of_blog( $admin, $new_blog_id ) );
|
|
$this->assertFalse( is_user_member_of_blog( $nobody, $new_blog_id ) );
|
|
$this->assertTrue( is_user_member_of_blog( $nobody, get_current_blog_id() ) );
|
|
|
|
// Remove `$nobody` from the current blog, so they're not a member of any blog
|
|
$removed = remove_user_from_blog( $nobody, get_current_blog_id() );
|
|
|
|
$this->assertTrue( $removed );
|
|
$this->assertFalse( is_user_member_of_blog( $nobody, get_current_blog_id() ) );
|
|
|
|
wp_set_current_user( $nobody );
|
|
|
|
switch_to_blog( $new_blog_id );
|
|
|
|
$wp_admin_bar = $this->get_standard_admin_bar();
|
|
|
|
$node_site_name = $wp_admin_bar->get_node( 'site-name' );
|
|
$node_my_account = $wp_admin_bar->get_node( 'my-account' );
|
|
$node_user_info = $wp_admin_bar->get_node( 'user-info' );
|
|
$node_edit_profile = $wp_admin_bar->get_node( 'edit-profile' );
|
|
|
|
// get primary blog
|
|
$primary = get_active_blog_for_user( $nobody );
|
|
$this->assertNull( $primary );
|
|
|
|
// No Site menu as the user isn't a member of this site
|
|
$this->assertNull( $node_site_name );
|
|
|
|
$user_profile_url = user_admin_url( 'profile.php' );
|
|
|
|
$this->assertNotEquals( $user_profile_url, admin_url( 'profile.php' ) );
|
|
|
|
// Profile URLs should go to the user's primary blog
|
|
$this->assertEquals( $user_profile_url, $node_my_account->href );
|
|
$this->assertEquals( $user_profile_url, $node_user_info->href );
|
|
$this->assertEquals( $user_profile_url, $node_edit_profile->href );
|
|
|
|
restore_current_blog();
|
|
|
|
}
|
|
|
|
protected function get_standard_admin_bar() {
|
|
global $wp_admin_bar;
|
|
|
|
_wp_admin_bar_init();
|
|
|
|
$this->assertTrue( is_admin_bar_showing() );
|
|
$this->assertInstanceOf( 'WP_Admin_Bar', $wp_admin_bar );
|
|
|
|
do_action_ref_array( 'admin_bar_menu', array( &$wp_admin_bar ) );
|
|
|
|
return $wp_admin_bar;
|
|
}
|
|
|
|
}
|