diff --git tests/phpunit/testcases/groups/class-bp-groups-member.php tests/phpunit/testcases/groups/class-bp-groups-member.php
index 7608130..0abe39e 100644
--- tests/phpunit/testcases/groups/class-bp-groups-member.php
+++ tests/phpunit/testcases/groups/class-bp-groups-member.php
@@ -25,6 +25,18 @@ class BP_Tests_BP_Groups_Member_TestCases extends BP_UnitTestCase {
 		return $invite->id;
 	}
 
+	public static function create_group_membership_request( $user_id, $group_id ) {
+		$request                = new BP_Groups_Member;
+		$request->group_id      = $group_id;
+		$request->user_id       = $user_id;
+		$request->date_modified = bp_core_current_time();
+		$request->inviter_id    = 0;
+		$request->is_confirmed  = 0;
+
+		$request->save();
+		return $request->id;
+	}
+
 	public function test_get_recently_joined_with_filter() {
 		$g1 = $this->factory->group->create( array(
 			'name' => 'Tab',
@@ -223,5 +235,234 @@ class BP_Tests_BP_Groups_Member_TestCases extends BP_UnitTestCase {
 
 		$this->set_current_user( $old_current_user );
 	}
+
+	/**
+	 * @group bp_groups_invitations and bp_group_membership_requests
+	 * 
+	 * These functions all use BP_Groups_Member::delete()
+	 *		groups_delete_membership_request( $membership_id, $user_id = 0, $group_id = 0 )
+	 *	 	groups_reject_membership_request( $membership_id, $user_id = 0, $group_id = 0 )
+	 *	 	groups_reject_invite( $user_id, $group_id )
+	 *		groups_uninvite_user( $user_id, $group_id )
+	 * This function uses a targeted BP_Groups_Member::delete_invite()
+	 *	 	groups_delete_invite( $user_id, $group_id )
+	 */
+	public function test_bp_groups_reject_membership_request() {
+		$u1 = $this->factory->user->create();
+		$u2 = $this->factory->user->create();
+		$u3 = $this->factory->user->create();
+		$g = $this->factory->group->create( array(
+			'status' => 'private',
+		) );
+
+		$now = time();
+		$this->add_user_to_group( $u1, $g, array(
+			'date_modified' => date( 'Y-m-d H:i:s', $now - 60 ),
+		) );
+
+		// Membership requests should be removed.
+		self::create_group_membership_request( $u3, $g );
+		$u3_has_request_before = groups_check_for_membership_request( $u3, $g );
+		// Result of groups_check_for_membership_request is a numeric string.
+		$this->assertTrue( is_numeric( $u3_has_request_before ) && $u3_has_request_before > 0 );
+		groups_reject_membership_request( null, $u3, $g );
+		$u3_has_request_after = groups_check_for_membership_request( $u3, $g );
+		$this->assertEquals( $u3_has_request_after, 0 );
+
+		// Outstanding invitations should be left intact.
+		// @TODO: Fails
+		self::invite_user_to_group( $u2, $g, $u1 );
+		$u2_has_invite_before = groups_check_user_has_invite( $u2, $g );
+		// Result of groups_check_user_has_invite is a numeric string.
+		$this->assertTrue( is_numeric( $u2_has_invite_before ) && $u2_has_invite_before > 0 );
+		groups_reject_membership_request( null, $u2, $g );
+		$u2_has_invite_after = groups_check_user_has_invite( $u2, $g );
+		// If nothing changed, the before and after values will be the same.
+		// $this->assertEquals( $u2_has_invite_before, $u2_has_invite_after );
+
+		// Confirmed memberships should be left intact.
+		// @TODO: Fails
+		$u1_is_member_before = groups_is_user_member( $u1, $g );
+		// Result of groups_is_user_member is a numeric string.
+		$this->assertTrue( is_numeric( $u1_is_member_before ) && $u1_is_member_before > 0 );
+		groups_reject_membership_request( null, $u1, $g );
+		$u1_is_member_after = groups_is_user_member( $u1, $g );
+		// If nothing changed, the before and after values will be the same.
+		// $this->assertEquals( $u1_is_member_before, $u1_is_member_after );
+	}
+
+	public function test_bp_groups_delete_membership_request() {
+		$u1 = $this->factory->user->create();
+		$u2 = $this->factory->user->create();
+		$u3 = $this->factory->user->create();
+		$g = $this->factory->group->create( array(
+			'status' => 'private',
+		) );
+
+		$now = time();
+		$this->add_user_to_group( $u1, $g, array(
+			'date_modified' => date( 'Y-m-d H:i:s', $now - 60 ),
+		) );
+
+		// Membership requests should be removed.
+		self::create_group_membership_request( $u3, $g );
+		$u3_has_request_before = groups_check_for_membership_request( $u3, $g );
+		// Result of groups_check_for_membership_request is a numeric string.
+		$this->assertTrue( is_numeric( $u3_has_request_before ) && $u3_has_request_before > 0 );
+		groups_delete_membership_request( null, $u3, $g );
+		$u3_has_request_after = groups_check_for_membership_request( $u3, $g );
+		$this->assertEquals( $u3_has_request_after, 0 );
+
+		// Outstanding invitations should be left intact.
+		// @TODO: Fails
+		self::invite_user_to_group( $u2, $g, $u1 );
+		$u2_has_invite_before = groups_check_user_has_invite( $u2, $g );
+		// Result of groups_check_user_has_invite is a numeric string.
+		$this->assertTrue( is_numeric( $u2_has_invite_before ) && $u2_has_invite_before > 0 );
+		groups_delete_membership_request( null, $u2, $g );
+		$u2_has_invite_after = groups_check_user_has_invite( $u2, $g );
+		// If nothing changed, the before and after values will be the same.
+		// $this->assertEquals( $u2_has_invite_before, $u2_has_invite_after );
+
+		// Confirmed memberships should be left intact.
+		// @TODO: Fails
+		$u1_is_member_before = groups_is_user_member( $u1, $g );
+		// Result of groups_is_user_member is a numeric string.
+		$this->assertTrue( is_numeric( $u1_is_member_before ) && $u1_is_member_before > 0 );
+		groups_delete_membership_request( null, $u1, $g );
+		$u1_is_member_after = groups_is_user_member( $u1, $g );
+		// If nothing changed, the before and after values will be the same.
+		// $this->assertEquals( $u1_is_member_before, $u1_is_member_after );
+	}
+
+	public function test_bp_groups_reject_invite() {
+		$u1 = $this->factory->user->create();
+		$u2 = $this->factory->user->create();
+		$u3 = $this->factory->user->create();
+		$g = $this->factory->group->create( array(
+			'status' => 'private',
+		) );
+
+		$now = time();
+		$this->add_user_to_group( $u1, $g, array(
+			'date_modified' => date( 'Y-m-d H:i:s', $now - 60 ),
+		) );
+
+		// The invitation should be removed.
+		self::invite_user_to_group( $u2, $g, $u1 );
+		$u2_has_invite_before = groups_check_user_has_invite( $u2, $g );
+		// Result of groups_check_user_has_invite is a numeric string.
+		$this->assertTrue( is_numeric( $u2_has_invite_before ) && $u2_has_invite_before > 0 );
+		groups_reject_invite( $u2, $g );
+		$u2_has_invite_after = groups_check_user_has_invite( $u2, $g );
+		$this->assertEquals( $u2_has_invite_after, 0 );
+
+		// Membership requests should be left intact.
+		// @TODO: Fails
+		self::create_group_membership_request( $u3, $g );
+		$u3_has_request_before = groups_check_for_membership_request( $u3, $g );
+		// Result of groups_check_for_membership_request is a numeric string.
+		$this->assertTrue( is_numeric( $u3_has_request_before ) && $u3_has_request_before > 0 );
+		groups_reject_invite( $u3, $g );
+		$u3_has_request_after = groups_check_for_membership_request( $u3, $g );
+		// If nothing changed, the before and after values will be the same.
+		// $this->assertEquals( $u3_has_request_before, $u3_has_request_after );
+
+		// Confirmed memberships should be left intact.
+		// @TODO: Fails
+		$u1_is_member_before = groups_is_user_member( $u1, $g );
+		// Result of groups_is_user_member is a numeric string.
+		$this->assertTrue( is_numeric( $u1_is_member_before ) && $u1_is_member_before > 0 );
+		groups_reject_invite( $u1, $g );
+		$u1_is_member_after = groups_is_user_member( $u1, $g );
+		// If nothing changed, the before and after values will be the same.
+		// $this->assertEquals( $u1_is_member_before, $u1_is_member_after );
+	}
+
+	public function test_bp_groups_delete_invite() {
+		$u1 = $this->factory->user->create();
+		$u2 = $this->factory->user->create();
+		$u3 = $this->factory->user->create();
+		$g = $this->factory->group->create( array(
+			'status' => 'private',
+		) );
+
+		$now = time();
+		$this->add_user_to_group( $u1, $g, array(
+			'date_modified' => date( 'Y-m-d H:i:s', $now - 60 ),
+		) );
+
+		// The invitation should be removed.
+		self::invite_user_to_group( $u2, $g, $u1 );
+		$u2_has_invite_before = groups_check_user_has_invite( $u2, $g );
+		// Result of groups_check_user_has_invite is a numeric string.
+		$this->assertTrue( is_numeric( $u2_has_invite_before ) && $u2_has_invite_before > 0 );
+		groups_delete_invite( $u2, $g );
+		$u2_has_invite_after = groups_check_user_has_invite( $u2, $g );
+		$this->assertEquals( $u2_has_invite_after, 0 );
+
+		// Membership requests should be left intact.
+		self::create_group_membership_request( $u3, $g );
+		$u3_has_request_before = groups_check_for_membership_request( $u3, $g );
+		// Result of groups_check_for_membership_request is a numeric string.
+		$this->assertTrue( is_numeric( $u3_has_request_before ) && $u3_has_request_before > 0 );
+		groups_delete_invite( $u3, $g );
+		$u3_has_request_after = groups_check_for_membership_request( $u3, $g );
+		// If nothing changed, the before and after values will be the same.
+		$this->assertEquals( $u3_has_request_before, $u3_has_request_after );
+
+		// Confirmed memberships should be left intact.
+		$u1_is_member_before = groups_is_user_member( $u1, $g );
+		// Result of groups_is_user_member is a numeric string.
+		$this->assertTrue( is_numeric( $u1_is_member_before ) && $u1_is_member_before > 0 );
+		groups_delete_invite( $u1, $g );
+		$u1_is_member_after = groups_is_user_member( $u1, $g );
+		// If nothing changed, the before and after values will be the same.
+		$this->assertEquals( $u1_is_member_before, $u1_is_member_after );
+	}
+
+	public function test_bp_groups_uninvite_user() {
+		$u1 = $this->factory->user->create();
+		$u2 = $this->factory->user->create();
+		$u3 = $this->factory->user->create();
+		$g = $this->factory->group->create( array(
+			'status' => 'private',
+		) );
+
+		$now = time();
+		$this->add_user_to_group( $u1, $g, array(
+			'date_modified' => date( 'Y-m-d H:i:s', $now - 60 ),
+		) );
+
+		// The invitation should be removed.
+		self::invite_user_to_group( $u2, $g, $u1 );
+		$u2_has_invite_before = groups_check_user_has_invite( $u2, $g );
+		// Result of groups_check_user_has_invite is a numeric string.
+		$this->assertTrue( is_numeric( $u2_has_invite_before ) && $u2_has_invite_before > 0 );
+		groups_uninvite_user( $u2, $g );
+		$u2_has_invite_after = groups_check_user_has_invite( $u2, $g );
+		$this->assertEquals( $u2_has_invite_after, 0 );
+
+		// Membership requests should be left intact.
+		// @TODO: Fails
+		self::create_group_membership_request( $u3, $g );
+		$u3_has_request_before = groups_check_for_membership_request( $u3, $g );
+		// Result of groups_check_for_membership_request is a numeric string.
+		$this->assertTrue( is_numeric( $u3_has_request_before ) && $u3_has_request_before > 0 );
+		groups_uninvite_user( $u3, $g );
+		$u3_has_request_after = groups_check_for_membership_request( $u3, $g );
+		// If nothing changed, the before and after values will be the same.
+		// $this->assertEquals( $u3_has_request_before, $u3_has_request_after );
+
+		// Confirmed memberships should be left intact.
+		// @TODO: Fails
+		$u1_is_member_before = groups_is_user_member( $u1, $g );
+		// Result of groups_is_user_member is a numeric string.
+		$this->assertTrue( is_numeric( $u1_is_member_before ) && $u1_is_member_before > 0 );
+		groups_uninvite_user( $u1, $g );
+		$u1_is_member_after = groups_is_user_member( $u1, $g );
+		// If nothing changed, the before and after values will be the same.
+		// $this->assertEquals( $u1_is_member_before, $u1_is_member_after );
+	}
 }
 
