Ticket #6014: 6014.02.diff
File 6014.02.diff, 27.7 KB (added by , 7 years ago) |
---|
-
src/bp-groups/admin/css/admin.css
diff --git a/src/bp-groups/admin/css/admin.css b/src/bp-groups/admin/css/admin.css index c802127..d32bd31 100644
a b body.toplevel_page_bp-groups table.groups th#last_active { 46 46 line-height: 24px; 47 47 color: #666; 48 48 } 49 #bp-groups-permalink { 50 margin-right: 24px; 51 } 49 52 .bp-groups-member-type { 50 53 position: relative; 51 54 } -
src/bp-groups/bp-groups-activity.php
diff --git a/src/bp-groups/bp-groups-activity.php b/src/bp-groups/bp-groups-activity.php index c29a03c..cb7c69c 100644
a b function bp_groups_format_activity_action_group_details_updated( $action, $activ 190 190 } elseif ( ! empty( $changed['description']['old'] ) && ! empty( $changed['description']['new'] ) ) { 191 191 $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'] ) ); 192 192 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 193 196 } 194 197 195 198 /** … … function bp_groups_group_details_updated_add_activity( $group_id, $old_group, $n 461 464 return false; 462 465 } 463 466 464 if ( ! isset( $old_group->name ) || ! isset( $old_group-> description ) ) {467 if ( ! isset( $old_group->name ) || ! isset( $old_group->slug ) || ! isset( $old_group->description ) ) { 465 468 return false; 466 469 } 467 470 … … function bp_groups_group_details_updated_add_activity( $group_id, $old_group, $n 489 492 ); 490 493 } 491 494 495 if ( $group->slug !== $old_group->slug ) { 496 $changed['slug'] = array( 497 'old' => $old_group->slug, 498 'new' => $group->slug, 499 ); 500 } 501 492 502 if ( $group->description !== $old_group->description ) { 493 503 $changed['description'] = array( 494 504 'old' => $old_group->description, -
src/bp-groups/bp-groups-admin.php
diff --git a/src/bp-groups/bp-groups-admin.php b/src/bp-groups/bp-groups-admin.php index 77f13e1..c3cdac9 100644
a b function bp_groups_admin_load() { 236 236 $error = 0; 237 237 $success_new = $error_new = $success_modified = $error_modified = array(); 238 238 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 } 243 249 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; 252 262 } 253 263 254 264 // Enable discussion forum. … … function bp_groups_admin_edit() { 518 528 } 519 529 520 530 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' ); 537 535 } 538 536 539 537 } elseif ( ! empty( $updated ) ) { … … function bp_groups_admin_edit() { 612 610 ?></label> 613 611 <input type="text" name="bp-groups-name" id="bp-groups-name" value="<?php echo esc_attr( stripslashes( $group_name ) ) ?>" /> 614 612 <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> 616 618 </div> 617 619 618 620 <label for="bp-groups-description" class="screen-reader-text"><?php -
src/bp-groups/bp-groups-functions.php
diff --git a/src/bp-groups/bp-groups-functions.php b/src/bp-groups/bp-groups-functions.php index c65af89..1f316b1 100644
a b function groups_create_group( $args = '' ) { 218 218 * 219 219 * @since 1.0.0 220 220 * 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 * } 226 230 * @return bool True on success, false on failure. 227 231 */ 228 function groups_edit_base_group_details( $ group_id, $group_name, $group_desc, $notify_members) {232 function groups_edit_base_group_details( $args = array() ) { 229 233 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'] ) { 231 257 return false; 258 } 232 259 233 $group = groups_get_group( $ group_id);260 $group = groups_get_group( $r['group_id'] ); 234 261 $old_group = clone $group; 235 262 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 } 238 273 239 if ( ! $group->save() )274 if ( ! $group->save() ) { 240 275 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 } 241 289 242 if ( $ notify_members) {290 if ( $r['notify_members'] ) { 243 291 groups_notification_group_updated( $group->id, $old_group ); 244 292 } 245 293 … … function groups_edit_base_group_details( $group_id, $group_name, $group_desc, $n 252 300 * @param BP_Groups_Group $old_group Group object, before being modified. 253 301 * @param bool $notify_members Whether to send an email notification to members about the change. 254 302 */ 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'] ); 256 304 257 305 return true; 258 306 } … … function groups_get_id( $group_slug ) { 428 476 return BP_Groups_Group::group_exists( $group_slug ); 429 477 } 430 478 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 */ 487 function groups_get_id_by_previous_slug( $group_slug ) { 488 return BP_Groups_Group::get_id_by_previous_slug( $group_slug ); 489 } 490 431 491 /** User Actions **************************************************************/ 432 492 433 493 /** -
src/bp-groups/bp-groups-notifications.php
diff --git a/src/bp-groups/bp-groups-notifications.php b/src/bp-groups/bp-groups-notifications.php index fc8a052..5bf44fd 100644
a b function groups_notification_group_updated( $group_id = 0, $old_group = null ) { 44 44 esc_html( $group->description ) 45 45 ); 46 46 } 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 } 47 55 } 48 56 49 57 /** -
src/bp-groups/bp-groups-screens.php
diff --git a/src/bp-groups/bp-groups-screens.php b/src/bp-groups/bp-groups-screens.php index 17e139b..b02419f 100644
a b function groups_screen_group_admin_edit_details() { 839 839 840 840 $group_notify_members = isset( $_POST['group-notify-members'] ) ? (int) $_POST['group-notify-members'] : 0; 841 841 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 ) ) ) { 843 852 bp_core_add_message( __( 'There was an error updating group details. Please try again.', 'buddypress' ), 'error' ); 844 853 } else { 845 854 bp_core_add_message( __( 'Group details were successfully updated.', 'buddypress' ) ); -
src/bp-groups/classes/class-bp-groups-component.php
diff --git a/src/bp-groups/classes/class-bp-groups-component.php b/src/bp-groups/classes/class-bp-groups-component.php index 8515a5b..e271ec0 100644
a b class BP_Groups_Component extends BP_Component { 196 196 /* Single Group Globals **********************************************/ 197 197 198 198 // Are we viewing a single group? 199 if ( bp_is_groups_component() && $group_id = BP_Groups_Group::group_exists( bp_current_action() ) ) { 200 199 if ( bp_is_groups_component() 200 && ( ( $group_id = BP_Groups_Group::group_exists( bp_current_action() ) ) 201 || ( $group_id = BP_Groups_Group::get_id_by_previous_slug( bp_current_action() ) ) ) 202 ) { 201 203 $bp->is_single_item = true; 202 204 203 205 /** -
src/bp-groups/classes/class-bp-groups-group.php
diff --git a/src/bp-groups/classes/class-bp-groups-group.php b/src/bp-groups/classes/class-bp-groups-group.php index bd897d8..029093e 100644
a b class BP_Groups_Group { 645 645 } 646 646 647 647 /** 648 * Get whether a group exists for an old slug. 649 * 650 * @since 2.9.0 651 * 652 * @param string $slug Slug to check. 653 * 654 * @return int|null|false Group ID if found; null if not; false if missing parameters. 655 */ 656 public static function get_id_by_previous_slug( $slug ) { 657 global $wpdb; 658 659 if ( empty( $slug ) ) { 660 return false; 661 } 662 663 $args = array( 664 'meta_query' => array( 665 array( 666 'key' => 'previous_slug', 667 'value' => $slug 668 ), 669 ), 670 'orderby' => 'meta_id', 671 'order' => 'DESC', 672 'per_page' => 1, 673 'page' => 1, 674 'update_meta_cache' => false, 675 'show_hidden' => true, 676 ); 677 $groups = BP_Groups_Group::get( $args ); 678 679 $group_id = null; 680 if ( $groups['groups'] ) { 681 $group_id = current( $groups['groups'] )->id; 682 } 683 684 return $group_id; 685 } 686 687 /** 648 688 * Get IDs of users with outstanding invites to a given group from a specified user. 649 689 * 650 690 * @since 1.6.0 … … class BP_Groups_Group { 1113 1153 $where_conditions['last_activity'] = "gm_last_activity.meta_key = 'last_activity'"; 1114 1154 } 1115 1155 1156 // If Meta ID is the requested order, and there's no meta query, fall back to the default. 1157 if ( 'meta_id' === $orderby && empty( $meta_query_sql['join'] ) ) { 1158 $orderby = 'date_created'; 1159 } 1160 1116 1161 // Sanitize 'order'. 1117 1162 $order = bp_esc_sql_order( $order ); 1118 1163 … … class BP_Groups_Group { 1415 1460 case 'random' : 1416 1461 $order_by_term = 'rand()'; 1417 1462 break; 1463 1464 case 'meta_id' : 1465 $order_by_term = buddypress()->groups->table_name_groupmeta . '.id'; 1466 break; 1418 1467 } 1419 1468 1420 1469 return $order_by_term; -
tests/phpunit/testcases/groups/activity.php
diff --git a/tests/phpunit/testcases/groups/activity.php b/tests/phpunit/testcases/groups/activity.php index 1946326..bfb4087 100644
a b class BP_Tests_Groups_Activity extends BP_UnitTestCase { 55 55 */ 56 56 public function test_bp_groups_format_activity_action_group_details_updated_with_no_change() { 57 57 $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 ) ); 59 65 60 66 $a = bp_activity_get( array( 61 67 'component' => buddypress()->groups->id, … … class BP_Tests_Groups_Activity extends BP_UnitTestCase { 72 78 */ 73 79 public function test_bp_groups_format_activity_action_group_details_updated_with_notify_members_false() { 74 80 $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 ) ); 76 88 77 89 $a = bp_activity_get( array( 78 90 'component' => buddypress()->groups->id, … … class BP_Tests_Groups_Activity extends BP_UnitTestCase { 93 105 $this->set_current_user( $u ); 94 106 95 107 $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 ) ); 97 115 98 116 $a = bp_activity_get( array( 99 117 'component' => buddypress()->groups->id, … … class BP_Tests_Groups_Activity extends BP_UnitTestCase { 119 137 $this->set_current_user( $u ); 120 138 121 139 $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 ) ); 123 147 124 148 $a = bp_activity_get( array( 125 149 'component' => buddypress()->groups->id, … … class BP_Tests_Groups_Activity extends BP_UnitTestCase { 139 163 * @group activity_action 140 164 * @group bp_groups_format_activity_action_group_details_updated 141 165 */ 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 */ 142 199 public function test_bp_groups_format_activity_action_group_details_updated_with_updated_name_and_description() { 143 200 $old_user = get_current_user_id(); 144 201 $u = $this->factory->user->create(); 145 202 $this->set_current_user( $u ); 146 203 147 204 $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 ) ); 149 212 150 213 $a = bp_activity_get( array( 151 214 'component' => buddypress()->groups->id, -
tests/phpunit/testcases/groups/class-bp-groups-group.php
diff --git a/tests/phpunit/testcases/groups/class-bp-groups-group.php b/tests/phpunit/testcases/groups/class-bp-groups-group.php index 0fcc1d5..5178354 100644
a b class BP_Tests_BP_Groups_Group_TestCases extends BP_UnitTestCase { 956 956 $this->assertEquals( _BP_Groups_Group::_convert_orderby_to_order_by_term( 'date_created' ), _BP_Groups_Group::_convert_orderby_to_order_by_term( 'I am a bad boy' ) ); 957 957 } 958 958 959 /** 960 * @group groups_get_orderby_meta_id 961 */ 962 public function test_get_orderby_meta_id() { 963 $g1 = $this->factory->group->create(); 964 $g2 = $this->factory->group->create(); 965 $g3 = $this->factory->group->create(); 966 967 groups_update_groupmeta( $g2, 'orderup', 'sammy' ); 968 groups_update_groupmeta( $g1, 'orderup', 'sammy' ); 969 970 $args = array( 971 'meta_query' => array( 972 array( 973 'key' => 'orderup', 974 'value' => 'sammy' 975 ), 976 ), 977 'orderby' => 'meta_id', 978 'order' => 'ASC', 979 ); 980 $groups = BP_Groups_Group::get( $args ); 981 982 $found = wp_list_pluck( $groups['groups'], 'id' ); 983 $this->assertEquals( array( $g2, $g1 ), $found ); 984 } 985 986 /** 987 * @group groups_get_orderby_meta_id 988 */ 989 public function test_get_orderby_meta_id_invalid_fallback_to_date_created() { 990 $time = time(); 991 $g1 = $this->factory->group->create( array( 992 'date_created' => gmdate( 'Y-m-d H:i:s', $time - 10000 ), 993 ) ); 994 $g2 = $this->factory->group->create( array( 995 'date_created' => gmdate( 'Y-m-d H:i:s', $time - 1000 ), 996 ) ); 997 $g3 = $this->factory->group->create( array( 998 'date_created' => gmdate( 'Y-m-d H:i:s', $time - 100 ), 999 ) ); 1000 1001 $args = array( 1002 'orderby' => 'meta_id', 1003 ); 1004 $groups = BP_Groups_Group::get( $args ); 1005 1006 // Orderby meta_id should be ignored if no meta query is present. 1007 $found = wp_list_pluck( $groups['groups'], 'id' ); 1008 $this->assertEquals( array( $g3, $g2, $g1 ), $found ); 1009 } 1010 959 1011 public function test_filter_user_groups_normal_search() { 960 1012 $g1 = $this->factory->group->create( array( 961 1013 'name' => 'Cool Group', -
tests/phpunit/testcases/groups/functions.php
diff --git a/tests/phpunit/testcases/groups/functions.php b/tests/phpunit/testcases/groups/functions.php index 4a4c8ba..e08ea7c 100644
a b Bar!'; 711 711 712 712 $this->assertEquals( $g1, $group->id ); 713 713 } 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 } 827 828 /** 829 * @group groups_get_id_by_previous_slug 830 */ 831 public function test_groups_get_id_by_previous_slug() { 832 $slug = 'circe'; 833 $g1 = $this->factory->group->create( array( 'slug' => $slug ) ); 834 $g2 = $this->factory->group->create( array( 'slug' => 'loom' ) ); 835 836 groups_edit_base_group_details( array( 837 'group_id' => $g1, 838 'slug' => 'newslug', 839 ) ); 840 841 // Function should return the group ID as an integer. 842 $this->assertSame( $g1, groups_get_id_by_previous_slug( $slug ) ); 843 } 844 845 /** 846 * @group groups_get_id_by_previous_slug 847 */ 848 public function test_groups_get_id_by_previous_slug_null_no_results() { 849 $this->assertNull( groups_get_id_by_previous_slug( 'woohoo' ) ); 850 } 851 714 852 } -
tests/phpunit/testcases/routing/groups.php
diff --git a/tests/phpunit/testcases/routing/groups.php b/tests/phpunit/testcases/routing/groups.php index f4cbb5f..b89c39f 100644
a b class BP_Tests_Routing_Groups extends BP_UnitTestCase { 63 63 $this->go_to( bp_get_members_directory_permalink() . 'type/foo/' ); 64 64 $this->assertTrue( is_404() ); 65 65 } 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 66 127 }