[ Index ] |
PHP Cross Reference of BuddyPress |
[Summary view] [Print] [Text view]
1 <?php 2 3 /** 4 * @group core 5 * @group BP_User_Query 6 */ 7 class BP_Tests_BP_User_Query_TestCases extends BP_UnitTestCase { 8 /** 9 * Checks that user_id returns friends 10 */ 11 public function test_bp_user_query_friends() { 12 $u1 = self::factory()->user->create(); 13 $u2 = self::factory()->user->create(); 14 $u3 = self::factory()->user->create(); 15 friends_add_friend( $u1, $u2, true ); 16 17 $q = new BP_User_Query( array( 18 'user_id' => $u2, 19 ) ); 20 21 $friends = is_array( $q->results ) ? array_values( $q->results ) : array(); 22 $friend_ids = wp_list_pluck( $friends, 'ID' ); 23 $this->assertEquals( $friend_ids, array( $u1 ) ); 24 } 25 26 /** 27 * @ticket BP4938 28 */ 29 public function test_bp_user_query_friends_with_include() { 30 $u1 = self::factory()->user->create(); 31 $u2 = self::factory()->user->create(); 32 $u3 = self::factory()->user->create(); 33 $u4 = self::factory()->user->create(); 34 friends_add_friend( $u1, $u2, true ); 35 friends_add_friend( $u1, $u3, true ); 36 37 $q = new BP_User_Query( array( 38 'user_id' => $u1, 39 40 // Represents an independent filter passed by a plugin 41 // u4 is not a friend of u1 and should not be returned 42 'include' => array( $u2, $u4 ), 43 ) ); 44 45 $friends = is_array( $q->results ) ? array_values( $q->results ) : array(); 46 $friend_ids = wp_list_pluck( $friends, 'ID' ); 47 $this->assertEquals( $friend_ids, array( $u2 ) ); 48 } 49 50 public function test_bp_user_query_friends_with_include_but_zero_friends() { 51 $u1 = self::factory()->user->create(); 52 $u2 = self::factory()->user->create(); 53 $u3 = self::factory()->user->create(); 54 $u4 = self::factory()->user->create(); 55 56 $q = new BP_User_Query( array( 57 'user_id' => $u1, 58 59 // Represents an independent filter passed by a plugin 60 // u4 is not a friend of u1 and should not be returned 61 'include' => array( $u2, $u4 ), 62 ) ); 63 64 $friends = is_array( $q->results ) ? array_values( $q->results ) : array(); 65 $friend_ids = wp_list_pluck( $friends, 'ID' ); 66 $this->assertEquals( $friend_ids, array() ); 67 } 68 69 /** 70 * @ticket BP7248 71 */ 72 public function test_include_array_contaning_only_0_should_result_in_no_results_query() { 73 $q = new BP_User_Query( array( 74 'include' => array( 0 ), 75 ) ); 76 77 $this->assertContains( '0 = 1', $q->uid_clauses['where'] ); 78 } 79 80 /** 81 * @ticket BP7248 82 */ 83 public function test_include_array_contaning_0_but_also_real_IDs_should_not_result_in_no_results_query() { 84 $q = new BP_User_Query( array( 85 'include' => array( 0, 1 ), 86 ) ); 87 88 $this->assertNotContains( '0 = 1', $q->uid_clauses['where'] ); 89 } 90 91 /** 92 * @group user_ids 93 */ 94 public function test_bp_user_query_user_ids_with_invalid_user_id() { 95 $now = time(); 96 $u1 = self::factory()->user->create(); 97 $u2 = self::factory()->user->create(); 98 99 // invalid user ID 100 $u3 = $u2 + 1; 101 102 $old_user = get_current_user_id(); 103 $this->set_current_user( $u1 ); 104 105 // pass 'user_ids' to user query to trigger this bug 106 $q = new BP_User_Query( array( 107 'user_ids' => array( $u2, $u3 ) 108 ) ); 109 110 // $q->user_ids property should now not contain invalid user IDs 111 $this->assertNotContains( $u3, $q->user_ids ); 112 113 // clean up 114 $this->set_current_user( $old_user ); 115 } 116 117 public function test_bp_user_query_sort_by_popular() { 118 $u1 = self::factory()->user->create(); 119 $u2 = self::factory()->user->create(); 120 $u3 = self::factory()->user->create(); 121 $u4 = self::factory()->user->create(); 122 123 bp_update_user_meta( $u1, bp_get_user_meta_key( 'total_friend_count' ), '5' ); 124 bp_update_user_meta( $u2, bp_get_user_meta_key( 'total_friend_count' ), '90' ); 125 bp_update_user_meta( $u3, bp_get_user_meta_key( 'total_friend_count' ), '101' ); 126 bp_update_user_meta( $u4, bp_get_user_meta_key( 'total_friend_count' ), '3002' ); 127 128 $q = new BP_User_Query( array( 129 'type' => 'popular', 130 ) ); 131 132 $users = is_array( $q->results ) ? array_values( $q->results ) : array(); 133 $user_ids = wp_parse_id_list( wp_list_pluck( $users, 'ID' ) ); 134 135 $expected = array( $u4, $u3, $u2, $u1 ); 136 $this->assertEquals( $expected, $user_ids ); 137 } 138 139 /** 140 * @group online 141 */ 142 public function test_bp_user_query_type_online() { 143 $now = time(); 144 $u1 = self::factory()->user->create( array( 145 'last_activity' => date( 'Y-m-d H:i:s', $now ), 146 ) ); 147 $u2 = self::factory()->user->create( array( 148 'last_activity' => date( 'Y-m-d H:i:s', $now - 60*13 ), 149 ) ); 150 $u3 = self::factory()->user->create( array( 151 'last_activity' => date( 'Y-m-d H:i:s', $now - 60*16 ), 152 ) ); 153 154 $q = new BP_User_Query( array( 155 'type' => 'online', 156 ) ); 157 158 $users = is_array( $q->results ) ? array_values( $q->results ) : array(); 159 $user_ids = wp_parse_id_list( wp_list_pluck( $users, 'ID' ) ); 160 $this->assertEquals( array( $u1, $u2 ), $user_ids ); 161 } 162 163 /** 164 * @group online 165 */ 166 public function test_bp_user_query_type_online_five_minute_interval() { 167 $now = time(); 168 $u1 = self::factory()->user->create( array( 169 'last_activity' => date( 'Y-m-d H:i:s', $now ), 170 ) ); 171 $u2 = self::factory()->user->create( array( 172 'last_activity' => date( 'Y-m-d H:i:s', $now - 60*4 ), 173 ) ); 174 $u3 = self::factory()->user->create( array( 175 'last_activity' => date( 'Y-m-d H:i:s', $now - 60*6 ), 176 ) ); 177 178 add_filter( 'bp_user_query_online_interval', function() { return 5; } ); 179 180 $q = new BP_User_Query( array( 181 'type' => 'online', 182 ) ); 183 184 $users = is_array( $q->results ) ? array_values( $q->results ) : array(); 185 $user_ids = wp_parse_id_list( wp_list_pluck( $users, 'ID' ) ); 186 $this->assertEquals( array( $u1, $u2 ), $user_ids ); 187 } 188 189 190 public function test_bp_user_query_search_with_apostrophe() { 191 // Apostrophe. Search_terms must escaped to mimic POST payload 192 $user_id = self::factory()->user->create(); 193 xprofile_set_field_data( 1, $user_id, "Foo'Bar" ); 194 $q = new BP_User_Query( array( 'search_terms' => "oo\'Ba", ) ); 195 196 $found_user_id = null; 197 if ( ! empty( $q->results ) ) { 198 $found_user = array_pop( $q->results ); 199 $found_user_id = $found_user->ID; 200 } 201 202 $this->assertEquals( $user_id, $found_user_id ); 203 } 204 205 public function test_bp_user_query_search_with_percent_sign() { 206 207 // LIKE special character: % 208 $user_id = self::factory()->user->create(); 209 xprofile_set_field_data( 1, $user_id, "Foo%Bar" ); 210 $q = new BP_User_Query( array( 'search_terms' => "oo%Bar", ) ); 211 212 $found_user_id = null; 213 if ( ! empty( $q->results ) ) { 214 $found_user = array_pop( $q->results ); 215 $found_user_id = $found_user->ID; 216 } 217 218 $this->assertEquals( $user_id, $found_user_id ); 219 220 } 221 222 public function test_bp_user_query_search_with_underscore() { 223 224 // LIKE special character: _ 225 $user_id = self::factory()->user->create(); 226 xprofile_set_field_data( 1, $user_id, "Foo_Bar" ); 227 $q = new BP_User_Query( array( 'search_terms' => "oo_Bar", ) ); 228 229 $found_user_id = null; 230 if ( ! empty( $q->results ) ) { 231 $found_user = array_pop( $q->results ); 232 $found_user_id = $found_user->ID; 233 } 234 235 $this->assertEquals( $user_id, $found_user_id ); 236 } 237 238 public function test_bp_user_query_search_with_ampersand_sign() { 239 240 // LIKE special character: & 241 $user_id = self::factory()->user->create(); 242 xprofile_set_field_data( 1, $user_id, "a&mpersand" ); 243 $q = new BP_User_Query( array( 'search_terms' => "a&m", ) ); 244 245 $found_user_id = null; 246 if ( ! empty( $q->results ) ) { 247 $found_user = array_pop( $q->results ); 248 $found_user_id = $found_user->ID; 249 } 250 251 $this->assertEquals( $user_id, $found_user_id ); 252 253 } 254 255 /** 256 * @group search_terms 257 */ 258 public function test_bp_user_query_search_core_fields() { 259 $user_id = self::factory()->user->create( array( 260 'user_login' => 'foo', 261 ) ); 262 xprofile_set_field_data( 1, $user_id, "Bar" ); 263 $q = new BP_User_Query( array( 'search_terms' => 'foo', ) ); 264 265 $found_user_id = null; 266 if ( ! empty( $q->results ) ) { 267 $found_user = array_pop( $q->results ); 268 $found_user_id = $found_user->ID; 269 } 270 271 $this->assertEquals( $user_id, $found_user_id ); 272 } 273 274 public function test_bp_user_query_search_wildcards() { 275 $u1 = self::factory()->user->create( array( 276 'user_login' => 'xfoo', 277 ) ); 278 xprofile_set_field_data( 1, $u1, "Bar" ); 279 $q1 = new BP_User_Query( array( 'search_terms' => 'foo', 'search_wildcard' => 'left' ) ); 280 281 $u2 = self::factory()->user->create( array( 282 'user_login' => 'foox', 283 ) ); 284 xprofile_set_field_data( 1, $u2, "Bar" ); 285 $q2 = new BP_User_Query( array( 'search_terms' => 'foo', 'search_wildcard' => 'right' ) ); 286 287 $u3 = self::factory()->user->create( array( 288 'user_login' => 'xfoox', 289 ) ); 290 xprofile_set_field_data( 1, $u3, "Bar" ); 291 $q3 = new BP_User_Query( array( 'search_terms' => 'foo', 'search_wildcard' => 'both' ) ); 292 293 $this->assertNotEmpty( $q1->results ); 294 $q1 = array_pop( $q1->results ); 295 $this->assertEquals( $u1, $q1->ID ); 296 297 $this->assertNotEmpty( $q2->results ); 298 $q2 = array_pop( $q2->results ); 299 $this->assertEquals( $u2, $q2->ID ); 300 301 $this->assertNotEmpty( $q3->results ); 302 foreach ( $q3->results as $user ) { 303 $this->assertTrue( in_array( $user->ID, array( $u1, $u2, $u3 ) ) ); 304 } 305 } 306 307 /** 308 * @group exclude 309 */ 310 public function test_bp_user_query_with_exclude() { 311 // Grab list of existing users who should also be excluded 312 global $wpdb; 313 $existing_users = $wpdb->get_col( "SELECT ID FROM {$wpdb->users}" ); 314 315 $u1 = self::factory()->user->create(); 316 $u2 = self::factory()->user->create(); 317 318 $exclude = array_merge( array( $u1 ), $existing_users ); 319 $q = new BP_User_Query( array( 'exclude' => $exclude, ) ); 320 321 $found_user_ids = null; 322 if ( ! empty( $q->results ) ) { 323 $found_user_ids = array_values( wp_parse_id_list( wp_list_pluck( $q->results, 'ID' ) ) ); 324 } 325 326 $this->assertEquals( array( $u2 ), $found_user_ids ); 327 } 328 329 /** 330 * @group exclude 331 * @ticket BP8040 332 */ 333 public function test_bp_user_query_should_ignore_empty_exclude() { 334 $u1 = self::factory()->user->create(); 335 $u2 = self::factory()->user->create(); 336 337 $q = new BP_User_Query( array( 'exclude' => array() ) ); 338 339 $found_user_ids = null; 340 if ( ! empty( $q->results ) ) { 341 $found_user_ids = array_values( wp_parse_id_list( wp_list_pluck( $q->results, 'ID' ) ) ); 342 } 343 344 $this->assertContains( $u1, $found_user_ids ); 345 $this->assertContains( $u2, $found_user_ids ); 346 } 347 /** 348 * @group type 349 * @group spam 350 */ 351 public function test_bp_user_query_type_alphabetical_spam_xprofileon() { 352 if ( is_multisite() ) { 353 $this->markTestSkipped(); 354 } 355 356 // Make sure xprofile is on 357 $xprofile_toggle = isset( buddypress()->active_components['xprofile'] ); 358 buddypress()->active_components['xprofile'] = 1; 359 add_filter( 'bp_disable_profile_sync', '__return_false' ); 360 361 $u1 = self::factory()->user->create(); 362 $u2 = self::factory()->user->create(); 363 364 global $wpdb; 365 bp_core_process_spammer_status( $u1, 'spam' ); 366 367 $q = new BP_User_Query( array( 'type' => 'alphabetical', ) ); 368 369 // Restore xprofile setting 370 if ( $xprofile_toggle ) { 371 buddypress()->active_components['xprofile'] = 1; 372 } else { 373 unset( buddypress()->active_components['xprofile'] ); 374 } 375 remove_filter( 'bp_disable_profile_sync', '__return_false' ); 376 377 $found_user_ids = null; 378 379 if ( ! empty( $q->results ) ) { 380 $found_user_ids = array_values( wp_parse_id_list( wp_list_pluck( $q->results, 'ID' ) ) ); 381 } 382 383 // Do a assertNotContains because there are weird issues with user #1 as created by WP 384 $this->assertNotContains( $u1, $found_user_ids ); 385 } 386 387 /** 388 * @group type 389 * @group spam 390 */ 391 public function test_bp_user_query_type_alphabetical_spam_xprofileoff() { 392 $u1 = self::factory()->user->create(); 393 $u2 = self::factory()->user->create(); 394 395 // Make sure xprofile and profile sync are off 396 $xprofile_toggle = isset( buddypress()->active_components['xprofile'] ); 397 buddypress()->active_components['xprofile'] = 0; 398 add_filter( 'bp_disable_profile_sync', '__return_false' ); 399 400 bp_core_process_spammer_status( $u1, 'spam' ); 401 402 $q = new BP_User_Query( array( 'type' => 'alphabetical', ) ); 403 404 // Restore xprofile setting 405 if ( $xprofile_toggle ) { 406 buddypress()->active_components['xprofile'] = 1; 407 } else { 408 unset( buddypress()->active_components['xprofile'] ); 409 } 410 remove_filter( 'bp_disable_profile_sync', '__return_false' ); 411 412 $found_user_ids = null; 413 414 if ( ! empty( $q->results ) ) { 415 $found_user_ids = array_values( wp_parse_id_list( wp_list_pluck( $q->results, 'ID' ) ) ); 416 } 417 418 // Do a assertNotContains because there are weird issues with user #1 as created by WP 419 $this->assertNotContains( $u1, $found_user_ids ); 420 } 421 422 /** 423 * @group meta 424 * @group BP5904 425 */ 426 public function test_bp_user_query_with_user_meta_argument() { 427 $u1 = self::factory()->user->create(); 428 $u2 = self::factory()->user->create(); 429 430 bp_update_user_meta( $u2, 'foo', 'bar' ); 431 432 $q = new BP_User_Query( array( 433 'meta_key' => 'foo', 434 'meta_value' => 'bar', 435 ) ); 436 437 $found_user_ids = array_values( wp_parse_id_list( wp_list_pluck( $q->results, 'ID' ) ) ); 438 439 // Do a assertNotContains because there are weird issues with user #1 as created by WP 440 $this->assertNotContains( $u1, $found_user_ids ); 441 $this->assertEquals( array( $u2 ), $found_user_ids ); 442 } 443 444 /** 445 * @group meta 446 * @group BP5904 447 */ 448 public function test_bp_user_query_with_user_meta_argument_no_user() { 449 $u1 = self::factory()->user->create(); 450 $u2 = self::factory()->user->create(); 451 452 $q = new BP_User_Query( array( 453 'meta_key' => 'foo', 454 'meta_value' => 'bar', 455 ) ); 456 457 $found_user_ids = array_values( wp_parse_id_list( wp_list_pluck( $q->results, 'ID' ) ) ); 458 459 $this->assertEmpty( $found_user_ids ); 460 } 461 462 /** 463 * @group member_types 464 */ 465 public function test_member_type_single_value() { 466 bp_register_member_type( 'foo' ); 467 bp_register_member_type( 'bar' ); 468 $users = self::factory()->user->create_many( 3 ); 469 bp_set_member_type( $users[0], 'foo' ); 470 bp_set_member_type( $users[1], 'bar' ); 471 472 $q = new BP_User_Query( array( 473 'member_type' => 'bar', 474 ) ); 475 476 $found = array_values( wp_list_pluck( $q->results, 'ID' ) ); 477 $this->assertEquals( array( $users[1] ), $found ); 478 } 479 480 /** 481 * @group member_types 482 */ 483 public function test_member_type_array_with_single_value() { 484 bp_register_member_type( 'foo' ); 485 bp_register_member_type( 'bar' ); 486 $users = self::factory()->user->create_many( 3 ); 487 bp_set_member_type( $users[0], 'foo' ); 488 bp_set_member_type( $users[1], 'bar' ); 489 490 $q = new BP_User_Query( array( 491 'member_type' => array( 'bar' ), 492 ) ); 493 494 $found = array_values( wp_list_pluck( $q->results, 'ID' ) ); 495 $this->assertEquals( array( $users[1] ), $found ); 496 } 497 498 /** 499 * @group member_types 500 */ 501 public function test_member_type_comma_separated_values() { 502 bp_register_member_type( 'foo' ); 503 bp_register_member_type( 'bar' ); 504 $users = self::factory()->user->create_many( 3 ); 505 bp_set_member_type( $users[0], 'foo' ); 506 bp_set_member_type( $users[1], 'bar' ); 507 508 $q = new BP_User_Query( array( 509 'member_type' => 'foo, bar', 510 ) ); 511 512 $found = array_values( wp_list_pluck( $q->results, 'ID' ) ); 513 $this->assertEqualSets( array( $users[0], $users[1] ), $found ); 514 } 515 516 /** 517 * @group member_types 518 */ 519 public function test_member_type_array_with_multiple_values() { 520 bp_register_member_type( 'foo' ); 521 bp_register_member_type( 'bar' ); 522 $users = self::factory()->user->create_many( 3 ); 523 bp_set_member_type( $users[0], 'foo' ); 524 bp_set_member_type( $users[1], 'bar' ); 525 526 $q = new BP_User_Query( array( 527 'member_type' => array( 'foo', 'bar' ), 528 ) ); 529 530 $found = array_values( wp_list_pluck( $q->results, 'ID' ) ); 531 $this->assertEqualSets( array( $users[0], $users[1] ), $found ); 532 } 533 534 /** 535 * @group member_types 536 */ 537 public function test_member_type_comma_separated_values_should_discard_non_existent_taxonomies() { 538 bp_register_member_type( 'foo' ); 539 bp_register_member_type( 'bar' ); 540 $users = self::factory()->user->create_many( 3 ); 541 bp_set_member_type( $users[0], 'foo' ); 542 bp_set_member_type( $users[1], 'bar' ); 543 544 $q = new BP_User_Query( array( 545 'member_type' => 'foo, baz', 546 ) ); 547 548 $found = array_values( wp_list_pluck( $q->results, 'ID' ) ); 549 $this->assertEqualSets( array( $users[0] ), $found ); 550 } 551 552 /** 553 * @group member_types 554 * @ticket BP6334 555 */ 556 public function test_should_return_no_results_when_no_users_match_the_specified_member_type() { 557 bp_register_member_type( 'foo' ); 558 $users = self::factory()->user->create_many( 3 ); 559 560 $q = new BP_User_Query( array( 561 'member_type' => 'foo, baz', 562 ) ); 563 564 $this->assertEmpty( $q->results ); 565 } 566 567 /** 568 * @group member_types 569 */ 570 public function test_member_type__in_single_value() { 571 bp_register_member_type( 'foo' ); 572 bp_register_member_type( 'bar' ); 573 $users = self::factory()->user->create_many( 3 ); 574 bp_set_member_type( $users[0], 'foo' ); 575 bp_set_member_type( $users[1], 'bar' ); 576 577 $q = new BP_User_Query( array( 578 'member_type__in' => 'bar', 579 ) ); 580 581 $found = array_values( wp_list_pluck( $q->results, 'ID' ) ); 582 $this->assertEquals( array( $users[1] ), $found ); 583 } 584 585 /** 586 * @group member_types 587 */ 588 public function test_member_type__in_array_with_single_value() { 589 bp_register_member_type( 'foo' ); 590 bp_register_member_type( 'bar' ); 591 $users = self::factory()->user->create_many( 3 ); 592 bp_set_member_type( $users[0], 'foo' ); 593 bp_set_member_type( $users[1], 'bar' ); 594 595 $q = new BP_User_Query( array( 596 'member_type__in' => array( 'bar' ), 597 ) ); 598 599 $found = array_values( wp_list_pluck( $q->results, 'ID' ) ); 600 $this->assertEquals( array( $users[1] ), $found ); 601 } 602 603 /** 604 * @group member_types 605 */ 606 public function test_member_type__in_comma_separated_values() { 607 bp_register_member_type( 'foo' ); 608 bp_register_member_type( 'bar' ); 609 $users = self::factory()->user->create_many( 3 ); 610 bp_set_member_type( $users[0], 'foo' ); 611 bp_set_member_type( $users[1], 'bar' ); 612 613 $q = new BP_User_Query( array( 614 'member_type__in' => 'foo, bar', 615 ) ); 616 617 $found = array_values( wp_list_pluck( $q->results, 'ID' ) ); 618 $this->assertEqualSets( array( $users[0], $users[1] ), $found ); 619 } 620 621 /** 622 * @group member_types 623 */ 624 public function test_member_type__in_array_with_multiple_values() { 625 bp_register_member_type( 'foo' ); 626 bp_register_member_type( 'bar' ); 627 $users = self::factory()->user->create_many( 3 ); 628 bp_set_member_type( $users[0], 'foo' ); 629 bp_set_member_type( $users[1], 'bar' ); 630 631 $q = new BP_User_Query( array( 632 'member_type__in' => array( 'foo', 'bar' ), 633 ) ); 634 635 $found = array_values( wp_list_pluck( $q->results, 'ID' ) ); 636 $this->assertEqualSets( array( $users[0], $users[1] ), $found ); 637 } 638 639 /** 640 * @group member_types 641 */ 642 public function test_member_type__in_comma_separated_values_should_discard_non_existent_taxonomies() { 643 bp_register_member_type( 'foo' ); 644 bp_register_member_type( 'bar' ); 645 $users = self::factory()->user->create_many( 3 ); 646 bp_set_member_type( $users[0], 'foo' ); 647 bp_set_member_type( $users[1], 'bar' ); 648 649 $q = new BP_User_Query( array( 650 'member_type__in' => 'foo, baz', 651 ) ); 652 653 $found = array_values( wp_list_pluck( $q->results, 'ID' ) ); 654 $this->assertEqualSets( array( $users[0] ), $found ); 655 } 656 657 /** 658 * @group member_types 659 */ 660 public function test_should_return_no_results_when_no_users_match_the_specified_member_type__in() { 661 bp_register_member_type( 'foo' ); 662 $users = self::factory()->user->create_many( 3 ); 663 664 $q = new BP_User_Query( array( 665 'member_type__in' => 'foo, baz', 666 ) ); 667 668 $this->assertEmpty( $q->results ); 669 } 670 671 /** 672 * @group member_types 673 */ 674 public function test_member_type_should_take_precedence_over_member_type__in() { 675 bp_register_member_type( 'foo' ); 676 bp_register_member_type( 'bar' ); 677 $users = self::factory()->user->create_many( 3 ); 678 bp_set_member_type( $users[0], 'foo' ); 679 bp_set_member_type( $users[1], 'bar' ); 680 681 $q = new BP_User_Query( array( 682 'member_type__in' => 'foo', 683 'member_type' => 'bar' 684 ) ); 685 686 $found = array_values( wp_list_pluck( $q->results, 'ID' ) ); 687 $this->assertEqualSets( array( $users[1] ), $found ); 688 } 689 690 /** 691 * @group member_types 692 */ 693 public function test_member_type__not_in_returns_members_from_other_types_and_members_with_no_types() { 694 bp_register_member_type( 'foo' ); 695 bp_register_member_type( 'bar' ); 696 $users = self::factory()->user->create_many( 3 ); 697 bp_set_member_type( $users[0], 'foo' ); 698 bp_set_member_type( $users[1], 'bar' ); 699 700 $q = new BP_User_Query( array( 701 'member_type__not_in' => 'foo', 702 ) ); 703 704 $found = array_values( wp_list_pluck( $q->results, 'ID' ) ); 705 $this->assertEqualSets( array( $users[1], $users[2] ), $found ); 706 } 707 708 /** 709 * @group member_types 710 */ 711 public function test_should_return_no_results_when_all_users_match_the_specified_member_type__not_in() { 712 bp_register_member_type( 'foo' ); 713 $users = self::factory()->user->create_many( 3 ); 714 bp_set_member_type( $users[0], 'foo' ); 715 bp_set_member_type( $users[1], 'foo' ); 716 bp_set_member_type( $users[2], 'foo' ); 717 718 $q = new BP_User_Query( array( 719 'member_type__not_in' => 'foo', 720 ) ); 721 722 $this->assertEmpty( $q->results ); 723 } 724 725 /** 726 * @group member_types 727 */ 728 public function test_member_type__not_in_takes_precedence_over_member_type() { 729 bp_register_member_type( 'foo' ); 730 $users = self::factory()->user->create_many( 3 ); 731 bp_set_member_type( $users[0], 'foo' ); 732 bp_set_member_type( $users[1], 'foo' ); 733 bp_set_member_type( $users[2], 'foo' ); 734 735 $q = new BP_User_Query( array( 736 'member_type__not_in' => 'foo', 737 'member_type' => 'foo' 738 ) ); 739 740 $this->assertEmpty( $q->results ); 741 } 742 743 /** 744 * @group member_types 745 */ 746 public function test_member_type__not_in_takes_precedence_over_member_type__in() { 747 bp_register_member_type( 'foo' ); 748 $users = self::factory()->user->create_many( 3 ); 749 bp_set_member_type( $users[0], 'foo' ); 750 bp_set_member_type( $users[1], 'foo' ); 751 bp_set_member_type( $users[2], 'foo' ); 752 753 $q = new BP_User_Query( array( 754 'member_type__not_in' => 'foo', 755 'member_type__in' => 'foo' 756 ) ); 757 758 $this->assertEmpty( $q->results ); 759 } 760 761 /** 762 * @group cache 763 * @group member_types 764 */ 765 public function test_member_type_should_be_prefetched_into_cache_during_user_query() { 766 bp_register_member_type( 'foo' ); 767 bp_register_member_type( 'bar' ); 768 $users = self::factory()->user->create_many( 4 ); 769 bp_set_member_type( $users[0], 'foo' ); 770 bp_set_member_type( $users[1], 'bar' ); 771 bp_set_member_type( $users[2], 'foo' ); 772 773 $q = new BP_User_Query( array( 774 'include' => $users, 775 ) ); 776 777 $this->assertSame( array( 'foo' ), wp_cache_get( $users[0], 'bp_member_member_type' ) ); 778 $this->assertSame( array( 'bar' ), wp_cache_get( $users[1], 'bp_member_member_type' ) ); 779 $this->assertSame( array( 'foo' ), wp_cache_get( $users[2], 'bp_member_member_type' ) ); 780 $this->assertSame( '', wp_cache_get( $users[3], 'bp_member_member_type' ) ); 781 } 782 783 /** 784 * @group date_query 785 */ 786 public function test_date_query_before() { 787 $u1 = self::factory()->user->create( array( 788 'last_activity' => date( 'Y-m-d H:i:s', time() ), 789 ) ); 790 $u2 = self::factory()->user->create( array( 791 'last_activity' => '2008-03-25 17:13:55', 792 ) ); 793 $u3 = self::factory()->user->create( array( 794 'last_activity' => '2010-01-01 12:00', 795 ) ); 796 797 // 'date_query' before test 798 $query = new BP_User_Query( array( 799 'date_query' => array( array( 800 'before' => array( 801 'year' => 2010, 802 'month' => 1, 803 'day' => 1, 804 ), 805 ) ) 806 ) ); 807 808 $this->assertEquals( $u2, $query->user_ids[0] ); 809 } 810 811 /** 812 * @group date_query 813 */ 814 public function test_date_query_range() { 815 $u1 = self::factory()->user->create( array( 816 'last_activity' => date( 'Y-m-d H:i:s', time() ), 817 ) ); 818 $u2 = self::factory()->user->create( array( 819 'last_activity' => '2008-03-25 17:13:55', 820 ) ); 821 $u3 = self::factory()->user->create( array( 822 'last_activity' => '2001-01-01 12:00', 823 ) ); 824 825 // 'date_query' range test 826 $query = new BP_User_Query( array( 827 'date_query' => array( array( 828 'after' => 'January 2nd, 2001', 829 'before' => array( 830 'year' => 2010, 831 'month' => 1, 832 'day' => 1, 833 ), 834 'inclusive' => true, 835 ) ) 836 ) ); 837 838 $this->assertEquals( $u2, $query->user_ids[0] ); 839 } 840 841 /** 842 * @group date_query 843 */ 844 public function test_date_query_after() { 845 $u1 = self::factory()->user->create( array( 846 'last_activity' => date( 'Y-m-d H:i:s', time() ), 847 ) ); 848 $u2 = self::factory()->user->create( array( 849 'last_activity' => '2008-03-25 17:13:55', 850 ) ); 851 $u3 = self::factory()->user->create( array( 852 'last_activity' => '2001-01-01 12:00', 853 ) ); 854 855 // 'date_query' after and relative test 856 $query = new BP_User_Query( array( 857 'date_query' => array( array( 858 'after' => '1 day ago' 859 ) ) 860 ) ); 861 862 $this->assertEquals( $u1, $query->user_ids[0] ); 863 } 864 865 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Dec 22 01:00:54 2024 | Cross-referenced by PHPXref 0.7.1 |