| | 516 | |
| | 517 | /** |
| | 518 | * @group groups_join_group |
| | 519 | */ |
| | 520 | public function test_groups_join_group_basic_join() { |
| | 521 | $u1 = $this->factory->user->create(); |
| | 522 | $g = $this->factory->group->create(); |
| | 523 | |
| | 524 | groups_join_group( $g, $u1 ); |
| | 525 | $membership_id = groups_is_user_member( $u1, $g ); |
| | 526 | $this->assertTrue( is_numeric( $membership_id ) && $membership_id > 0 ); |
| | 527 | } |
| | 528 | |
| | 529 | /** |
| | 530 | * @group groups_join_group |
| | 531 | */ |
| | 532 | public function test_groups_join_group_basic_join_use_current_user() { |
| | 533 | $u1 = $this->factory->user->create(); |
| | 534 | $g = $this->factory->group->create(); |
| | 535 | $old_current_user = get_current_user_id(); |
| | 536 | $this->set_current_user( $u1 ); |
| | 537 | |
| | 538 | groups_join_group( $g ); |
| | 539 | $membership_id = groups_is_user_member( $u1, $g ); |
| | 540 | $this->assertTrue( is_numeric( $membership_id ) && $membership_id > 0 ); |
| | 541 | $this->set_current_user( $old_current_user ); |
| | 542 | } |
| | 543 | |
| | 544 | /** |
| | 545 | * @group groups_join_group |
| | 546 | */ |
| | 547 | public function test_groups_join_group_already_member() { |
| | 548 | $u1 = $this->factory->user->create(); |
| | 549 | $g = $this->factory->group->create(); |
| | 550 | $this->add_user_to_group( $u1, $g ); |
| | 551 | |
| | 552 | $this->assertTrue( groups_join_group( $g, $u1 ) ); |
| | 553 | } |
| | 554 | |
| | 555 | /** |
| | 556 | * @group groups_join_group |
| | 557 | */ |
| | 558 | public function test_groups_join_group_cleanup_invites() { |
| | 559 | $u1 = $this->factory->user->create(); |
| | 560 | $u2 = $this->factory->user->create(); |
| | 561 | $g = $this->factory->group->create(); |
| | 562 | $this->add_user_to_group( $u1, $g ); |
| | 563 | |
| | 564 | $m1 = new BP_Groups_Member( $u1, $g ); |
| | 565 | $m1->promote( 'admin' ); |
| | 566 | |
| | 567 | self::invite_user_to_group( $u2, $g, $u1 ); |
| | 568 | |
| | 569 | groups_join_group( $g, $u2 ); |
| | 570 | // Upon joining the group, outstanding invitations should be cleaned up. |
| | 571 | $this->assertEquals( null, groups_check_user_has_invite( $u2, $g, 'any' ) ); |
| | 572 | } |
| | 573 | |
| | 574 | /** |
| | 575 | * @group groups_join_group |
| | 576 | */ |
| | 577 | public function test_groups_join_group_cleanup_requests() { |
| | 578 | $u1 = $this->factory->user->create(); |
| | 579 | $g = $this->factory->group->create(); |
| | 580 | self::create_group_membership_request( $u1, $g ); |
| | 581 | |
| | 582 | groups_join_group( $g, $u1 ); |
| | 583 | // Upon joining the group, outstanding requests should be cleaned up. |
| | 584 | $this->assertEquals( null, groups_check_for_membership_request( $u1, $g ) ); |
| | 585 | } |
| | 586 | |
| | 587 | /** |
| | 588 | * @group groups_leave_group |
| | 589 | */ |
| | 590 | public function test_groups_leave_group_basic_leave_self_initiated() { |
| | 591 | $old_current_user = get_current_user_id(); |
| | 592 | $u1 = $this->factory->user->create(); |
| | 593 | $g = $this->factory->group->create( array( 'creator_id' => $u1 ) ); |
| | 594 | $u2 = $this->factory->user->create(); |
| | 595 | $this->add_user_to_group( $u2, $g ); |
| | 596 | |
| | 597 | $before = groups_get_total_member_count( $g ); |
| | 598 | $this->set_current_user( $u2 ); |
| | 599 | groups_leave_group( $g, $u2 ); |
| | 600 | $after = groups_get_total_member_count( $g ); |
| | 601 | |
| | 602 | $this->assertEquals( $before - 1, $after ); |
| | 603 | $this->set_current_user( $old_current_user ); |
| | 604 | } |
| | 605 | |
| | 606 | /** |
| | 607 | * @group groups_leave_group |
| | 608 | */ |
| | 609 | public function test_groups_leave_group_basic_leave_use_current_user() { |
| | 610 | $old_current_user = get_current_user_id(); |
| | 611 | $u1 = $this->factory->user->create(); |
| | 612 | $g = $this->factory->group->create( array( 'creator_id' => $u1 ) ); |
| | 613 | $u2 = $this->factory->user->create(); |
| | 614 | $this->add_user_to_group( $u2, $g ); |
| | 615 | |
| | 616 | $before = groups_get_total_member_count( $g ); |
| | 617 | $this->set_current_user( $u2 ); |
| | 618 | groups_leave_group( $g ); |
| | 619 | $after = groups_get_total_member_count( $g ); |
| | 620 | |
| | 621 | $this->assertEquals( $before - 1, $after ); |
| | 622 | $this->set_current_user( $old_current_user ); |
| | 623 | } |
| | 624 | |
| | 625 | /** |
| | 626 | * @group groups_leave_group |
| | 627 | */ |
| | 628 | public function test_groups_leave_group_basic_leave_group_admin_initiated() { |
| | 629 | $old_current_user = get_current_user_id(); |
| | 630 | $u1 = $this->factory->user->create(); |
| | 631 | $g = $this->factory->group->create( array( 'creator_id' => $u1 ) ); |
| | 632 | $u2 = $this->factory->user->create(); |
| | 633 | $this->add_user_to_group( $u2, $g ); |
| | 634 | |
| | 635 | $before = groups_get_total_member_count( $g ); |
| | 636 | $this->set_current_user( $u1 ); |
| | 637 | groups_leave_group( $g, $u2 ); |
| | 638 | $after = groups_get_total_member_count( $g ); |
| | 639 | |
| | 640 | $this->assertEquals( $before - 1, $after ); |
| | 641 | $this->set_current_user( $old_current_user ); |
| | 642 | } |
| | 643 | |
| | 644 | /** |
| | 645 | * @group groups_leave_group |
| | 646 | */ |
| | 647 | public function test_groups_leave_group_basic_leave_site_admin_initiated() { |
| | 648 | $old_current_user = get_current_user_id(); |
| | 649 | $u1 = $this->factory->user->create(); |
| | 650 | $u1_siteadmin = new WP_User( $u1 ); |
| | 651 | $u1_siteadmin->add_role( 'administrator' ); |
| | 652 | $g = $this->factory->group->create( array( 'creator_id' => $u1 ) ); |
| | 653 | $u2 = $this->factory->user->create(); |
| | 654 | $this->add_user_to_group( $u2, $g ); |
| | 655 | |
| | 656 | $before = groups_get_total_member_count( $g ); |
| | 657 | $this->set_current_user( $u1 ); |
| | 658 | groups_leave_group( $g, $u2 ); |
| | 659 | $after = groups_get_total_member_count( $g ); |
| | 660 | |
| | 661 | $this->assertEquals( $before - 1, $after ); |
| | 662 | $this->set_current_user( $old_current_user ); |
| | 663 | } |
| | 664 | |
| | 665 | |
| | 666 | /** |
| | 667 | * @group groups_leave_group |
| | 668 | */ |
| | 669 | public function test_groups_leave_group_single_admin_prevent_leave() { |
| | 670 | $old_current_user = get_current_user_id(); |
| | 671 | $u1 = $this->factory->user->create(); |
| | 672 | $g = $this->factory->group->create( array( 'creator_id' => $u1 ) ); |
| | 673 | $u2 = $this->factory->user->create(); |
| | 674 | $this->add_user_to_group( $u2, $g ); |
| | 675 | |
| | 676 | $before = groups_get_total_member_count( $g ); |
| | 677 | $this->set_current_user( $u1 ); |
| | 678 | groups_leave_group( $g, $u1 ); |
| | 679 | $after = groups_get_total_member_count( $g ); |
| | 680 | |
| | 681 | $this->assertEquals( $before, $after ); |
| | 682 | $this->set_current_user( $old_current_user ); |
| | 683 | } |
| | 684 | |
| | 685 | /** |
| | 686 | * @group groups_leave_group |
| | 687 | */ |
| | 688 | public function test_groups_leave_group_multiple_admins_allow_leave() { |
| | 689 | $old_current_user = get_current_user_id(); |
| | 690 | $u1 = $this->factory->user->create(); |
| | 691 | $g = $this->factory->group->create( array( 'creator_id' => $u1 ) ); |
| | 692 | $u2 = $this->factory->user->create(); |
| | 693 | $this->add_user_to_group( $u2, $g ); |
| | 694 | $m2 = new BP_Groups_Member( $u2, $g ); |
| | 695 | $m2->promote( 'admin' ); |
| | 696 | |
| | 697 | $before = groups_get_total_member_count( $g ); |
| | 698 | $this->set_current_user( $u1 ); |
| | 699 | groups_leave_group( $g, $u1 ); |
| | 700 | $after = groups_get_total_member_count( $g ); |
| | 701 | |
| | 702 | $this->assertEquals( $before - 1, $after ); |
| | 703 | $this->set_current_user( $old_current_user ); |
| | 704 | } |