Skip to:
Content

BuddyPress.org

Ticket #8149: 8149-id-param-handling.1.diff

File 8149-id-param-handling.1.diff, 5.9 KB (added by dcavins, 3 months ago)

Revise handling of id parameter in BP_Invitation::get(). Add tests for common edge cases.

  • src/bp-core/classes/class-bp-invitation.php

    diff --git src/bp-core/classes/class-bp-invitation.php src/bp-core/classes/class-bp-invitation.php
    index 24c32a932..cb3c4f384 100644
    class BP_Invitation { 
    347347                $where            = '';
    348348
    349349                // id
    350                 if ( false !== $args['id'] ) {
    351                         $id_in = implode( ',', wp_parse_id_list( $args['id'] ) );
     350                if ( false !== $args['id'] && null !== $args['id'] ) {
     351                        $parsed_ids = wp_parse_id_list( $args['id'] );
     352                        $id_in      = ! empty( $parsed_ids ) ? implode( ',', $parsed_ids ) : 0;
    352353                        $where_conditions['id'] = "id IN ({$id_in})";
    353354                }
    354355
    class BP_Invitation { 
    422423                 * invite_sent
    423424                 * Only create a where statement if something less than "all" has been
    424425                 * specifically requested.
    425                  */ 
     426                 */
    426427                if ( ! empty( $args['invite_sent'] ) && 'all' !== $args['invite_sent'] ) {
    427428                        if ( $args['invite_sent'] == 'draft' ) {
    428429                                $where_conditions['invite_sent'] = "invite_sent = 0";
  • tests/phpunit/testcases/core/invitations.php

    diff --git tests/phpunit/testcases/core/invitations.php tests/phpunit/testcases/core/invitations.php
    index 149179cd4..fe79e2ba3 100644
    include_once BP_TESTS_DIR . 'assets/invitations-extensions.php'; 
    77 * @group invitations
    88 */
    99 class BP_Tests_Invitations extends BP_UnitTestCase {
     10        public function populate_invitations() {
     11                $u1 = $this->factory->user->create();
     12                $u2 = $this->factory->user->create();
     13                $u3 = $this->factory->user->create();
     14                $this->set_current_user( $u1 );
     15
     16                $invites_class = new BPTest_Invitation_Manager_Extension();
     17
     18                // Create a couple of invitations.
     19                $invite_args = array(
     20                        'user_id'           => $u3,
     21                        'inviter_id'            => $u1,
     22                        'item_id'           => 1,
     23                        'send_invite'       => 'sent',
     24                );
     25                $i1 = $invites_class->add_invitation( $invite_args );
     26                $invite_args['inviter_id'] = $u2;
     27                $i2 = $invites_class->add_invitation( $invite_args );
     28
     29                return array( $i1, $i2 );
     30        }
     31
    1032        public function test_bp_invitations_add_invitation_vanilla() {
    1133                $old_current_user = get_current_user_id();
    1234
    include_once BP_TESTS_DIR . 'assets/invitations-extensions.php'; 
    173195
    174196                $this->set_current_user( $old_current_user );
    175197        }
    176        
     198
    177199        public function test_bp_invitations_add_request_vanilla() {
    178200                $old_current_user = get_current_user_id();
    179201
    include_once BP_TESTS_DIR . 'assets/invitations-extensions.php'; 
    287309                $this->set_current_user( $old_current_user );
    288310        }
    289311
     312        /**
     313         * @group bp_invitation_get_id_param
     314         */
     315        public function test_bp_invitations_get_id_false_should_return_all() {
     316                $old_current_user = get_current_user_id();
     317
     318                $invitations = $this->populate_invitations();
     319
     320                $invites_class = new BPTest_Invitation_Manager_Extension();
     321                $found = $invites_class->get_invitations( array(
     322                        'id'     => false,
     323                        'fields' => 'ids',
     324                ) );
     325                $this->assertEqualSets( $invitations, $found );
     326
     327                $this->set_current_user( $old_current_user );
     328        }
     329
     330        /**
     331         * @group bp_invitation_get_id_param
     332         */
     333        public function test_bp_invitations_get_id_null_should_return_all() {
     334                $old_current_user = get_current_user_id();
     335
     336                $invitations = $this->populate_invitations();
     337
     338                $invites_class = new BPTest_Invitation_Manager_Extension();
     339                $found = $invites_class->get_invitations( array(
     340                        'id'     => null,
     341                        'fields' => 'ids',
     342                ) );
     343                $this->assertEqualSets( $invitations, $found );
     344
     345                $this->set_current_user( $old_current_user );
     346        }
     347
     348        /**
     349         * @group bp_invitation_get_id_param
     350         */
     351        public function test_bp_invitations_get_id_empty_array_should_return_none() {
     352                $old_current_user = get_current_user_id();
     353
     354                $invitations = $this->populate_invitations();
     355
     356                $invites_class = new BPTest_Invitation_Manager_Extension();
     357                $found = $invites_class->get_invitations( array(
     358                        'id'     => array(),
     359                        'fields' => 'ids',
     360                ) );
     361                $this->assertEmpty( $found );
     362
     363                $this->set_current_user( $old_current_user );
     364        }
     365
     366        /**
     367         * @group bp_invitation_get_id_param
     368         */
     369        public function test_bp_invitations_get_id_array_zero_should_return_none() {
     370                $old_current_user = get_current_user_id();
     371
     372                $invitations = $this->populate_invitations();
     373
     374                $invites_class = new BPTest_Invitation_Manager_Extension();
     375                $found = $invites_class->get_invitations( array(
     376                        'id'     => array( 0 ),
     377                        'fields' => 'ids',
     378                ) );
     379                $this->assertEmpty( $found );
     380
     381                $this->set_current_user( $old_current_user );
     382        }
     383
     384        /**
     385         * @group bp_invitation_get_id_param
     386         */
     387        public function test_bp_invitations_get_id_zero_int_should_return_none() {
     388                $old_current_user = get_current_user_id();
     389
     390                $invitations = $this->populate_invitations();
     391
     392                $invites_class = new BPTest_Invitation_Manager_Extension();
     393                $found = $invites_class->get_invitations( array(
     394                        'id'     => 0,
     395                        'fields' => 'ids',
     396                ) );
     397                $this->assertEmpty( $found );
     398
     399                $this->set_current_user( $old_current_user );
     400        }
     401
     402        /**
     403         * @group bp_invitation_get_id_param
     404         */
     405        public function test_bp_invitations_get_id_zero_string_should_return_none() {
     406                $old_current_user = get_current_user_id();
     407
     408                $invitations = $this->populate_invitations();
     409
     410                $invites_class = new BPTest_Invitation_Manager_Extension();
     411                $found = $invites_class->get_invitations( array(
     412                        'id'     => '0',
     413                        'fields' => 'ids',
     414                ) );
     415                $this->assertEmpty( $found );
     416
     417                $this->set_current_user( $old_current_user );
     418        }
     419
     420
     421        /**
     422         * @group bp_invitation_get_id_param
     423         */
     424        public function test_bp_invitations_get_id_empty_string_should_return_none() {
     425                $old_current_user = get_current_user_id();
     426
     427                $invitations = $this->populate_invitations();
     428
     429                $invites_class = new BPTest_Invitation_Manager_Extension();
     430                $found = $invites_class->get_invitations( array(
     431                        'id'     => '',
     432                        'fields' => 'ids',
     433                ) );
     434                $this->assertEmpty( $found );
     435
     436                $this->set_current_user( $old_current_user );
     437        }
    290438}