Skip to:
Content

Ticket #6014: 6014.01.diff

File 6014.01.diff, 24.5 KB (added by dcavins, 15 months ago)

Add support for changing group slug via wp-admin.

  • src/bp-groups/admin/css/admin.css

    diff --git src/bp-groups/admin/css/admin.css src/bp-groups/admin/css/admin.css
    index c802127..d32bd31 100644
    body.toplevel_page_bp-groups table.groups th#last_active { 
    4646        line-height: 24px;
    4747        color: #666;
    4848}
     49#bp-groups-permalink {
     50        margin-right: 24px;
     51}
    4952.bp-groups-member-type {
    5053        position: relative;
    5154}
  • src/bp-groups/bp-groups-actions.php

    diff --git src/bp-groups/bp-groups-actions.php src/bp-groups/bp-groups-actions.php
    index 4f80495..7b4491c 100644
    function bp_groups_update_orphaned_groups_on_group_delete( $group ) { 
    620620        }
    621621}
    622622add_action( 'bp_groups_delete_group', 'bp_groups_update_orphaned_groups_on_group_delete', 10, 2 );
     623
     624/**
     625 * Check whether the current action refers to an out-of-date group slug.
     626 *
     627 * @since 2.9.0
     628 *
     629 * @return void
     630 */
     631function bp_groups_check_for_previous_slug() {
     632        $current_action = bp_current_action();
     633
     634        if ( bp_is_groups_component() && ! groups_get_id( $current_action ) ) {
     635                if ( $group_id = groups_get_id_by_previous_slug( $current_action ) ) {
     636                        // The requested group URL is out of date. Update to the current slug.
     637                        $group_object = groups_get_group( $group_id );
     638
     639                        // Call bp_get_group_slug() to make sure all filters are applied.
     640                        buddypress()->current_action = bp_get_group_slug( $group_object );
     641                }
     642        }
     643}
     644add_action( 'bp_groups_setup_globals', 'bp_groups_check_for_previous_slug', 8 );
  • src/bp-groups/bp-groups-activity.php

    diff --git src/bp-groups/bp-groups-activity.php src/bp-groups/bp-groups-activity.php
    index c29a03c..cb7c69c 100644
    function bp_groups_format_activity_action_group_details_updated( $action, $activ 
    190190        } elseif ( ! empty( $changed['description']['old'] ) && ! empty( $changed['description']['new'] ) ) {
    191191                $action = sprintf( __( '%1$s changed the description of the group %2$s from "%3$s" to "%4$s"', 'buddypress' ), $user_link, $group_link, esc_html( $changed['description']['old'] ), esc_html( $changed['description']['new'] ) );
    192192
     193        } elseif ( ! empty( $changed['slug']['old'] ) && ! empty( $changed['slug']['new'] ) ) {
     194                $action = sprintf( __( '%1$s changed the permalink of the group %2$s.', 'buddypress' ), $user_link, $group_link );
     195
    193196        }
    194197
    195198        /**
    function bp_groups_group_details_updated_add_activity( $group_id, $old_group, $n 
    461464                return false;
    462465        }
    463466
    464         if ( ! isset( $old_group->name ) || ! isset( $old_group->description ) ) {
     467        if ( ! isset( $old_group->name ) || ! isset( $old_group->slug ) || ! isset( $old_group->description ) ) {
    465468                return false;
    466469        }
    467470
    function bp_groups_group_details_updated_add_activity( $group_id, $old_group, $n 
    489492                );
    490493        }
    491494
     495        if ( $group->slug !== $old_group->slug ) {
     496                $changed['slug'] = array(
     497                        'old' => $old_group->slug,
     498                        'new' => $group->slug,
     499                );
     500        }
     501
    492502        if ( $group->description !== $old_group->description ) {
    493503                $changed['description'] = array(
    494504                        'old' => $old_group->description,
  • src/bp-groups/bp-groups-admin.php

    diff --git src/bp-groups/bp-groups-admin.php src/bp-groups/bp-groups-admin.php
    index 77f13e1..c3cdac9 100644
    function bp_groups_admin_load() { 
    236236                $error = 0;
    237237                $success_new = $error_new = $success_modified = $error_modified = array();
    238238
    239                 // Group name and description are handled with
    240                 // groups_edit_base_group_details().
    241                 if ( !groups_edit_base_group_details( $group_id, $_POST['bp-groups-name'], $_POST['bp-groups-description'], 0 ) ) {
    242                         $error = $group_id;
     239                // Name, description and slug must not be empty.
     240                if ( empty( $_POST['bp-groups-name'] ) ) {
     241                        $error = $error - 1;
     242                }
     243                if ( empty( $_POST['bp-groups-description'] ) ) {
     244                        $error = $error - 2;
     245                }
     246                if ( empty( $_POST['bp-groups-slug'] ) ) {
     247                        $error = $error - 4;
     248                }
    243249
    244                         // Using negative integers for different error messages... eek!
    245                         if ( empty( $_POST['bp-groups-name'] ) && empty( $_POST['bp-groups-description'] ) ) {
    246                                 $error = -3;
    247                         } elseif ( empty( $_POST['bp-groups-name'] ) ) {
    248                                 $error = -1;
    249                         } elseif ( empty( $_POST['bp-groups-description'] ) ) {
    250                                 $error = -2;
    251                         }
     250                /*
     251                 * Group name, slug, and description are handled with
     252                 * groups_edit_base_group_details().
     253                 */
     254                if ( ! $error && ! groups_edit_base_group_details( array(
     255                                'group_id'       => $group_id,
     256                                'name'           => $_POST['bp-groups-name'],
     257                                'slug'           => $_POST['bp-groups-slug'],
     258                                'description'    => $_POST['bp-groups-description'],
     259                                'notify_members' => false,
     260                        ) ) ) {
     261                        $error = $group_id;
    252262                }
    253263
    254264                // Enable discussion forum.
    function bp_groups_admin_edit() { 
    518528                }
    519529
    520530                if ( ! empty( $errors ) ) {
    521                         switch ( $errors ) {
    522                                 case -1 :
    523                                         $messages[] = __( 'Group name cannot be empty.', 'buddypress' );
    524                                         break;
    525 
    526                                 case -2 :
    527                                         $messages[] = __( 'Group description cannot be empty.', 'buddypress' );
    528                                         break;
    529 
    530                                 case -3 :
    531                                         $messages[] = __( 'Group name and description cannot be empty.', 'buddypress' );
    532                                         break;
    533 
    534                                 default :
    535                                         $messages[] = __( 'An error occurred when trying to update your group details.', 'buddypress' );
    536                                         break;
     531                        if ( $errors < 0 ) {
     532                                $messages[] = __( 'Group name, slug, and description are all required fields.', 'buddypress' );
     533                        } else {
     534                                $messages[] = __( 'An error occurred when trying to update your group details.', 'buddypress' );
    537535                        }
    538536
    539537                } elseif ( ! empty( $updated ) ) {
    function bp_groups_admin_edit() { 
    612610                                                                                ?></label>
    613611                                                                                <input type="text" name="bp-groups-name" id="bp-groups-name" value="<?php echo esc_attr( stripslashes( $group_name ) ) ?>" />
    614612                                                                                <div id="bp-groups-permalink-box">
    615                                                                                         <strong><?php esc_html_e( 'Permalink:', 'buddypress' ) ?></strong> <span id="sample-permalink"><?php bp_group_permalink( $group ) ?></span> <a href="<?php echo bp_group_permalink( $group ) ?>" class="button button-small" id="bp-groups-visit-group"><?php esc_html_e( 'Visit Group', 'buddypress' ) ?></a>
     613                                                                                        <strong><?php esc_html_e( 'Permalink:', 'buddypress' ) ?></strong>
     614                                                                                        <span id="bp-groups-permalink">
     615                                                                                                <?php bp_groups_directory_permalink(); ?> <input type="text" id="bp-groups-slug" name="bp-groups-slug" value="<?php bp_group_slug( $group ); ?>" autocomplete="off"> /
     616                                                                                        </span>
     617                                                                                        <a href="<?php echo bp_group_permalink( $group ) ?>" class="button button-small" id="bp-groups-visit-group"><?php esc_html_e( 'Visit Group', 'buddypress' ) ?></a>
    616618                                                                                </div>
    617619
    618620                                                                                <label for="bp-groups-description" class="screen-reader-text"><?php
  • src/bp-groups/bp-groups-functions.php

    diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php
    index 76d031f..f341ba5 100644
    function groups_create_group( $args = '' ) { 
    218218 *
    219219 * @since 1.0.0
    220220 *
    221  * @param int    $group_id       ID of the group.
    222  * @param string $group_name     Name of the group.
    223  * @param string $group_desc     Description of the group.
    224  * @param bool   $notify_members Whether to send an email notification to group
    225  *                               members about changes in these details.
     221 * @param array $args {
     222 *     An array of optional arguments.
     223 *     @type int    $group_id       ID of the group.
     224 *     @type string $name           Name of the group.
     225 *     @type string $slug           Slug of the group.
     226 *     @type string $description    Description of the group.
     227 *     @type bool   $notify_members Whether to send an email notification to group
     228 *                                  members about changes in these details.
     229 * }
    226230 * @return bool True on success, false on failure.
    227231 */
    228 function groups_edit_base_group_details( $group_id, $group_name, $group_desc, $notify_members ) {
     232function groups_edit_base_group_details( $args = array() ) {
    229233
    230         if ( empty( $group_name ) || empty( $group_desc ) )
     234        // Backward compatibility with old method of passing arguments.
     235        if ( ! is_array( $args ) || func_num_args() > 1 ) {
     236                _deprecated_argument( __METHOD__, '2.9.0', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.', 'buddypress' ), __METHOD__, __FILE__ ) );
     237
     238                $old_args_keys = array(
     239                        0 => 'group_id',
     240                        1 => 'name',
     241                        2 => 'description',
     242                        3 => 'notify_members',
     243                );
     244
     245                $args = bp_core_parse_args_array( $old_args_keys, func_get_args() );
     246        }
     247
     248        $r = wp_parse_args( $args, array(
     249                'group_id'       => bp_get_current_group_id(),
     250                'name'           => null,
     251                'slug'           => null,
     252                'description'    => null,
     253                'notify_members' => false,
     254        ) );
     255
     256        if ( ! $r['group_id'] ) {
    231257                return false;
     258        }
    232259
    233         $group     = groups_get_group( $group_id );
     260        $group     = groups_get_group( $r['group_id'] );
    234261        $old_group = clone $group;
    235262
    236         $group->name        = $group_name;
    237         $group->description = $group_desc;
     263        // Group name, slug and description can never be empty. Update only if provided.
     264        if ( $r['name'] ) {
     265                $group->name = $r['name'];
     266        }
     267        if ( $r['slug']  && $r['slug'] != $group->slug ) {
     268                $group->slug = groups_check_slug( $r['slug'] );
     269        }
     270        if ( $r['description'] ) {
     271                $group->description = $r['description'];
     272        }
    238273
    239         if ( !$group->save() )
     274        if ( ! $group->save() ) {
    240275                return false;
     276        }
     277
     278        // Maybe update the "previous_slug" groupmeta.
     279        if ( $group->slug != $old_group->slug ) {
     280                /*
     281                 * If the old slug exists in this group's past, delete that entry.
     282                 * Recent previous_slugs are preferred when selecting the current group
     283                 * from an old group slug, so we want the previous slug to be
     284                 * saved "now" in the groupmeta table and don't need the old record.
     285                 */
     286                groups_delete_groupmeta( $group->id, 'previous_slug', $old_group->slug );
     287                groups_add_groupmeta( $group->id, 'previous_slug', $old_group->slug );
     288        }
    241289
    242         if ( $notify_members ) {
     290        if ( $r['notify_members'] ) {
    243291                groups_notification_group_updated( $group->id, $old_group );
    244292        }
    245293
    function groups_edit_base_group_details( $group_id, $group_name, $group_desc, $n 
    252300         * @param BP_Groups_Group $old_group      Group object, before being modified.
    253301         * @param bool            $notify_members Whether to send an email notification to members about the change.
    254302         */
    255         do_action( 'groups_details_updated', $group->id, $old_group, $notify_members );
     303        do_action( 'groups_details_updated', $group->id, $old_group, $r['notify_members'] );
    256304
    257305        return true;
    258306}
    function groups_get_id( $group_slug ) { 
    428476        return BP_Groups_Group::group_exists( $group_slug );
    429477}
    430478
     479/**
     480 * Get a group ID by checking against old (not currently active) slugs.
     481 *
     482 * @since 2.9.0
     483 *
     484 * @param string $group_slug The group's slug.
     485 * @return int|null The group ID on success; null on failure.
     486 */
     487function groups_get_id_by_previous_slug( $group_slug ) {
     488        return BP_Groups_Group::get_id_by_previous_slug( $group_slug );
     489}
     490
    431491/** User Actions **************************************************************/
    432492
    433493/**
  • src/bp-groups/bp-groups-notifications.php

    diff --git src/bp-groups/bp-groups-notifications.php src/bp-groups/bp-groups-notifications.php
    index fc8a052..5bf44fd 100644
    function groups_notification_group_updated( $group_id = 0, $old_group = null ) { 
    4444                                esc_html( $group->description )
    4545                        );
    4646                }
     47
     48                if ( $group->slug !== $old_group->slug ) {
     49                        $changed[] = sprintf(
     50                                _x( '* Permalink changed from "%s" to "%s".', 'Group update email text', 'buddypress' ),
     51                                esc_url( bp_get_group_permalink( $old_group ) ),
     52                                esc_url( bp_get_group_permalink( $group ) )
     53                        );
     54                }
    4755        }
    4856
    4957        /**
  • src/bp-groups/bp-groups-screens.php

    diff --git src/bp-groups/bp-groups-screens.php src/bp-groups/bp-groups-screens.php
    index 17e139b..b02419f 100644
    function groups_screen_group_admin_edit_details() { 
    839839
    840840                        $group_notify_members = isset( $_POST['group-notify-members'] ) ? (int) $_POST['group-notify-members'] : 0;
    841841
    842                         if ( !groups_edit_base_group_details( $_POST['group-id'], $_POST['group-name'], $_POST['group-desc'], $group_notify_members ) ) {
     842                        // Name and description are required and may not be empty.
     843                        if ( empty( $_POST['group-name'] ) || empty( $_POST['group-desc'] ) ) {
     844                                bp_core_add_message( __( 'Groups must have a name and a description. Please try again.', 'buddypress' ), 'error' );
     845                        } elseif ( ! groups_edit_base_group_details( array(
     846                                'group_id'       => $_POST['group-id'],
     847                                'name'           => $_POST['group-name'],
     848                                'slug'           => null, // @TODO: Add to settings pane? If yes, editable by site admin only, or allow group admins to do this?
     849                                'description'    => $_POST['group-desc'],
     850                                'notify_members' => $group_notify_members,
     851                        ) ) ) {
    843852                                bp_core_add_message( __( 'There was an error updating group details. Please try again.', 'buddypress' ), 'error' );
    844853                        } else {
    845854                                bp_core_add_message( __( 'Group details were successfully updated.', 'buddypress' ) );
  • src/bp-groups/classes/class-bp-groups-group.php

    diff --git src/bp-groups/classes/class-bp-groups-group.php src/bp-groups/classes/class-bp-groups-group.php
    index 2dceead..598cc87 100644
    class BP_Groups_Group { 
    655655        }
    656656
    657657        /**
     658         * Get whether a group exists for an old slug.
     659         *
     660         * @since 2.9.0
     661         *
     662         * @param string      $slug       Slug to check.
     663         * @return int|null|false Group ID if found; null if not; false if missing parameters.
     664         */
     665        public static function get_id_by_previous_slug( $slug, $table_name = false ) {
     666                global $wpdb;
     667
     668                if ( ! $table_name ) {
     669                        $table_name = buddypress()->groups->table_name_groupmeta;
     670                }
     671
     672                if ( empty( $slug ) ) {
     673                        return false;
     674                }
     675
     676                $group_exists_sql = $wpdb->prepare( "SELECT group_id FROM {$table_name} WHERE meta_key = 'previous_slug' AND meta_value = %s ORDER BY id DESC", strtolower( $slug ) );
     677                $cached = bp_core_get_incremented_cache( $group_exists_sql, 'bp_groups' );
     678                if ( false === $cached ) {
     679                        $group_id = $wpdb->get_var( $group_exists_sql );
     680                        bp_core_set_incremented_cache( $group_exists_sql, 'bp_groups', $group_id );
     681                } else {
     682                        $group_id = $cached;
     683                }
     684
     685                return is_numeric( $group_id ) ? (int) $group_id : $group_id;
     686        }
     687
     688        /**
    658689         * Get IDs of users with outstanding invites to a given group from a specified user.
    659690         *
    660691         * @since 1.6.0
  • tests/phpunit/testcases/groups/activity.php

    diff --git tests/phpunit/testcases/groups/activity.php tests/phpunit/testcases/groups/activity.php
    index 1946326..bfb4087 100644
    class BP_Tests_Groups_Activity extends BP_UnitTestCase { 
    5555         */
    5656        public function test_bp_groups_format_activity_action_group_details_updated_with_no_change() {
    5757                $group = $this->factory->group->create_and_get();
    58                 groups_edit_base_group_details( $group->id, $group->name, $group->description, true );
     58                groups_edit_base_group_details( array(
     59                                'group_id'       => $group->id,
     60                                'name'           => $group->name,
     61                                'slug'           => $group->slug,
     62                                'description'    => $group->description,
     63                                'notify_members' => true,
     64                ) );
    5965
    6066                $a = bp_activity_get( array(
    6167                        'component' => buddypress()->groups->id,
    class BP_Tests_Groups_Activity extends BP_UnitTestCase { 
    7278         */
    7379        public function test_bp_groups_format_activity_action_group_details_updated_with_notify_members_false() {
    7480                $group = $this->factory->group->create_and_get();
    75                 groups_edit_base_group_details( $group->id, 'Foo', $group->description, false );
     81                groups_edit_base_group_details( array(
     82                        'group_id'       => $group->id,
     83                        'name'           => 'Foo',
     84                        'slug'           => $group->slug,
     85                        'description'    => $group->description,
     86                        'notify_members' => false,
     87                ) );
    7688
    7789                $a = bp_activity_get( array(
    7890                        'component' => buddypress()->groups->id,
    class BP_Tests_Groups_Activity extends BP_UnitTestCase { 
    93105                $this->set_current_user( $u );
    94106
    95107                $group = $this->factory->group->create_and_get();
    96                 groups_edit_base_group_details( $group->id, 'Foo', $group->description, true );
     108                groups_edit_base_group_details( array(
     109                        'group_id'       => $group->id,
     110                        'name'           => 'Foo',
     111                        'slug'           => $group->slug,
     112                        'description'    => $group->description,
     113                        'notify_members' => true,
     114                ) );
    97115
    98116                $a = bp_activity_get( array(
    99117                        'component' => buddypress()->groups->id,
    class BP_Tests_Groups_Activity extends BP_UnitTestCase { 
    119137                $this->set_current_user( $u );
    120138
    121139                $group = $this->factory->group->create_and_get();
    122                 groups_edit_base_group_details( $group->id, $group->name, 'Bar', true );
     140                groups_edit_base_group_details( array(
     141                        'group_id'       => $group->id,
     142                        'name'           => $group->name,
     143                        'slug'           => $group->slug,
     144                        'description'    => 'Bar',
     145                        'notify_members' => true,
     146                ) );
    123147
    124148                $a = bp_activity_get( array(
    125149                        'component' => buddypress()->groups->id,
    class BP_Tests_Groups_Activity extends BP_UnitTestCase { 
    139163         * @group activity_action
    140164         * @group bp_groups_format_activity_action_group_details_updated
    141165         */
     166        public function test_bp_groups_format_activity_action_group_details_updated_with_updated_slug() {
     167                $old_user = get_current_user_id();
     168                $u = $this->factory->user->create();
     169                $this->set_current_user( $u );
     170
     171                $group = $this->factory->group->create_and_get();
     172                groups_edit_base_group_details( array(
     173                        'group_id'       => $group->id,
     174                        'name'           => $group->name,
     175                        'slug'           => 'flaxen',
     176                        'description'    => $group->description,
     177                        'notify_members' => true,
     178                ) );
     179                $new_group_details = groups_get_group( $group->id );
     180
     181                $a = bp_activity_get( array(
     182                        'component' => buddypress()->groups->id,
     183                        'action' => 'group_details_updated',
     184                        'item_id' => $group->id,
     185                ) );
     186
     187                $this->assertNotEmpty( $a['activities'] );
     188
     189                $expected = sprintf( __( '%s changed the permalink of the group %s.', 'buddypress' ), bp_core_get_userlink( $u ),  '<a href="' . bp_get_group_permalink( $new_group_details ) . '">' . $group->name . '</a>' );
     190                $this->assertSame( $expected, $a['activities'][0]->action );
     191
     192                $this->set_current_user( $old_user );
     193        }
     194
     195        /**
     196         * @group activity_action
     197         * @group bp_groups_format_activity_action_group_details_updated
     198         */
    142199        public function test_bp_groups_format_activity_action_group_details_updated_with_updated_name_and_description() {
    143200                $old_user = get_current_user_id();
    144201                $u = $this->factory->user->create();
    145202                $this->set_current_user( $u );
    146203
    147204                $group = $this->factory->group->create_and_get();
    148                 groups_edit_base_group_details( $group->id, 'Foo', 'Bar', true );
     205                groups_edit_base_group_details( array(
     206                        'group_id'       => $group->id,
     207                        'name'           => 'Foo',
     208                        'slug'           => $group->slug,
     209                        'description'    => 'Bar',
     210                        'notify_members' => true,
     211                ) );
    149212
    150213                $a = bp_activity_get( array(
    151214                        'component' => buddypress()->groups->id,
  • tests/phpunit/testcases/groups/functions.php

    diff --git tests/phpunit/testcases/groups/functions.php tests/phpunit/testcases/groups/functions.php
    index 4a4c8ba..659a52a 100644
    Bar!'; 
    711711
    712712                $this->assertEquals( $g1, $group->id );
    713713        }
     714
     715        /**
     716         * @expectedDeprecated groups_edit_base_group_details
     717         * @group groups_edit_base_group_details
     718         */
     719        public function test_groups_edit_base_group_details_test_backcompat_arguments() {
     720                $g1 = $this->factory->group->create();
     721                $name = 'Great Scott';
     722                $description = 'A must-see in time for the holidays!';
     723                groups_edit_base_group_details( $g1, $name, $description, false );
     724
     725                $expected = array(
     726                        'id'          => $g1,
     727                        'name'        => $name,
     728                        'description' => $description
     729                );
     730                $updated_group_object = groups_get_group( $g1 );
     731                $updated = array(
     732                        'id'          => $updated_group_object->id,
     733                        'name'        => $updated_group_object->name,
     734                        'description' => $updated_group_object->description
     735                );
     736
     737                $this->assertEqualSets( $expected, $updated );
     738        }
     739
     740        /**
     741         * @group groups_edit_base_group_details
     742         */
     743        public function test_groups_edit_base_group_details_test_new_arguments() {
     744                $g1 = $this->factory->group->create();
     745                $name = 'Great Scott';
     746                $slug = 'what-about-it';
     747                $description = 'A must-see in time for the holidays!';
     748                groups_edit_base_group_details( array(
     749                                'group_id'       => $g1,
     750                                'name'           => $name,
     751                                'slug'           => $slug,
     752                                'description'    => $description,
     753                                'notify_members' => false,
     754                ) );
     755
     756                $expected = array(
     757                        'id'          => $g1,
     758                        'slug'        => $slug,
     759                        'name'        => $name,
     760                        'description' => $description
     761                );
     762                $updated_group_object = groups_get_group( $g1 );
     763                $updated = array(
     764                        'id'          => $updated_group_object->id,
     765                        'slug'        => $updated_group_object->slug,
     766                        'name'        => $updated_group_object->name,
     767                        'description' => $updated_group_object->description
     768                );
     769
     770                $this->assertEqualSets( $expected, $updated );
     771        }
     772
     773        /**
     774         * @group groups_edit_base_group_details
     775         */
     776        public function test_groups_edit_base_group_details_avoid_slug_collisions() {
     777                $slug = 'circe';
     778                $g1 = $this->factory->group->create( array( 'slug' => $slug ) );
     779                $g2 = $this->factory->group->create( array( 'slug' => 'loom' ) );
     780
     781                // Attempt to use a duplicate slug.
     782                groups_edit_base_group_details( array(
     783                                'group_id'       => $g2,
     784                                'slug'           => $slug,
     785                ) );
     786
     787                $updated_group_object = groups_get_group( $g2 );
     788
     789                $this->assertNotEquals( $slug, $updated_group_object->slug );
     790        }
     791
     792        /**
     793         * @group groups_edit_base_group_details
     794         */
     795        public function test_groups_edit_base_group_details_slug_no_change() {
     796                $slug = 'circe';
     797                $g1 = $this->factory->group->create( array( 'slug' => $slug ) );
     798
     799                // Make sure the slug doesn't get incremented when there's no change.
     800                groups_edit_base_group_details( array(
     801                                'group_id'       => $g1,
     802                                'slug'           => $slug,
     803                ) );
     804
     805                $updated_group_object = groups_get_group( $g1 );
     806
     807                $this->assertEquals( $slug, $updated_group_object->slug );
     808        }
     809
     810        /**
     811         * @group groups_edit_base_group_details
     812         */
     813        public function test_groups_edit_base_group_details_slug_null_value() {
     814                $slug = 'circe';
     815                $g1 = $this->factory->group->create( array( 'slug' => $slug ) );
     816
     817                // Make sure the slug doesn't get changed when null is passed.
     818                groups_edit_base_group_details( array(
     819                                'group_id'       => $g1,
     820                                'slug'           => null,
     821                ) );
     822
     823                $updated_group_object = groups_get_group( $g1 );
     824
     825                $this->assertEquals( $slug, $updated_group_object->slug );
     826        }
    714827}
  • tests/phpunit/testcases/routing/groups.php

    diff --git tests/phpunit/testcases/routing/groups.php tests/phpunit/testcases/routing/groups.php
    index f4cbb5f..b89c39f 100644
    class BP_Tests_Routing_Groups extends BP_UnitTestCase { 
    6363                $this->go_to( bp_get_members_directory_permalink() . 'type/foo/' );
    6464                $this->assertTrue( is_404() );
    6565        }
     66
     67        /**
     68         * @group group_previous_slug
     69         */
     70        public function test_group_previous_slug_current_slug_should_resolve() {
     71                $g1 = $this->factory->group->create( array(
     72                        'slug' => 'george',
     73                ) );
     74                groups_edit_base_group_details( array(
     75                        'group_id' => $g1,
     76                        'slug'     => 'ralph',
     77                ) );
     78
     79                $this->go_to( bp_get_groups_directory_permalink() . 'ralph' );
     80
     81                $this->assertEquals( $g1, bp_get_current_group_id() );
     82        }
     83
     84        /**
     85         * @group group_previous_slug
     86         */
     87        public function test_group_previous_slug_should_resolve() {
     88                $g1 = $this->factory->group->create( array(
     89                        'slug' => 'george',
     90                ) );
     91
     92                groups_edit_base_group_details( array(
     93                        'group_id'       => $g1,
     94                        'slug'           => 'sam!',
     95                        'notify_members' => false,
     96                ) );
     97                $this->go_to( bp_get_groups_directory_permalink() . 'george' );
     98
     99                $this->assertEquals( $g1, bp_get_current_group_id() );
     100        }
     101
     102        /**
     103         * @group group_previous_slug
     104         */
     105        public function test_group_previous_slug_most_recent_takes_precedence() {
     106                $g1 = $this->factory->group->create( array(
     107                        'slug' => 'george',
     108                ) );
     109                groups_edit_base_group_details( array(
     110                        'group_id'       => $g1,
     111                        'slug'           => 'ralph',
     112                        'notify_members' => false,
     113                ) );
     114                $g2 = $this->factory->group->create( array(
     115                        'slug' => 'george',
     116                ) );
     117                groups_edit_base_group_details( array(
     118                        'group_id'       => $g2,
     119                        'slug'           => 'sam',
     120                        'notify_members' => false,
     121                ) );
     122
     123                $this->go_to( bp_get_groups_directory_permalink() . 'george' );
     124                $this->assertEquals( $g2, bp_get_current_group_id() );
     125        }
     126
    66127}