64 | | } |
65 | | No newline at end of file |
| 67 | |
| 68 | /** |
| 69 | * @ticket 25162 |
| 70 | */ |
| 71 | public function test_admin_bar_contains_correct_links_for_users_with_no_role() { |
| 72 | if ( is_multisite() ) { |
| 73 | $this->markTestSkipped( 'Test does not run in multisite' ); |
| 74 | } |
| 75 | |
| 76 | $nobody = $this->factory->user->create( array( 'role' => '' ) ); |
| 77 | $this->assertFalse( user_can( $nobody, 'read' ) ); |
| 78 | |
| 79 | wp_set_current_user( $nobody ); |
| 80 | |
| 81 | $wp_admin_bar = $this->get_standard_admin_bar(); |
| 82 | |
| 83 | $node_site_name = $wp_admin_bar->get_node( 'site-name' ); |
| 84 | $node_my_account = $wp_admin_bar->get_node( 'my-account' ); |
| 85 | $node_user_info = $wp_admin_bar->get_node( 'user-info' ); |
| 86 | $node_edit_profile = $wp_admin_bar->get_node( 'edit-profile' ); |
| 87 | |
| 88 | // Site menu points to the home page instead of the admin URL |
| 89 | $this->assertEquals( home_url( '/' ), $node_site_name->href ); |
| 90 | |
| 91 | // No profile links as the user doesn't have any permissions on the site |
| 92 | $this->assertFalse( $node_my_account->href ); |
| 93 | $this->assertFalse( $node_user_info->href ); |
| 94 | $this->assertNull( $node_edit_profile ); |
| 95 | |
| 96 | } |
| 97 | |
| 98 | /** |
| 99 | * @ticket 25162 |
| 100 | */ |
| 101 | public function test_admin_bar_contains_correct_links_for_users_with_role() { |
| 102 | if ( is_multisite() ) { |
| 103 | $this->markTestSkipped( 'Test does not run in multisite' ); |
| 104 | } |
| 105 | |
| 106 | $editor = $this->factory->user->create( array( 'role' => 'editor' ) ); |
| 107 | $this->assertTrue( user_can( $editor, 'read' ) ); |
| 108 | |
| 109 | wp_set_current_user( $editor ); |
| 110 | |
| 111 | $wp_admin_bar = $this->get_standard_admin_bar(); |
| 112 | |
| 113 | $node_site_name = $wp_admin_bar->get_node( 'site-name' ); |
| 114 | $node_my_account = $wp_admin_bar->get_node( 'my-account' ); |
| 115 | $node_user_info = $wp_admin_bar->get_node( 'user-info' ); |
| 116 | $node_edit_profile = $wp_admin_bar->get_node( 'edit-profile' ); |
| 117 | |
| 118 | // Site menu points to the admin URL |
| 119 | $this->assertEquals( admin_url( '/' ), $node_site_name->href ); |
| 120 | |
| 121 | $profile_url = admin_url( 'profile.php' ); |
| 122 | |
| 123 | // Profile URLs point to profile.php |
| 124 | $this->assertEquals( $profile_url, $node_my_account->href ); |
| 125 | $this->assertEquals( $profile_url, $node_user_info->href ); |
| 126 | $this->assertEquals( $profile_url, $node_edit_profile->href ); |
| 127 | |
| 128 | } |
| 129 | |
| 130 | /** |
| 131 | * @ticket 25162 |
| 132 | * @group multisite |
| 133 | */ |
| 134 | public function test_admin_bar_contains_correct_links_for_users_with_no_role_on_blog() { |
| 135 | if ( ! is_multisite() ) { |
| 136 | $this->markTestSkipped( 'Test only runs in multisite' ); |
| 137 | } |
| 138 | |
| 139 | $admin = $this->factory->user->create( array( 'role' => 'administrator' ) ); |
| 140 | $editor = $this->factory->user->create( array( 'role' => 'editor' ) ); |
| 141 | |
| 142 | $this->assertTrue( user_can( $admin, 'read' ) ); |
| 143 | $this->assertTrue( user_can( $editor, 'read' ) ); |
| 144 | |
| 145 | $new_blog_id = $this->factory->blog->create( array( |
| 146 | 'user_id' => $admin, |
| 147 | ) ); |
| 148 | |
| 149 | $this->assertTrue( is_user_member_of_blog( $admin, $new_blog_id ) ); |
| 150 | $this->assertFalse( is_user_member_of_blog( $editor, $new_blog_id ) ); |
| 151 | |
| 152 | wp_set_current_user( $editor ); |
| 153 | |
| 154 | switch_to_blog( $new_blog_id ); |
| 155 | |
| 156 | $wp_admin_bar = $this->get_standard_admin_bar(); |
| 157 | |
| 158 | $node_site_name = $wp_admin_bar->get_node( 'site-name' ); |
| 159 | $node_my_account = $wp_admin_bar->get_node( 'my-account' ); |
| 160 | $node_user_info = $wp_admin_bar->get_node( 'user-info' ); |
| 161 | $node_edit_profile = $wp_admin_bar->get_node( 'edit-profile' ); |
| 162 | |
| 163 | // get primary blog |
| 164 | $primary = get_active_blog_for_user( $editor ); |
| 165 | $this->assertInternalType( 'object', $primary ); |
| 166 | |
| 167 | // No Site menu as the user isn't a member of this blog |
| 168 | $this->assertNull( $node_site_name ); |
| 169 | |
| 170 | $primary_profile_url = get_admin_url( $primary->blog_id, 'profile.php' ); |
| 171 | |
| 172 | // Ensure the user's primary blog is not the same as the main site |
| 173 | $this->assertNotEquals( $primary_profile_url, admin_url( 'profile.php' ) ); |
| 174 | |
| 175 | // Profile URLs should go to the user's primary blog |
| 176 | $this->assertEquals( $primary_profile_url, $node_my_account->href ); |
| 177 | $this->assertEquals( $primary_profile_url, $node_user_info->href ); |
| 178 | $this->assertEquals( $primary_profile_url, $node_edit_profile->href ); |
| 179 | |
| 180 | restore_current_blog(); |
| 181 | |
| 182 | } |
| 183 | |
| 184 | /** |
| 185 | * @ticket 25162 |
| 186 | * @group multisite |
| 187 | */ |
| 188 | public function test_admin_bar_contains_correct_links_for_users_with_no_role_on_network() { |
| 189 | if ( ! is_multisite() ) { |
| 190 | $this->markTestSkipped( 'Test only runs in multisite' ); |
| 191 | } |
| 192 | |
| 193 | $admin = $this->factory->user->create( array( 'role' => 'administrator' ) ); |
| 194 | $nobody = $this->factory->user->create( array( 'role' => '' ) ); |
| 195 | |
| 196 | $this->assertTrue( user_can( $admin, 'read' ) ); |
| 197 | $this->assertFalse( user_can( $nobody, 'read' ) ); |
| 198 | |
| 199 | $new_blog_id = $this->factory->blog->create( array( |
| 200 | 'user_id' => $admin, |
| 201 | ) ); |
| 202 | |
| 203 | $this->assertTrue( is_user_member_of_blog( $admin, $new_blog_id ) ); |
| 204 | $this->assertFalse( is_user_member_of_blog( $nobody, $new_blog_id ) ); |
| 205 | $this->assertTrue( is_user_member_of_blog( $nobody, get_current_blog_id() ) ); |
| 206 | |
| 207 | // Remove `$nobody` from the current blog, so they're not a member of any blog |
| 208 | $removed = remove_user_from_blog( $nobody, get_current_blog_id() ); |
| 209 | |
| 210 | $this->assertTrue( $removed ); |
| 211 | $this->assertFalse( is_user_member_of_blog( $nobody, get_current_blog_id() ) ); |
| 212 | |
| 213 | wp_set_current_user( $nobody ); |
| 214 | |
| 215 | switch_to_blog( $new_blog_id ); |
| 216 | |
| 217 | $wp_admin_bar = $this->get_standard_admin_bar(); |
| 218 | |
| 219 | $node_site_name = $wp_admin_bar->get_node( 'site-name' ); |
| 220 | $node_my_account = $wp_admin_bar->get_node( 'my-account' ); |
| 221 | $node_user_info = $wp_admin_bar->get_node( 'user-info' ); |
| 222 | $node_edit_profile = $wp_admin_bar->get_node( 'edit-profile' ); |
| 223 | |
| 224 | // get primary blog |
| 225 | $primary = get_active_blog_for_user( $nobody ); |
| 226 | $this->assertNull( $primary ); |
| 227 | |
| 228 | // No Site menu as the user isn't a member of this site |
| 229 | $this->assertNull( $node_site_name ); |
| 230 | |
| 231 | $user_profile_url = user_admin_url( 'profile.php' ); |
| 232 | |
| 233 | $this->assertNotEquals( $user_profile_url, admin_url( 'profile.php' ) ); |
| 234 | |
| 235 | // Profile URLs should go to the user's primary blog |
| 236 | $this->assertEquals( $user_profile_url, $node_my_account->href ); |
| 237 | $this->assertEquals( $user_profile_url, $node_user_info->href ); |
| 238 | $this->assertEquals( $user_profile_url, $node_edit_profile->href ); |
| 239 | |
| 240 | restore_current_blog(); |
| 241 | |
| 242 | } |
| 243 | |
| 244 | protected function get_standard_admin_bar() { |
| 245 | global $wp_admin_bar; |
| 246 | |
| 247 | _wp_admin_bar_init(); |
| 248 | |
| 249 | $this->assertTrue( is_admin_bar_showing() ); |
| 250 | $this->assertInstanceOf( 'WP_Admin_Bar', $wp_admin_bar ); |
| 251 | |
| 252 | do_action_ref_array( 'admin_bar_menu', array( &$wp_admin_bar ) ); |
| 253 | |
| 254 | return $wp_admin_bar; |
| 255 | } |
| 256 | |
| 257 | } |