user->create(); $g = self::factory()->group->create(); $a = self::factory()->activity->create( array( 'component' => buddypress()->groups->id, 'type' => 'created_group', 'user_id' => $u, 'item_id' => $g, ) ); $a_obj = new BP_Activity_Activity( $a ); $g_obj = groups_get_group( $g ); $expected = sprintf( __( '%1$s created the group %2$s', 'buddypress' ), bp_core_get_userlink( $u ), '' . $g_obj->name . '' ); $this->assertSame( $expected, $a_obj->action ); } /** * @group activity_action * @group bp_groups_format_activity_action_joined_group */ public function test_bp_groups_format_activity_action_joined_group() { $u = self::factory()->user->create(); $g = self::factory()->group->create(); $a = self::factory()->activity->create( array( 'component' => buddypress()->groups->id, 'type' => 'joined_group', 'user_id' => $u, 'item_id' => $g, ) ); $a_obj = new BP_Activity_Activity( $a ); $g_obj = groups_get_group( $g ); $expected = sprintf( __( '%1$s joined the group %2$s', 'buddypress' ), bp_core_get_userlink( $u ), '' . $g_obj->name . '' ); $this->assertSame( $expected, $a_obj->action ); } /** * @group activity_action * @group bp_groups_format_activity_action_group_details_updated */ public function test_bp_groups_format_activity_action_group_details_updated_with_no_change() { $group = self::factory()->group->create_and_get(); groups_edit_base_group_details( array( 'group_id' => $group->id, 'name' => $group->name, 'slug' => $group->slug, 'description' => $group->description, 'notify_members' => true, ) ); $a = bp_activity_get( array( 'component' => buddypress()->groups->id, 'action' => 'group_details_updated', 'item_id' => $group->id, ) ); $this->assertEmpty( $a['activities'] ?? null ); } /** * @group activity_action * @group bp_groups_format_activity_action_group_details_updated */ public function test_bp_groups_format_activity_action_group_details_updated_with_notify_members_false() { $group = self::factory()->group->create_and_get(); groups_edit_base_group_details( array( 'group_id' => $group->id, 'name' => 'Foo', 'slug' => $group->slug, 'description' => $group->description, 'notify_members' => false, ) ); $a = bp_activity_get( array( 'component' => buddypress()->groups->id, 'action' => 'group_details_updated', 'item_id' => $group->id, ) ); $this->assertEmpty( $a['activities'] ?? null ); } /** * @group activity_action * @group bp_groups_format_activity_action_group_details_updated */ public function test_bp_groups_format_activity_action_group_details_updated_with_updated_name() { $old_user = get_current_user_id(); $u = self::factory()->user->create(); wp_set_current_user( $u ); $group = self::factory()->group->create_and_get(); groups_edit_base_group_details( array( 'group_id' => $group->id, 'name' => 'Foo', 'slug' => $group->slug, 'description' => $group->description, 'notify_members' => true, ) ); $a = bp_activity_get( array( 'component' => buddypress()->groups->id, 'action' => 'group_details_updated', 'item_id' => $group->id, ) ); $this->assertNotEmpty( $a['activities'] ); $expected = sprintf( esc_html__( '%1$s changed the name of the group %2$s from "%3$s" to "%4$s"', 'buddypress' ), bp_core_get_userlink( $u ), 'Foo', $group->name, 'Foo' ); $this->assertSame( $expected, $a['activities'][0]->action ); wp_set_current_user( $old_user ); } /** * @group activity_action * @group bp_groups_format_activity_action_group_details_updated */ public function test_bp_groups_format_activity_action_group_details_updated_with_updated_description() { $old_user = get_current_user_id(); $u = self::factory()->user->create(); wp_set_current_user( $u ); $group = self::factory()->group->create_and_get(); groups_edit_base_group_details( array( 'group_id' => $group->id, 'name' => $group->name, 'slug' => $group->slug, 'description' => 'Bar', 'notify_members' => true, ) ); $a = bp_activity_get( array( 'component' => buddypress()->groups->id, 'action' => 'group_details_updated', 'item_id' => $group->id, ) ); $this->assertNotEmpty( $a['activities'] ); $expected = sprintf( esc_html__( '%1$s changed the description of the group %2$s from "%3$s" to "%4$s"', 'buddypress' ), bp_core_get_userlink( $u ), '' . $group->name . '', $group->description, 'Bar' ); $this->assertSame( $expected, $a['activities'][0]->action ); wp_set_current_user( $old_user ); } /** * @group activity_action * @group bp_groups_format_activity_action_group_details_updated */ public function test_bp_groups_format_activity_action_group_details_updated_with_updated_slug() { $old_user = get_current_user_id(); $u = self::factory()->user->create(); wp_set_current_user( $u ); $group = self::factory()->group->create_and_get(); groups_edit_base_group_details( array( 'group_id' => $group->id, 'name' => $group->name, 'slug' => 'flaxen', 'description' => $group->description, 'notify_members' => true, ) ); $new_group_details = groups_get_group( $group->id ); $a = bp_activity_get( array( 'component' => buddypress()->groups->id, 'action' => 'group_details_updated', 'item_id' => $group->id, ) ); $this->assertNotEmpty( $a['activities'] ); $expected = sprintf( __( '%1$s changed the permalink of the group %2$s.', 'buddypress' ), bp_core_get_userlink( $u ), '' . $group->name . '' ); $this->assertSame( $expected, $a['activities'][0]->action ); wp_set_current_user( $old_user ); } /** * @group activity_action * @group bp_groups_format_activity_action_group_details_updated */ public function test_bp_groups_format_activity_action_group_details_updated_with_updated_name_and_description() { $old_user = get_current_user_id(); $u = self::factory()->user->create(); wp_set_current_user( $u ); $group = self::factory()->group->create_and_get(); groups_edit_base_group_details( array( 'group_id' => $group->id, 'name' => 'Foo', 'slug' => $group->slug, 'description' => 'Bar', 'notify_members' => true, ) ); $a = bp_activity_get( array( 'component' => buddypress()->groups->id, 'action' => 'group_details_updated', 'item_id' => $group->id, ) ); $this->assertNotEmpty( $a['activities'] ); $expected = sprintf( __( '%1$s changed the name and description of the group %2$s', 'buddypress' ), bp_core_get_userlink( $u ), 'Foo' ); $this->assertSame( $expected, $a['activities'][0]->action ); wp_set_current_user( $old_user ); } /** * @group activity_action * @group bp_groups_format_activity_action_group_activity_update */ public function test_bp_groups_format_activity_action_group_activity_update() { $u = self::factory()->user->create(); $g = self::factory()->group->create(); $a = self::factory()->activity->create( array( 'component' => buddypress()->groups->id, 'type' => 'activity_update', 'user_id' => $u, 'item_id' => $g, ) ); $a_obj = new BP_Activity_Activity( $a ); $g_obj = groups_get_group( $g ); $expected = sprintf( esc_html__( '%1$s posted an update in the group %2$s', 'buddypress' ), bp_core_get_userlink( $u ), '' . esc_html( $g_obj->name ) . '' ); $this->assertSame( $expected, $a_obj->action ); } /** * @group groups_post_update */ public function test_groups_post_update() { $u = self::factory()->user->create(); $g = self::factory()->group->create(); // The user is a group member. groups_join_group( $g, $u ); $activity_args = array( 'content' => 'Test group_post_update', 'user_id' => $u, 'group_id' => $g, 'error_type' => 'wp_error', ); add_filter( 'bp_before_groups_record_activity_parse_args', array( $this, 'groups_post_update_args' ), 10, 1 ); groups_post_update( $activity_args ); remove_filter( 'bp_before_groups_record_activity_parse_args', array( $this, 'groups_post_update_args' ) ); $expected = array_merge( $activity_args, array( 'item_id' => $g ) ); unset( $expected['group_id'] ); ksort( $expected ); ksort( $this->groups_post_update_args ); $this->assertSame( $expected, $this->groups_post_update_args ); } /** * @group groups_post_update */ public function test_groups_post_update_in_group() { $bp = buddypress(); $u = self::factory()->user->create(); $g = self::factory()->group->create(); // The user is a group member. groups_join_group( $g, $u ); $bp->groups->current_group = groups_get_group( $g ); $activity_args = array( 'content' => 'Test group_post_update in a group', 'user_id' => $u, ); $a = groups_post_update( $activity_args ); $a_obj = new BP_Activity_Activity( $a ); $this->assertSame( $a_obj->item_id, $g ); $this->assertSame( $a_obj->component, 'groups' ); unset( $bp->groups->current_group ); } /** * @group bp_activity_can_comment */ public function test_groups_activity_can_comment() { $old_user = get_current_user_id(); $u1 = self::factory()->user->create(); $u2 = self::factory()->user->create(); $g = self::factory()->group->create(); // User 1 is a group member, while user 2 isn't. groups_join_group( $g, $u1 ); $a = self::factory()->activity->create( array( 'component' => buddypress()->groups->id, 'type' => 'created_group', 'user_id' => $u1, 'item_id' => $g, ) ); wp_set_current_user( $u1 ); if ( bp_has_activities( array( 'in' => $a ) ) ) { while ( bp_activities() ) : bp_the_activity(); // User 1 should be able to comment. $this->assertTrue( bp_activity_can_comment() ); endwhile; } wp_set_current_user( $u2 ); if ( bp_has_activities( array( 'in' => $a ) ) ) { while ( bp_activities() ) : bp_the_activity(); // User 2 should not be able to comment. $this->assertFalse( bp_activity_can_comment() ); endwhile; } wp_set_current_user( $old_user ); } public function groups_post_update_args( $args = array() ) { $this->groups_post_update_args = array_intersect_key( $args, array( 'content' => true, 'user_id' => true, 'item_id' => true, 'error_type' => true, ) ); return $args; } /** * @ticket BP8728 */ public function test_user_can_delete_group_activity() { $u1 = self::factory()->user->create(); $u2 = self::factory()->user->create(); $original_user = bp_loggedin_user_id(); wp_set_current_user( $u1 ); $g = self::factory()->group->create(); $a = self::factory()->activity->create( array( 'user_id' => $u2, 'component' => buddypress()->groups->id, 'type' => 'activity_update', 'item_id' => $g, 'content' => 'Random content', ) ); // Activity for group creator. $b = self::factory()->activity->create( array( 'user_id' => $u1, 'component' => buddypress()->groups->id, 'type' => 'activity_update', 'item_id' => $g, 'content' => 'Random content', ) ); // Add user to group. self::add_user_to_group( $u2, $g ); $activity = self::factory()->activity->get_object_by_id( $a ); $activity_b = self::factory()->activity->get_object_by_id( $b ); // User can delete his own activity. wp_set_current_user( $u2 ); $this->assertTrue( bp_activity_user_can_delete( $activity ) ); // Activity from site admins can't be deleted by non site admins. wp_set_current_user( $u2 ); $this->assertFalse( bp_activity_user_can_delete( $activity_b ) ); // Activity from site admins can be deleted by other site admins. $site_admin = self::factory()->user->create( array( 'role' => 'administrator' ) ); wp_set_current_user( $site_admin ); $this->assertTrue( bp_activity_user_can_delete( $activity_b ) ); // Group creator can delete activity. wp_set_current_user( $u1 ); $this->assertTrue( bp_activity_user_can_delete( $activity ) ); // Logged-out user can't delete activity. wp_set_current_user( 0 ); $this->assertFalse( bp_activity_user_can_delete( $activity ) ); // Misc user can't delete activity. $misc_user = self::factory()->user->create(); wp_set_current_user( $misc_user ); $this->assertFalse( bp_activity_user_can_delete( $activity ) ); // Misc group member can't delete activity. $misc_user_2 = self::factory()->user->create(); self::add_user_to_group( $misc_user_2, $g ); wp_set_current_user( $misc_user_2 ); $this->assertFalse( bp_activity_user_can_delete( $activity ) ); // Group mod can delete activity. $misc_user_3 = self::factory()->user->create(); self::add_user_to_group( $misc_user_3, $g, array( 'is_mod' => true ) ); wp_set_current_user( $misc_user_3 ); $this->assertTrue( bp_activity_user_can_delete( $activity ) ); // Group admin can delete activity. $misc_user_4 = self::factory()->user->create(); self::add_user_to_group( $misc_user_4, $g, array( 'is_admin' => true ) ); wp_set_current_user( $misc_user_4 ); $this->assertTrue( bp_activity_user_can_delete( $activity ) ); wp_set_current_user( $original_user ); } /** * @ticket BP8728 */ public function test_group_admins_cannot_delete_activity() { $u1 = self::factory()->user->create(); $u2 = self::factory()->user->create(); $original_user = bp_loggedin_user_id(); wp_set_current_user( $u1 ); $g = self::factory()->group->create(); $g2 = self::factory()->group->create(); $a = self::factory()->activity->create( array( 'user_id' => $u1, 'content' => 'Random Activity content', ) ); // Activity for group creator. $a2 = self::factory()->activity->create( array( 'user_id' => $u1, 'component' => buddypress()->groups->id, 'type' => 'activity_update', 'item_id' => $g, 'content' => 'Random first Group Activity content', ) ); $a3 = self::factory()->activity->create( array( 'user_id' => $u1, 'component' => buddypress()->groups->id, 'type' => 'activity_update', 'item_id' => $g2, 'content' => 'Random second Group Activity content', ) ); $activity = self::factory()->activity->get_object_by_id( $a ); // Add u2 as Admin of g2. self::add_user_to_group( $u2, $g, array( 'is_admin' => true ) ); wp_set_current_user( $u2 ); $this->assertFalse( bp_activity_user_can_delete( $activity ), 'Group Admins or Mods shouldn not be able to delete activities that are not attached to a group' ); $activity = self::factory()->activity->get_object_by_id( $a2 ); add_filter( 'bp_disable_group_activity_deletions', '__return_true' ); $this->assertFalse( bp_activity_user_can_delete( $activity ), 'Group Admins or Mods should not be able to delete group activities when Site admin globally disallowed it.' ); remove_filter( 'bp_disable_group_activity_deletions', '__return_true' ); $activity = self::factory()->activity->get_object_by_id( $a3 ); $this->assertFalse( bp_activity_user_can_delete( $activity ), 'Group Admins or Mods should not be able to delete another group activities.' ); wp_set_current_user( $original_user ); } }