- Timestamp:
- 09/18/2018 03:54:20 AM (2 years ago)
- Location:
- branches/4.9
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/4.9
- Property svn:mergeinfo changed
/trunk merged: 43584-43586,43647
- Property svn:mergeinfo changed
-
branches/4.9/tests/phpunit/tests/rest-api/rest-revisions-controller.php
r43445 r43648 7 7 */ 8 8 9 10 11 9 /** 10 * @group restapi 11 */ 12 12 class WP_Test_REST_Revisions_Controller extends WP_Test_REST_Controller_Testcase { 13 13 protected static $post_id; … … 31 31 wp_update_post( array( 'post_content' => 'This content is better.', 'ID' => self::$post_id ) ); 32 32 wp_update_post( array( 'post_content' => 'This content is marvelous.', 'ID' => self::$post_id ) ); 33 wp_update_post( 34 array( 35 'post_content' => 'This content is fantastic.', 36 'ID' => self::$post_id, 37 ) 38 ); 33 39 wp_set_current_user( 0 ); 34 40 } … … 46 52 parent::setUp(); 47 53 48 $revisions = wp_get_post_revisions( self::$post_id ); 49 $this->revision_1 = array_pop( $revisions ); 50 $this->revision_id1 = $this->revision_1->ID; 51 $this->revision_2 = array_pop( $revisions ); 52 $this->revision_id2 = $this->revision_2->ID; 54 $revisions = wp_get_post_revisions( self::$post_id ); 55 $this->total_revisions = count( $revisions ); 56 $this->revisions = $revisions; 57 $this->revision_1 = array_pop( $revisions ); 58 $this->revision_id1 = $this->revision_1->ID; 59 $this->revision_2 = array_pop( $revisions ); 60 $this->revision_id2 = $this->revision_2->ID; 61 $this->revision_3 = array_pop( $revisions ); 62 $this->revision_id3 = $this->revision_3->ID; 53 63 } 54 64 … … 82 92 $data = $response->get_data(); 83 93 $this->assertEquals( 200, $response->get_status() ); 84 $this->assertCount( 2, $data );94 $this->assertCount( $this->total_revisions, $data ); 85 95 86 96 // Reverse chron 87 $this->assertEquals( $this->revision_id2, $data[0]['id'] ); 88 $this->check_get_revision_response( $data[0], $this->revision_2 ); 89 90 $this->assertEquals( $this->revision_id1, $data[1]['id'] ); 91 $this->check_get_revision_response( $data[1], $this->revision_1 ); 97 $this->assertEquals( $this->revision_id3, $data[0]['id'] ); 98 $this->check_get_revision_response( $data[0], $this->revision_3 ); 99 100 $this->assertEquals( $this->revision_id2, $data[1]['id'] ); 101 $this->check_get_revision_response( $data[1], $this->revision_2 ); 102 103 $this->assertEquals( $this->revision_id1, $data[2]['id'] ); 104 $this->check_get_revision_response( $data[2], $this->revision_1 ); 92 105 } 93 106 … … 362 375 } 363 376 377 /** 378 * Test the pagination header of the first page. 379 * 380 * @ticket 40510 381 */ 382 public function test_get_items_pagination_header_of_the_first_page() { 383 wp_set_current_user( self::$editor_id ); 384 385 $rest_route = '/wp/v2/posts/' . self::$post_id . '/revisions'; 386 $per_page = 2; 387 $total_pages = (int) ceil( $this->total_revisions / $per_page ); 388 $page = 1; // First page. 389 390 $request = new WP_REST_Request( 'GET', $rest_route ); 391 $request->set_query_params( 392 array( 393 'per_page' => $per_page, 394 'page' => $page, 395 ) 396 ); 397 $response = rest_get_server()->dispatch( $request ); 398 $headers = $response->get_headers(); 399 $this->assertSame( $this->total_revisions, $headers['X-WP-Total'] ); 400 $this->assertSame( $total_pages, $headers['X-WP-TotalPages'] ); 401 $next_link = add_query_arg( 402 array( 403 'per_page' => $per_page, 404 'page' => $page + 1, 405 ), 406 rest_url( $rest_route ) 407 ); 408 $this->assertFalse( stripos( $headers['Link'], 'rel="prev"' ) ); 409 $this->assertContains( '<' . $next_link . '>; rel="next"', $headers['Link'] ); 410 } 411 412 /** 413 * Test the pagination header of the last page. 414 * 415 * @ticket 40510 416 */ 417 public function test_get_items_pagination_header_of_the_last_page() { 418 wp_set_current_user( self::$editor_id ); 419 420 $rest_route = '/wp/v2/posts/' . self::$post_id . '/revisions'; 421 $per_page = 2; 422 $total_pages = (int) ceil( $this->total_revisions / $per_page ); 423 $page = 2; // Last page. 424 425 $request = new WP_REST_Request( 'GET', $rest_route ); 426 $request->set_query_params( 427 array( 428 'per_page' => $per_page, 429 'page' => $page, 430 ) 431 ); 432 $response = rest_get_server()->dispatch( $request ); 433 $headers = $response->get_headers(); 434 $this->assertSame( $this->total_revisions, $headers['X-WP-Total'] ); 435 $this->assertSame( $total_pages, $headers['X-WP-TotalPages'] ); 436 $prev_link = add_query_arg( 437 array( 438 'per_page' => $per_page, 439 'page' => $page - 1, 440 ), 441 rest_url( $rest_route ) 442 ); 443 $this->assertContains( '<' . $prev_link . '>; rel="prev"', $headers['Link'] ); 444 } 445 446 /** 447 * Test that invalid 'per_page' query should error. 448 * 449 * @ticket 40510 450 */ 451 public function test_get_items_invalid_per_page_should_error() { 452 wp_set_current_user( self::$editor_id ); 453 454 $per_page = -1; // Invalid number. 455 $expected_error = 'rest_invalid_param'; 456 $expected_status = 400; 457 458 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 459 $request->set_param( 'per_page', $per_page ); 460 $response = rest_get_server()->dispatch( $request ); 461 $this->assertErrorResponse( $expected_error, $response, $expected_status ); 462 } 463 464 /** 465 * Test that out of bounds 'page' query should error. 466 * 467 * @ticket 40510 468 */ 469 public function test_get_items_out_of_bounds_page_should_error() { 470 wp_set_current_user( self::$editor_id ); 471 472 $per_page = 2; 473 $total_pages = (int) ceil( $this->total_revisions / $per_page ); 474 $page = $total_pages + 1; // Out of bound page. 475 $expected_error = 'rest_revision_invalid_page_number'; 476 $expected_status = 400; 477 478 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 479 $request->set_query_params( 480 array( 481 'per_page' => $per_page, 482 'page' => $page, 483 ) 484 ); 485 $response = rest_get_server()->dispatch( $request ); 486 $this->assertErrorResponse( $expected_error, $response, $expected_status ); 487 } 488 489 /** 490 * Test that impossibly high 'page' query should error. 491 * 492 * @ticket 40510 493 */ 494 public function test_get_items_invalid_max_pages_should_error() { 495 wp_set_current_user( self::$editor_id ); 496 497 $per_page = 2; 498 $page = REST_TESTS_IMPOSSIBLY_HIGH_NUMBER; // Invalid number. 499 $expected_error = 'rest_revision_invalid_page_number'; 500 $expected_status = 400; 501 502 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 503 $request->set_query_params( 504 array( 505 'per_page' => $per_page, 506 'page' => $page, 507 ) 508 ); 509 $response = rest_get_server()->dispatch( $request ); 510 $this->assertErrorResponse( $expected_error, $response, $expected_status ); 511 } 512 513 /** 514 * Test the search query. 515 * 516 * @ticket 40510 517 */ 518 public function test_get_items_search_query() { 519 wp_set_current_user( self::$editor_id ); 520 521 $search_string = 'better'; 522 $expected_count = 1; 523 $expected_content = 'This content is better.'; 524 525 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 526 $request->set_param( 'search', $search_string ); 527 $response = rest_get_server()->dispatch( $request ); 528 $data = $response->get_data(); 529 $this->assertCount( $expected_count, $data ); 530 $this->assertContains( $expected_content, $data[0]['content']['rendered'] ); 531 } 532 533 /** 534 * Test that the default query should fetch all revisions. 535 * 536 * @ticket 40510 537 */ 538 public function test_get_items_default_query_should_fetch_all_revisons() { 539 wp_set_current_user( self::$editor_id ); 540 541 $expected_count = $this->total_revisions; 542 543 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 544 $response = rest_get_server()->dispatch( $request ); 545 $this->assertCount( $expected_count, $response->get_data() ); 546 } 547 548 /** 549 * Test that 'offset' query shouldn't work without 'per_page' (fallback -1). 550 * 551 * @ticket 40510 552 */ 553 public function test_get_items_offset_should_not_work_without_per_page() { 554 wp_set_current_user( self::$editor_id ); 555 556 $offset = 1; 557 $expected_count = $this->total_revisions; 558 559 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 560 $request->set_param( 'offset', $offset ); 561 $response = rest_get_server()->dispatch( $request ); 562 $this->assertCount( $expected_count, $response->get_data() ); 563 } 564 565 /** 566 * Test that 'offset' query should work with 'per_page'. 567 * 568 * @ticket 40510 569 */ 570 public function test_get_items_offset_should_work_with_per_page() { 571 wp_set_current_user( self::$editor_id ); 572 573 $per_page = 2; 574 $offset = 1; 575 $expected_count = 2; 576 577 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 578 $request->set_query_params( 579 array( 580 'offset' => $offset, 581 'per_page' => $per_page, 582 ) 583 ); 584 $response = rest_get_server()->dispatch( $request ); 585 $this->assertCount( $expected_count, $response->get_data() ); 586 } 587 588 /** 589 * Test that 'offset' query should take priority over 'page'. 590 * 591 * @ticket 40510 592 */ 593 public function test_get_items_offset_should_take_priority_over_page() { 594 wp_set_current_user( self::$editor_id ); 595 596 $per_page = 2; 597 $offset = 1; 598 $page = 1; 599 $expected_count = 2; 600 601 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 602 $request->set_query_params( 603 array( 604 'offset' => $offset, 605 'per_page' => $per_page, 606 'page' => $page, 607 ) 608 ); 609 $response = rest_get_server()->dispatch( $request ); 610 $this->assertCount( $expected_count, $response->get_data() ); 611 } 612 613 /** 614 * Test that 'offset' query, as the total revisions count, should return empty data. 615 * 616 * @ticket 40510 617 */ 618 public function test_get_items_total_revisions_offset_should_return_empty_data() { 619 wp_set_current_user( self::$editor_id ); 620 621 $per_page = 2; 622 $offset = $this->total_revisions; 623 $expected_error = 'rest_revision_invalid_offset_number'; 624 $expected_status = 400; 625 626 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 627 $request->set_query_params( 628 array( 629 'offset' => $offset, 630 'per_page' => $per_page, 631 ) 632 ); 633 $response = rest_get_server()->dispatch( $request ); 634 $this->assertErrorResponse( $expected_error, $response, $expected_status ); 635 } 636 637 /** 638 * Test that out of bound 'offset' query should error. 639 * 640 * @ticket 40510 641 */ 642 public function test_get_items_out_of_bound_offset_should_error() { 643 wp_set_current_user( self::$editor_id ); 644 645 $per_page = 2; 646 $offset = $this->total_revisions + 1; 647 $expected_error = 'rest_revision_invalid_offset_number'; 648 $expected_status = 400; 649 650 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 651 $request->set_query_params( 652 array( 653 'offset' => $offset, 654 'per_page' => $per_page, 655 ) 656 ); 657 $response = rest_get_server()->dispatch( $request ); 658 $this->assertErrorResponse( $expected_error, $response, $expected_status ); 659 } 660 661 /** 662 * Test that impossible high number for 'offset' query should error. 663 * 664 * @ticket 40510 665 */ 666 public function test_get_items_impossible_high_number_offset_should_error() { 667 wp_set_current_user( self::$editor_id ); 668 669 $per_page = 2; 670 $offset = REST_TESTS_IMPOSSIBLY_HIGH_NUMBER; 671 $expected_error = 'rest_revision_invalid_offset_number'; 672 $expected_status = 400; 673 674 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 675 $request->set_query_params( 676 array( 677 'offset' => $offset, 678 'per_page' => $per_page, 679 ) 680 ); 681 $response = rest_get_server()->dispatch( $request ); 682 $this->assertErrorResponse( $expected_error, $response, $expected_status ); 683 } 684 685 /** 686 * Test that invalid 'offset' query should error. 687 * 688 * @ticket 40510 689 */ 690 public function test_get_items_invalid_offset_should_error() { 691 wp_set_current_user( self::$editor_id ); 692 693 $per_page = 2; 694 $offset = 'moreplease'; 695 $expected_error = 'rest_invalid_param'; 696 $expected_status = 400; 697 698 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 699 $request->set_query_params( 700 array( 701 'offset' => $offset, 702 'per_page' => $per_page, 703 ) 704 ); 705 $response = rest_get_server()->dispatch( $request ); 706 $this->assertErrorResponse( $expected_error, $response, $expected_status ); 707 } 708 709 /** 710 * Test that out of bounds 'page' query should not error when offset is provided, 711 * because it takes precedence. 712 * 713 * @ticket 40510 714 */ 715 public function test_get_items_out_of_bounds_page_should_not_error_if_offset() { 716 wp_set_current_user( self::$editor_id ); 717 718 $per_page = 2; 719 $total_pages = (int) ceil( $this->total_revisions / $per_page ); 720 $page = $total_pages + 1; // Out of bound page. 721 $expected_count = 2; 722 723 $request = new WP_REST_Request( 'GET', '/wp/v2/posts/' . self::$post_id . '/revisions' ); 724 $request->set_query_params( 725 array( 726 'offset' => 1, 727 'per_page' => $per_page, 728 'page' => $page, 729 ) 730 ); 731 $response = rest_get_server()->dispatch( $request ); 732 $this->assertCount( $expected_count, $response->get_data() ); 733 } 364 734 }
Note: See TracChangeset
for help on using the changeset viewer.