1
0
Fork 0
mirror of https://github.com/buddypress/buddypress.git synced 2026-07-22 20:56:55 +08:00
buddypress/tests/phpunit/testcases/groups/notifications.php
David Cavins 871df24b0c Invitations: Clean up notifications on acceptance.
Clean up stray notifications when an invitation is revoked.

Props imath.

See #6210.

git-svn-id: https://buddypress.svn.wordpress.org/trunk@12437 cdf35c40-ae34-48e0-9cc9-0c9da1808c22
2019-08-12 20:45:04 +00:00

302 lines
12 KiB
PHP

<?php
/**
* @group groups
* @group notifications
*/
class BP_Tests_Groups_Notifications extends BP_UnitTestCase {
protected $filter_fired;
protected $current_user;
protected $requesting_user_id;
protected $group;
public function setUp() {
parent::setUp();
$this->current_user = get_current_user_id();
$this->set_current_user( self::factory()->user->create() );
$this->requesting_user_id = self::factory()->user->create();
$this->group = self::factory()->group->create( array( 'status' => 'private' ) );
$this->filter_fired = '';
}
public function tearDown() {
parent::tearDown();
$this->set_current_user( $this->current_user );
}
/**
* @group groups_format_notifications
*/
public function test_groups_format_notifications_bp_groups_multiple_new_membership_requests_notification() {
add_filter( 'bp_groups_multiple_new_membership_requests_notification', array( $this, 'notification_filter_callback' ) );
$n = groups_format_notifications( 'new_membership_request', $this->group, $this->requesting_user_id, 5 );
remove_filter( 'bp_groups_multiple_new_membership_requests_notification', array( $this, 'notification_filter_callback' ) );
$this->assertSame( 'bp_groups_multiple_new_membership_requests_notification', $this->filter_fired );
}
/**
* @group groups_format_notifications
*/
public function test_groups_format_notifications_bp_groups_single_new_membership_request_notification() {
add_filter( 'bp_groups_single_new_membership_request_notification', array( $this, 'notification_filter_callback' ) );
$n = groups_format_notifications( 'new_membership_request', $this->group, 0, 1 );
remove_filter( 'bp_groups_single_new_membership_request_notification', array( $this, 'notification_filter_callback' ) );
$this->assertSame( 'bp_groups_single_new_membership_request_notification', $this->filter_fired );
}
/**
* @group groups_format_notifications
*/
public function test_groups_format_notifications_bp_groups_multiple_membership_request_accepted_notification() {
add_filter( 'bp_groups_multiple_membership_request_accepted_notification', array( $this, 'notification_filter_callback' ) );
$n = groups_format_notifications( 'membership_request_accepted', $this->group, 0, 5 );
remove_filter( 'bp_groups_multiple_membership_request_accepted_notification', array( $this, 'notification_filter_callback' ) );
$this->assertSame( 'bp_groups_multiple_membership_request_accepted_notification', $this->filter_fired );
}
/**
* @group groups_format_notifications
*/
public function test_groups_format_notifications_bp_groups_single_membership_request_accepted_notification() {
add_filter( 'bp_groups_single_membership_request_accepted_notification', array( $this, 'notification_filter_callback' ) );
$n = groups_format_notifications( 'membership_request_accepted', $this->group, 0, 1 );
remove_filter( 'bp_groups_single_membership_request_accepted_notification', array( $this, 'notification_filter_callback' ) );
$this->assertSame( 'bp_groups_single_membership_request_accepted_notification', $this->filter_fired );
}
/**
* @group groups_format_notifications
*/
public function test_groups_format_notifications_bp_groups_multiple_membership_request_rejected_notification() {
add_filter( 'bp_groups_multiple_membership_request_rejected_notification', array( $this, 'notification_filter_callback' ) );
$n = groups_format_notifications( 'membership_request_rejected', $this->group, 0, 5 );
remove_filter( 'bp_groups_multiple_membership_request_rejected_notification', array( $this, 'notification_filter_callback' ) );
$this->assertSame( 'bp_groups_multiple_membership_request_rejected_notification', $this->filter_fired );
}
/**
* @group groups_format_notifications
*/
public function test_groups_format_notifications_bp_groups_single_membership_request_rejected_notification() {
add_filter( 'bp_groups_single_membership_request_rejected_notification', array( $this, 'notification_filter_callback' ) );
$n = groups_format_notifications( 'membership_request_rejected', $this->group, 0, 1 );
remove_filter( 'bp_groups_single_membership_request_rejected_notification', array( $this, 'notification_filter_callback' ) );
$this->assertSame( 'bp_groups_single_membership_request_rejected_notification', $this->filter_fired );
}
/**
* @group groups_format_notifications
*/
public function test_groups_format_notifications_bp_groups_multiple_member_promoted_to_admin_notification() {
add_filter( 'bp_groups_multiple_member_promoted_to_admin_notification', array( $this, 'notification_filter_callback' ) );
$n = groups_format_notifications( 'member_promoted_to_admin', $this->group, 0, 5 );
remove_filter( 'bp_groups_multiple_member_promoted_to_admin_notification', array( $this, 'notification_filter_callback' ) );
$this->assertSame( 'bp_groups_multiple_member_promoted_to_admin_notification', $this->filter_fired );
}
/**
* @group groups_format_notifications
*/
public function test_groups_format_notifications_bp_groups_single_member_promoted_to_admin_notification() {
add_filter( 'bp_groups_single_member_promoted_to_admin_notification', array( $this, 'notification_filter_callback' ) );
$n = groups_format_notifications( 'member_promoted_to_admin', $this->group, 0, 1 );
remove_filter( 'bp_groups_single_member_promoted_to_admin_notification', array( $this, 'notification_filter_callback' ) );
$this->assertSame( 'bp_groups_single_member_promoted_to_admin_notification', $this->filter_fired );
}
/**
* @group groups_format_notifications
*/
public function test_groups_format_notifications_bp_groups_multiple_member_promoted_to_mod_notification() {
add_filter( 'bp_groups_multiple_member_promoted_to_mod_notification', array( $this, 'notification_filter_callback' ) );
$n = groups_format_notifications( 'member_promoted_to_mod', $this->group, 0, 5 );
remove_filter( 'bp_groups_multiple_member_promoted_to_mod_notification', array( $this, 'notification_filter_callback' ) );
$this->assertSame( 'bp_groups_multiple_member_promoted_to_mod_notification', $this->filter_fired );
}
/**
* @group groups_format_notifications
*/
public function test_groups_format_notifications_bp_groups_single_member_promoted_to_mod_notification() {
add_filter( 'bp_groups_single_member_promoted_to_mod_notification', array( $this, 'notification_filter_callback' ) );
$n = groups_format_notifications( 'member_promoted_to_mod', $this->group, 0, 1 );
remove_filter( 'bp_groups_single_member_promoted_to_mod_notification', array( $this, 'notification_filter_callback' ) );
$this->assertSame( 'bp_groups_single_member_promoted_to_mod_notification', $this->filter_fired );
}
/**
* @group groups_format_notifications
*/
public function test_groups_format_notifications_bp_groups_multiple_group_invite_notification() {
add_filter( 'bp_groups_multiple_group_invite_notification', array( $this, 'notification_filter_callback' ) );
$n = groups_format_notifications( 'group_invite', $this->group, 0, 5 );
remove_filter( 'bp_groups_multiple_group_invite_notification', array( $this, 'notification_filter_callback' ) );
$this->assertSame( 'bp_groups_multiple_group_invite_notification', $this->filter_fired );
}
/**
* @group groups_format_notifications
*/
public function test_groups_format_notifications_bp_groups_single_group_invite_notification() {
add_filter( 'bp_groups_single_group_invite_notification', array( $this, 'notification_filter_callback' ) );
$n = groups_format_notifications( 'group_invite', $this->group, 0, 1 );
remove_filter( 'bp_groups_single_group_invite_notification', array( $this, 'notification_filter_callback' ) );
$this->assertSame( 'bp_groups_single_group_invite_notification', $this->filter_fired );
}
/**
* @group bp_groups_delete_promotion_notifications
*/
public function test_bp_groups_delete_promotion_notifications() {
// Dummy group and user IDs
$u = 5;
$g = 12;
// Admin
$n = self::factory()->notification->create( array(
'component_name' => 'groups',
'user_id' => $u,
'item_id' => $g,
'component_action' => 'member_promoted_to_admin',
) );
$notifications = BP_Notifications_Notification::get( array(
'user_id' => $u,
) );
// Double check it's there
$this->assertEquals( array( $n ), wp_list_pluck( $notifications, 'id' ) );
// fire the hook
do_action( 'groups_demoted_member', $u, $g );
$notifications = BP_Notifications_Notification::get( array(
'user_id' => $u,
) );
$this->assertEmpty( $notifications );
// Mod
$n = self::factory()->notification->create( array(
'component_name' => 'groups',
'user_id' => $u,
'item_id' => $g,
'component_action' => 'member_promoted_to_mod',
) );
$notifications = BP_Notifications_Notification::get( array(
'user_id' => $u,
) );
// Double check it's there
$this->assertEquals( array( $n ), wp_list_pluck( $notifications, 'id' ) );
// fire the hook
do_action( 'groups_demoted_member', $u, $g );
$notifications = BP_Notifications_Notification::get( array(
'user_id' => $u,
) );
$this->assertEmpty( $notifications );
}
public function notification_filter_callback( $value ) {
$this->filter_fired = current_filter();
return $value;
}
/**
* @group BP7375
*/
public function test_membership_request_notifications_should_be_cleared_when_request_is_accepted() {
$users = self::factory()->user->create_many( 3 );
$this->add_user_to_group( $users[0], $this->group, array(
'is_admin' => 1,
) );
$this->add_user_to_group( $users[1], $this->group, array(
'is_admin' => 1,
) );
groups_send_membership_request( array(
'user_id' => $users[2],
'group_id' => $this->group
) );
// Both admins should get a notification.
$get_args = array(
'user_id' => $users[0],
'item_id' => $this->group,
'secondary_item_id' => $users[2],
'component_action' => 'new_membership_request',
'is_new' => true,
);
$u0_notifications = BP_Notifications_Notification::get( $get_args );
$u1_notifications = BP_Notifications_Notification::get( $get_args );
$this->assertNotEmpty( $u0_notifications );
$this->assertNotEmpty( $u1_notifications );
groups_accept_membership_request( false, $users[2], $this->group );
$u0_notifications = BP_Notifications_Notification::get( $get_args );
$u1_notifications = BP_Notifications_Notification::get( $get_args );
$this->assertEmpty( $u0_notifications );
$this->assertEmpty( $u1_notifications );
}
public function test_membership_request_notifications_should_be_cleared_when_request_is_accepted_via_invite() {
$users = self::factory()->user->create_many( 3 );
$this->add_user_to_group( $users[0], $this->group, array(
'is_admin' => 1,
) );
$this->add_user_to_group( $users[1], $this->group, array(
'is_admin' => 1,
) );
groups_send_membership_request( array(
'user_id' => $users[2],
'group_id' => $this->group
) );
// Both admins should get a notification.
$get_args = array(
'user_id' => $users[0],
'item_id' => $this->group,
'secondary_item_id' => $users[2],
'component_action' => 'new_membership_request',
'is_new' => true,
);
$u0_notifications = BP_Notifications_Notification::get( $get_args );
$u1_notifications = BP_Notifications_Notification::get( $get_args );
$this->assertNotEmpty( $u0_notifications );
$this->assertNotEmpty( $u1_notifications );
// 'Accept' the request by sending an invite.
groups_invite_user( array(
'user_id' => $users[2],
'group_id' => $this->group,
'send_invite' => true
) );
$u0_notifications = BP_Notifications_Notification::get( $get_args );
$u1_notifications = BP_Notifications_Notification::get( $get_args );
$this->assertEmpty( $u0_notifications );
$this->assertEmpty( $u1_notifications );
}
}