permalink_structure = get_option( 'permalink_structure', '' ); } public function tear_down() { $this->set_permalink_structure( $this->permalink_structure ); parent::tear_down(); } public function test_parse_legacy_properties() { $class_name = 'BPTest_Group_Extension_Parse_Legacy_Properties'; $class_slug = sanitize_title( $class_name ); $e = new $class_name(); $e->_register(); // Test most items separately so we can ignore irrelevant props $l = $e->_get_legacy_properties_converted(); $this->assertSame( $class_name, $l['name'] ); $this->assertSame( $class_slug, $l['slug'] ); $this->assertSame( 'private', $l['visibility'] ); $this->assertSame( 63, $l['nav_item_position'] ); $this->assertTrue( $l['enable_nav_item'] ); $this->assertSame( $class_name . ' Nav', $l['nav_item_name'] ); $this->assertSame( 'foo_hook', $l['display_hook'] ); $this->assertSame( 'foo_template', $l['template_file'] ); // Build the screens array manually $expected = array( 'create' => array( 'name' => $class_name . ' Create', 'slug' => $class_slug . '-create', 'position' => 58, 'enabled' => false, ), 'edit' => array( 'name' => $class_name . ' Edit', 'slug' => $class_slug . '-edit', 'enabled' => false, ), 'admin' => array( 'enabled' => true, 'metabox_context' => 'high', 'metabox_priority' => 'side', ), ); $actual = $l['screens']; ksort( $expected ); ksort( $actual ); foreach ( $expected as &$screen ) { ksort( $screen ); } unset( $screen ); foreach ( $actual as &$screen ) { ksort( $screen ); } unset( $screen ); $this->assertSame( $expected, $actual ); } public function test_setup_screens_use_global_fallbacks() { $class_name = 'BPTest_Group_Extension_Setup_Screens_Use_Global_Fallbacks'; $e = new $class_name(); $e->_setup_class_info(); $screens = $e->_get_default_screens(); $fallback = array( 'screen_callback' => array( $e, 'settings_screen' ), 'screen_save_callback' => array( $e, 'settings_screen_save' ), ); $fallbacks = array( 'create' => $fallback, 'edit' => $fallback, 'admin' => $fallback, ); // strip everything from the screens array but what we we're // testing foreach ( $screens as &$screen ) { foreach ( $screen as $k => $v ) { if ( ! in_array( $k, array( 'screen_callback', 'screen_save_callback' ) ) ) { unset( $screen[ $k ] ); } } } $this->assertSame( $fallbacks, $screens ); } public function test_setup_screens_define_edit_screens_locally() { $class_name = 'BPTest_Group_Extension_Setup_Screens_Define_Edit_Screens_Locally'; $e = new $class_name(); $e->_setup_class_info(); $screens = $e->_get_default_screens(); $fallback = array( 'screen_callback' => array( $e, 'settings_screen' ), 'screen_save_callback' => array( $e, 'settings_screen_save' ), ); $expected = array( 'create' => $fallback, 'edit' => array( 'screen_callback' => array( $e, 'edit_screen' ), 'screen_save_callback' => array( $e, 'edit_screen_save' ), ), 'admin' => $fallback, ); // strip everything from the screens array but what we we're // testing foreach ( $screens as &$screen ) { foreach ( $screen as $k => $v ) { if ( ! in_array( $k, array( 'screen_callback', 'screen_save_callback' ) ) ) { unset( $screen[ $k ] ); } } } $this->assertSame( $expected, $screens ); } public function test_parse_args_r() { $a = array( 'veggies' => 'yes', 'ice_cream' => 'dope', 'fruit' => array( 'apple' => 'gross', 'berries' => array( 'blueberries' => array( 'in_season' => 'never', 'oh' => 'boy', ), 'cherries' => 'sometimes', ), ), ); $b = array( 'veggies' => 'no', 'cheese' => array( 'cheddar' => 'good', ), 'fruit' => array( 'apple' => 'yum', 'berries' => array( 'strawberries' => 'awesome', 'blueberries' => array( 'in_season' => 'yes', 'out_of_season' => 'no', ), ), ), ); $expected = array( 'veggies' => 'yes', 'ice_cream' => 'dope', 'cheese' => array( 'cheddar' => 'good', ), 'fruit' => array( 'apple' => 'gross', 'berries' => array( 'strawberries' => 'awesome', 'blueberries' => array( 'in_season' => 'never', 'out_of_season' => 'no', 'oh' => 'boy', ), 'cherries' => 'sometimes', ), ), ); $actual = BP_Group_Extension::parse_args_r( $a, $b ); ksort( $expected ); ksort( $actual ); $this->assertSame( $expected, $actual ); } /** * Config that gets intentionally stored as a direct property of object */ public function test_access_root_property() { $class_name = 'BPTest_Group_Extension_Access_Root_Property'; $e = new $class_name(); $e->_register(); $this->assertSame( 39, $e->nav_item_position ); } /** * Config that gets registered using init(), but is then accessed via * the legacy location */ public function test_access_init_property_using_legacy_location() { $class_name = 'BPTest_Group_Extension_Access_Init_Property_Using_Legacy_Location'; $e = new $class_name(); $e->_register(); $this->assertSame( 18, $e->create_step_position ); } /** * Provides settings_screen* and edit_screen* */ public function test_get_screen_callback_fallbacks() { $class_name = 'BPTest_Group_Extension_Get_Screen_Callback_Fallbacks'; $e = new $class_name(); $e->_register(); $this->assertSame( array( $e, 'settings_screen' ), $e->screens['create']['screen_callback'] ); $this->assertSame( array( $e, 'settings_screen_save' ), $e->screens['create']['screen_save_callback'] ); $this->assertSame( array( $e, 'settings_screen' ), $e->screens['admin']['screen_callback'] ); $this->assertSame( array( $e, 'settings_screen_save' ), $e->screens['admin']['screen_save_callback'] ); $this->assertSame( array( $e, 'edit_screen' ), $e->screens['edit']['screen_callback'] ); $this->assertSame( array( $e, 'edit_screen_save' ), $e->screens['edit']['screen_save_callback'] ); } public function test_has_submit_button() { $a = '

Foo bar

sweet'; $this->assertTrue( BP_Group_Extension::has_submit_button( $a ) ); $b = '

Foo bar

sweet'; $this->assertFalse( BP_Group_Extension::has_submit_button( $b ) ); // switch the quotation marks $c = "

Foo bar

sweet"; $this->assertTrue( BP_Group_Extension::has_submit_button( $c ) ); } /** * @group user_can_visit */ public function test_user_can_visit_inferred_from_enable_nav_item() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); $this->go_to( bp_get_group_url( $g_obj ) ); wp_set_current_user( 0 ); $e = new BPTest_Group_Extension_Inferred_Access_Settings_EnableNavItem_True(); $e->_register(); $this->assertTrue( $e->user_can_visit() ); $e2 = new BPTest_Group_Extension_Inferred_Access_Settings_EnableNavItem_False(); $e2->_register(); $this->assertFalse( $e2->user_can_visit() ); } /** * @group user_can_visit */ public function test_user_can_visit_explicit_for_logged_out_user() { $this->set_permalink_structure( '/%postname%/' ); wp_set_current_user( 0 ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); $this->go_to( bp_get_group_url( $g_obj ) ); $e1 = new BPTest_Group_Extension_Access_Anyone(); $e1->_register(); $this->assertTrue( $e1->user_can_visit() ); $e2 = new BPTest_Group_Extension_Access_Loggedin(); $e2->_register(); $this->assertFalse( $e2->user_can_visit() ); $e3 = new BPTest_Group_Extension_Access_Member(); $e3->_register(); $this->assertFalse( $e3->user_can_visit() ); $e4 = new BPTest_Group_Extension_Access_AdminMod(); $e4->_register(); $this->assertFalse( $e4->user_can_visit() ); $e5 = new BPTest_Group_Extension_Access_Admin(); $e5->_register(); $this->assertFalse( $e5->user_can_visit() ); $e6 = new BPTest_Group_Extension_Access_Noone(); $e6->_register(); $this->assertFalse( $e6->user_can_visit() ); } /** * @group user_can_visit */ public function test_user_can_visit_explicit_for_logged_in_user() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); $u = self::factory()->user->create(); wp_set_current_user( $u ); $this->go_to( bp_get_group_url( $g_obj ) ); $e1 = new BPTest_Group_Extension_Access_Anyone(); $e1->_register(); $this->assertTrue( $e1->user_can_visit() ); $e2 = new BPTest_Group_Extension_Access_Loggedin(); $e2->_register(); $this->assertTrue( $e2->user_can_visit() ); $e3 = new BPTest_Group_Extension_Access_Member(); $e3->_register(); $this->assertFalse( $e3->user_can_visit() ); $e4 = new BPTest_Group_Extension_Access_AdminMod(); $e4->_register(); $this->assertFalse( $e4->user_can_visit() ); $e5 = new BPTest_Group_Extension_Access_Admin(); $e5->_register(); $this->assertFalse( $e5->user_can_visit() ); $e6 = new BPTest_Group_Extension_Access_Noone(); $e6->_register(); $this->assertFalse( $e6->user_can_visit() ); } /** * @group user_can_visit */ public function test_user_can_visit_explicit_for_group_member() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); $u = self::factory()->user->create(); wp_set_current_user( $u ); $this->add_user_to_group( $u, $g ); $this->go_to( bp_get_group_url( $g_obj ) ); $e1 = new BPTest_Group_Extension_Access_Anyone(); $e1->_register(); $this->assertTrue( $e1->user_can_visit() ); $e2 = new BPTest_Group_Extension_Access_Loggedin(); $e2->_register(); $this->assertTrue( $e2->user_can_visit() ); $e3 = new BPTest_Group_Extension_Access_Member(); $e3->_register(); $this->assertTrue( $e3->user_can_visit() ); $e4 = new BPTest_Group_Extension_Access_AdminMod(); $e4->_register(); $this->assertFalse( $e4->user_can_visit() ); $e5 = new BPTest_Group_Extension_Access_Admin(); $e5->_register(); $this->assertFalse( $e5->user_can_visit() ); $e6 = new BPTest_Group_Extension_Access_Noone(); $e6->_register(); $this->assertFalse( $e6->user_can_visit() ); } /** * @group user_can_visit */ public function test_user_can_visit_explicit_for_group_mod() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); $u = self::factory()->user->create(); wp_set_current_user( $u ); $m = $this->add_user_to_group( $u, $g ); $gm = new BP_Groups_Member( $u, $g ); $gm->promote( 'mod' ); $this->go_to( bp_get_group_url( $g_obj ) ); $e1 = new BPTest_Group_Extension_Access_Anyone(); $e1->_register(); $this->assertTrue( $e1->user_can_visit() ); $e2 = new BPTest_Group_Extension_Access_Loggedin(); $e2->_register(); $this->assertTrue( $e2->user_can_visit() ); $e3 = new BPTest_Group_Extension_Access_Member(); $e3->_register(); $this->assertTrue( $e3->user_can_visit() ); $e4 = new BPTest_Group_Extension_Access_AdminMod(); $e4->_register(); $this->assertTrue( $e4->user_can_visit() ); $e5 = new BPTest_Group_Extension_Access_Admin(); $e5->_register(); $this->assertFalse( $e5->user_can_visit() ); $e6 = new BPTest_Group_Extension_Access_Noone(); $e6->_register(); $this->assertFalse( $e6->user_can_visit() ); } /** * @group user_can_visit */ public function test_user_can_visit_explicit_for_group_admin() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); $u = self::factory()->user->create(); wp_set_current_user( $u ); $m = $this->add_user_to_group( $u, $g ); $gm = new BP_Groups_Member( $u, $g ); $gm->promote( 'admin' ); $this->go_to( bp_get_group_url( $g_obj ) ); $e1 = new BPTest_Group_Extension_Access_Anyone(); $e1->_register(); $this->assertTrue( $e1->user_can_visit() ); $e2 = new BPTest_Group_Extension_Access_Loggedin(); $e2->_register(); $this->assertTrue( $e2->user_can_visit() ); $e3 = new BPTest_Group_Extension_Access_Member(); $e3->_register(); $this->assertTrue( $e3->user_can_visit() ); $e4 = new BPTest_Group_Extension_Access_AdminMod(); $e4->_register(); $this->assertTrue( $e4->user_can_visit() ); $e5 = new BPTest_Group_Extension_Access_Admin(); $e5->_register(); $this->assertTrue( $e5->user_can_visit() ); $e6 = new BPTest_Group_Extension_Access_Noone(); $e6->_register(); $this->assertFalse( $e6->user_can_visit() ); } /** * @group user_can_see_nav_item */ public function test_user_can_see_nav_item_implied() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); wp_set_current_user( 0 ); $this->go_to( bp_get_group_url( $g_obj ) ); $e1 = new BPTest_Group_Extension_Access_Anyone(); $e1->_register(); $this->assertTrue( $e1->user_can_see_nav_item() ); $e2 = new BPTest_Group_Extension_Access_Loggedin(); $e2->_register(); $this->assertFalse( $e2->user_can_see_nav_item() ); $e3 = new BPTest_Group_Extension_Access_Member(); $e3->_register(); $this->assertFalse( $e3->user_can_see_nav_item() ); $e4 = new BPTest_Group_Extension_Access_AdminMod(); $e4->_register(); $this->assertFalse( $e4->user_can_see_nav_item() ); $e5 = new BPTest_Group_Extension_Access_Admin(); $e5->_register(); $this->assertFalse( $e5->user_can_see_nav_item() ); $e6 = new BPTest_Group_Extension_Access_Noone(); $e6->_register(); $this->assertFalse( $e6->user_can_visit() ); } /** * @group user_can_see_nav_item */ public function test_user_can_see_nav_item_explicit_for_logged_out_user() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); wp_set_current_user( 0 ); $this->go_to( bp_get_group_url( $g_obj ) ); $e1 = new BPTest_Group_Extension_ShowTab_Anyone(); $e1->_register(); $this->assertTrue( $e1->user_can_see_nav_item() ); $e2 = new BPTest_Group_Extension_ShowTab_Loggedin(); $e2->_register(); $this->assertFalse( $e2->user_can_see_nav_item() ); $e3 = new BPTest_Group_Extension_ShowTab_Member(); $e3->_register(); $this->assertFalse( $e3->user_can_see_nav_item() ); $e4 = new BPTest_Group_Extension_ShowTab_AdminMod(); $e4->_register(); $this->assertFalse( $e4->user_can_see_nav_item() ); $e5 = new BPTest_Group_Extension_ShowTab_Admin(); $e5->_register(); $this->assertFalse( $e5->user_can_see_nav_item() ); $e6 = new BPTest_Group_Extension_ShowTab_Noone(); $e6->_register(); $this->assertFalse( $e6->user_can_see_nav_item() ); } /** * @group user_can_see_nav_item */ public function test_user_can_see_nav_item_explicit_for_logged_in_user() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); $u = self::factory()->user->create(); wp_set_current_user( $u ); $this->go_to( bp_get_group_url( $g_obj ) ); $e1 = new BPTest_Group_Extension_ShowTab_Anyone(); $e1->_register(); $this->assertTrue( $e1->user_can_see_nav_item() ); $e2 = new BPTest_Group_Extension_ShowTab_Loggedin(); $e2->_register(); $this->assertTrue( $e2->user_can_see_nav_item() ); $e3 = new BPTest_Group_Extension_ShowTab_Member(); $e3->_register(); $this->assertFalse( $e3->user_can_see_nav_item() ); $e4 = new BPTest_Group_Extension_ShowTab_AdminMod(); $e4->_register(); $this->assertFalse( $e4->user_can_see_nav_item() ); $e5 = new BPTest_Group_Extension_ShowTab_Admin(); $e5->_register(); $this->assertFalse( $e5->user_can_see_nav_item() ); $e6 = new BPTest_Group_Extension_ShowTab_Noone(); $e6->_register(); $this->assertFalse( $e6->user_can_see_nav_item() ); } /** * @group user_can_see_nav_item */ public function test_user_can_see_nav_item_explicit_for_group_member() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); $u = self::factory()->user->create(); wp_set_current_user( $u ); $this->add_user_to_group( $u, $g ); $this->go_to( bp_get_group_url( $g_obj ) ); $e1 = new BPTest_Group_Extension_ShowTab_Anyone(); $e1->_register(); $this->assertTrue( $e1->user_can_see_nav_item() ); $e2 = new BPTest_Group_Extension_ShowTab_Loggedin(); $e2->_register(); $this->assertTrue( $e2->user_can_see_nav_item() ); $e3 = new BPTest_Group_Extension_ShowTab_Member(); $e3->_register(); $this->assertTrue( $e3->user_can_see_nav_item() ); $e4 = new BPTest_Group_Extension_ShowTab_AdminMod(); $e4->_register(); $this->assertFalse( $e4->user_can_see_nav_item() ); $e5 = new BPTest_Group_Extension_ShowTab_Admin(); $e5->_register(); $this->assertFalse( $e5->user_can_see_nav_item() ); $e6 = new BPTest_Group_Extension_ShowTab_Noone(); $e6->_register(); $this->assertFalse( $e6->user_can_see_nav_item() ); } /** * @group user_can_see_nav_item */ public function test_user_can_see_nav_item_explicit_for_group_mod() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); $u = self::factory()->user->create(); wp_set_current_user( $u ); $this->add_user_to_group( $u, $g ); $gm = new BP_Groups_Member( $u, $g ); $gm->promote( 'mod' ); $this->go_to( bp_get_group_url( $g_obj ) ); $e1 = new BPTest_Group_Extension_ShowTab_Anyone(); $e1->_register(); $this->assertTrue( $e1->user_can_see_nav_item() ); $e2 = new BPTest_Group_Extension_ShowTab_Loggedin(); $e2->_register(); $this->assertTrue( $e2->user_can_see_nav_item() ); $e3 = new BPTest_Group_Extension_ShowTab_Member(); $e3->_register(); $this->assertTrue( $e3->user_can_see_nav_item() ); $e4 = new BPTest_Group_Extension_ShowTab_AdminMod(); $e4->_register(); $this->assertTrue( $e4->user_can_see_nav_item() ); $e5 = new BPTest_Group_Extension_ShowTab_Admin(); $e5->_register(); $this->assertFalse( $e5->user_can_see_nav_item() ); $e6 = new BPTest_Group_Extension_ShowTab_Noone(); $e6->_register(); $this->assertFalse( $e6->user_can_see_nav_item() ); } /** * @group user_can_see_nav_item */ public function test_user_can_see_nav_item_explicit_for_group_admin() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); $u = self::factory()->user->create(); wp_set_current_user( $u ); $this->add_user_to_group( $u, $g ); $gm = new BP_Groups_Member( $u, $g ); $gm->promote( 'admin' ); $this->go_to( bp_get_group_url( $g_obj ) ); $e1 = new BPTest_Group_Extension_ShowTab_Anyone(); $e1->_register(); $this->assertTrue( $e1->user_can_see_nav_item() ); $e2 = new BPTest_Group_Extension_ShowTab_Loggedin(); $e2->_register(); $this->assertTrue( $e2->user_can_see_nav_item() ); $e3 = new BPTest_Group_Extension_ShowTab_Member(); $e3->_register(); $this->assertTrue( $e3->user_can_see_nav_item() ); $e4 = new BPTest_Group_Extension_ShowTab_AdminMod(); $e4->_register(); $this->assertTrue( $e4->user_can_see_nav_item() ); $e5 = new BPTest_Group_Extension_ShowTab_Admin(); $e5->_register(); $this->assertTrue( $e5->user_can_see_nav_item() ); $e6 = new BPTest_Group_Extension_ShowTab_Noone(); $e6->_register(); $this->assertFalse( $e6->user_can_see_nav_item() ); } /** * @ticket BP7131 */ public function test_widget_on_group_home_page() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); $this->go_to( bp_get_group_url( $g_obj ) ); $e1 = new BPTest_Group_Extension_Widget_Method(); $e1->_register(); ob_start(); bp_custom_group_boxes(); $content = ob_get_clean(); $this->assertSame( 'Widget Displayed', $content ); } /** * @ticket BP7131 */ public function test_widget_on_group_members_page() { $this->set_permalink_structure( '/%postname%/' ); $g = self::factory()->group->create( array( 'status' => 'public', ) ); $g_obj = groups_get_group( $g ); $this->go_to( bp_get_group_url( $g_obj, array( 'single_item_action' => 'members', ) ) ); $e1 = new BPTest_Group_Extension_Widget_Method(); $e1->_register(); ob_start(); bp_custom_group_boxes(); $content = ob_get_clean(); $this->assertNotSame( 'Widget Displayed', $content ); } /** * @ticket BP8558 */ public function test_adding_multiple_extension_classes() { $this->set_permalink_structure( '/%postname%/' ); $old_options_nav = buddypress()->bp_options_nav; $g = self::factory()->group->create(); $g_obj = groups_get_group( $g ); $e = new BPTest_Group_Extension_Enable_Nav_Item_True(); $e_slug = 'bptest_group_extension_enable_nav_item_true'; $e_class_name = get_class( $e ); $f = new BPTest_Group_Extension_Access_Anyone(); $f_slug = 'bptest_group_extension_access_anyone'; $f_class_name = get_class( $f ); bp_register_group_extension( $e_class_name ); bp_register_group_extension( $f_class_name ); $this->go_to( bp_get_group_url( $g_obj ) ); $nav = buddypress()->groups->nav->get_secondary( array( 'parent_slug' => $g_obj->slug , ) ); $slugs = array(); foreach ( $nav as $priority => $nav_obj ) { $slugs[] = $nav_obj->slug; } $this->assertContains( $e_slug, $slugs ); $this->assertContains( $f_slug, $slugs ); // Clean up buddypress()->bp_options_nav = $old_options_nav; } }