Changeset 53785
- Timestamp:
- 07/27/2022 02:59:12 PM (2 years ago)
- Location:
- trunk/tests/phpunit/tests
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/tests/phpunit/tests/post.php
r53783 r53785 31 31 } 32 32 33 public function set_up() {34 parent::set_up();35 36 wp_set_current_user( self::$editor_id );37 _set_cron_array( array() );38 }39 40 /**41 * Helper function: return the timestamp(s) of cron jobs for the specified hook and post.42 */43 private function next_schedule_for_post( $hook, $post_id ) {44 return wp_next_scheduled( 'publish_future_post', array( 0 => (int) $post_id ) );45 }46 47 /**48 * Helper function, unsets current user globally.49 */50 private function unset_current_user() {51 global $current_user, $user_ID;52 53 $current_user = null;54 $user_ID = null;55 }56 57 /**58 * Test simple valid behavior: insert and get a post.59 *60 * @dataProvider data_vb_insert_get_delete61 */62 public function test_vb_insert_get_delete( $post_type ) {63 register_post_type(64 'cpt',65 array(66 'taxonomies' => array( 'post_tag', 'ctax' ),67 )68 );69 register_taxonomy( 'ctax', 'cpt' );70 71 $data = array(72 'post_author' => self::$editor_id,73 'post_status' => 'publish',74 'post_content' => "{$post_type}_content",75 'post_title' => "{$post_type}_title",76 'tax_input' => array(77 'post_tag' => 'tag1,tag2',78 'ctax' => 'cterm1,cterm2',79 ),80 'post_type' => $post_type,81 );82 83 // Insert a post and make sure the ID is OK.84 $post_id = wp_insert_post( $data );85 $this->assertIsInt( $post_id );86 $this->assertGreaterThan( 0, $post_id );87 88 // Fetch the post and make sure it matches.89 $post = get_post( $post_id );90 91 $this->assertSame( $data['post_content'], $post->post_content );92 $this->assertSame( $data['post_title'], $post->post_title );93 $this->assertSame( $data['post_status'], $post->post_status );94 $this->assertEquals( $data['post_author'], $post->post_author );95 96 // Test cache state.97 $post_cache = wp_cache_get( $post_id, 'posts' );98 $this->assertInstanceOf( 'stdClass', $post_cache );99 $this->assertSame( $post_id, $post_cache->ID );100 101 update_object_term_cache( $post_id, $post_type );102 $term_cache = wp_cache_get( $post_id, 'post_tag_relationships' );103 $this->assertIsArray( $term_cache );104 $this->assertCount( 2, $term_cache );105 106 $term_cache = wp_cache_get( $post_id, 'ctax_relationships' );107 if ( 'cpt' === $post_type ) {108 $this->assertIsArray( $term_cache );109 $this->assertCount( 2, $term_cache );110 } else {111 $this->assertFalse( $term_cache );112 }113 114 wp_delete_post( $post_id, true );115 116 $this->assertFalse( wp_cache_get( $post_id, 'posts' ) );117 $this->assertFalse( wp_cache_get( $post_id, 'post_tag_relationships' ) );118 $this->assertFalse( wp_cache_get( $post_id, 'ctax_relationships' ) );119 120 $GLOBALS['wp_taxonomies']['post_tag']->object_type = array( 'post' );121 }122 123 public function data_vb_insert_get_delete() {124 $post_types = array( 'post', 'cpt' );125 126 return $this->text_array_to_dataprovider( $post_types );127 }128 129 /**130 * Insert a post with a future date, and make sure the status and cron schedule are correct.131 */132 public function test_vb_insert_future() {133 $future_date = strtotime( '+1 day' );134 135 $data = array(136 'post_author' => self::$editor_id,137 'post_status' => 'publish',138 'post_content' => 'content',139 'post_title' => 'title',140 'post_date' => date_format( date_create( "@{$future_date}" ), 'Y-m-d H:i:s' ),141 );142 143 // Insert a post and make sure the ID is OK.144 $post_id = wp_insert_post( $data );145 $this->assertIsInt( $post_id );146 $this->assertGreaterThan( 0, $post_id );147 148 // Fetch the post and make sure it matches.149 $post = get_post( $post_id );150 151 $this->assertSame( $data['post_content'], $post->post_content );152 $this->assertSame( $data['post_title'], $post->post_title );153 $this->assertSame( 'future', $post->post_status );154 $this->assertEquals( $data['post_author'], $post->post_author );155 $this->assertSame( $data['post_date'], $post->post_date );156 157 // There should be a publish_future_post hook scheduled on the future date.158 $this->assertSame( $future_date, $this->next_schedule_for_post( 'publish_future_post', $post_id ) );159 }160 161 /**162 * Insert a post with a future date, and make sure the status and cron schedule are correct.163 */164 public function test_vb_insert_future_over_dst() {165 // Some magic days - one DST one not.166 $future_date_1 = strtotime( 'June 21st +1 year' );167 $future_date_2 = strtotime( 'Jan 11th +1 year' );168 169 $data = array(170 'post_author' => self::$editor_id,171 'post_status' => 'publish',172 'post_content' => 'content',173 'post_title' => 'title',174 'post_date' => date_format( date_create( "@{$future_date_1}" ), 'Y-m-d H:i:s' ),175 );176 177 // Insert a post and make sure the ID is OK.178 $post_id = wp_insert_post( $data );179 180 // Fetch the post and make sure has the correct date and status.181 $post = get_post( $post_id );182 $this->assertSame( 'future', $post->post_status );183 $this->assertSame( $data['post_date'], $post->post_date );184 185 // Check that there's a publish_future_post job scheduled at the right time.186 $this->assertSame( $future_date_1, $this->next_schedule_for_post( 'publish_future_post', $post_id ) );187 188 // Now save it again with a date further in the future.189 $data['ID'] = $post_id;190 $data['post_date'] = date_format( date_create( "@{$future_date_2}" ), 'Y-m-d H:i:s' );191 $data['post_date_gmt'] = null;192 wp_update_post( $data );193 194 // Fetch the post again and make sure it has the new post_date.195 $post = get_post( $post_id );196 $this->assertSame( 'future', $post->post_status );197 $this->assertSame( $data['post_date'], $post->post_date );198 199 // And the correct date on the cron job.200 $this->assertSame( $future_date_2, $this->next_schedule_for_post( 'publish_future_post', $post_id ) );201 }202 203 /**204 * Future post bug: posts get published at the wrong time if you edit the timestamp.205 *206 * @ticket 4710207 */208 public function test_vb_insert_future_edit_bug() {209 $future_date_1 = strtotime( '+1 day' );210 $future_date_2 = strtotime( '+2 day' );211 212 $data = array(213 'post_author' => self::$editor_id,214 'post_status' => 'publish',215 'post_content' => 'content',216 'post_title' => 'title',217 'post_date' => date_format( date_create( "@{$future_date_1}" ), 'Y-m-d H:i:s' ),218 );219 220 // Insert a post and make sure the ID is OK.221 $post_id = wp_insert_post( $data );222 223 // Fetch the post and make sure has the correct date and status.224 $post = get_post( $post_id );225 $this->assertSame( 'future', $post->post_status );226 $this->assertSame( $data['post_date'], $post->post_date );227 228 // Check that there's a publish_future_post job scheduled at the right time.229 $this->assertSame( $future_date_1, $this->next_schedule_for_post( 'publish_future_post', $post_id ) );230 231 // Now save it again with a date further in the future.232 $data['ID'] = $post_id;233 $data['post_date'] = date_format( date_create( "@{$future_date_2}" ), 'Y-m-d H:i:s' );234 $data['post_date_gmt'] = null;235 wp_update_post( $data );236 237 // Fetch the post again and make sure it has the new post_date.238 $post = get_post( $post_id );239 $this->assertSame( 'future', $post->post_status );240 $this->assertSame( $data['post_date'], $post->post_date );241 242 // And the correct date on the cron job.243 $this->assertSame( $future_date_2, $this->next_schedule_for_post( 'publish_future_post', $post_id ) );244 }245 246 /**247 * Insert a draft post with a future date, and make sure no cron schedule is set.248 */249 public function test_vb_insert_future_draft() {250 $future_date = strtotime( '+1 day' );251 252 $data = array(253 'post_author' => self::$editor_id,254 'post_status' => 'draft',255 'post_content' => 'content',256 'post_title' => 'title',257 'post_date' => date_format( date_create( "@{$future_date}" ), 'Y-m-d H:i:s' ),258 );259 260 // Insert a post and make sure the ID is OK.261 $post_id = wp_insert_post( $data );262 $this->assertIsInt( $post_id );263 $this->assertGreaterThan( 0, $post_id );264 265 // Fetch the post and make sure it matches.266 $post = get_post( $post_id );267 268 $this->assertSame( $data['post_content'], $post->post_content );269 $this->assertSame( $data['post_title'], $post->post_title );270 $this->assertSame( 'draft', $post->post_status );271 $this->assertEquals( $data['post_author'], $post->post_author );272 $this->assertSame( $data['post_date'], $post->post_date );273 274 // There should be a publish_future_post hook scheduled on the future date.275 $this->assertFalse( $this->next_schedule_for_post( 'publish_future_post', $post_id ) );276 277 }278 279 /**280 * Insert a future post, then edit and change it to draft, and make sure cron gets it right.281 */282 public function test_vb_insert_future_change_to_draft() {283 $future_date_1 = strtotime( '+1 day' );284 285 $data = array(286 'post_author' => self::$editor_id,287 'post_status' => 'publish',288 'post_content' => 'content',289 'post_title' => 'title',290 'post_date' => date_format( date_create( "@{$future_date_1}" ), 'Y-m-d H:i:s' ),291 );292 293 // Insert a post and make sure the ID is OK.294 $post_id = wp_insert_post( $data );295 296 // Fetch the post and make sure has the correct date and status.297 $post = get_post( $post_id );298 $this->assertSame( 'future', $post->post_status );299 $this->assertSame( $data['post_date'], $post->post_date );300 301 // Check that there's a publish_future_post job scheduled at the right time.302 $this->assertSame( $future_date_1, $this->next_schedule_for_post( 'publish_future_post', $post_id ) );303 304 // Now save it again with status set to draft.305 $data['ID'] = $post_id;306 $data['post_status'] = 'draft';307 wp_update_post( $data );308 309 // Fetch the post again and make sure it has the new post_date.310 $post = get_post( $post_id );311 $this->assertSame( 'draft', $post->post_status );312 $this->assertSame( $data['post_date'], $post->post_date );313 314 // And the correct date on the cron job.315 $this->assertFalse( $this->next_schedule_for_post( 'publish_future_post', $post_id ) );316 }317 318 /**319 * Insert a future post, then edit and change the status, and make sure cron gets it right.320 *321 * @dataProvider data_vb_insert_future_change_status322 */323 public function test_vb_insert_future_change_status( $status ) {324 $future_date_1 = strtotime( '+1 day' );325 326 $data = array(327 'post_author' => self::$editor_id,328 'post_status' => 'publish',329 'post_content' => "{$status}_content",330 'post_title' => "{$status}_title",331 'post_date' => date_format( date_create( "@{$future_date_1}" ), 'Y-m-d H:i:s' ),332 );333 334 // Insert a post and make sure the ID is OK.335 $post_id = wp_insert_post( $data );336 337 // Fetch the post and make sure has the correct date and status.338 $post = get_post( $post_id );339 $this->assertSame( 'future', $post->post_status );340 $this->assertSame( $data['post_date'], $post->post_date );341 342 // Check that there's a publish_future_post job scheduled at the right time.343 $this->assertSame( $future_date_1, $this->next_schedule_for_post( 'publish_future_post', $post_id ) );344 345 // Now save it again with status changed.346 $data['ID'] = $post_id;347 $data['post_status'] = $status;348 wp_update_post( $data );349 350 // Fetch the post again and make sure it has the new post_date.351 $post = get_post( $post_id );352 $this->assertSame( $status, $post->post_status );353 $this->assertSame( $data['post_date'], $post->post_date );354 355 // And the correct date on the cron job.356 $this->assertFalse( $this->next_schedule_for_post( 'publish_future_post', $post_id ) );357 }358 359 public function data_vb_insert_future_change_status() {360 $statuses = array(361 'draft',362 'static',363 'object',364 'attachment',365 'inherit',366 'pending',367 );368 369 return $this->text_array_to_dataprovider( $statuses );370 }371 372 /**373 * Insert a draft post with a future date, and make sure no cron schedule is set.374 */375 public function test_vb_insert_future_private() {376 $future_date = strtotime( '+1 day' );377 378 $data = array(379 'post_author' => self::$editor_id,380 'post_status' => 'private',381 'post_content' => 'content',382 'post_title' => 'title',383 'post_date' => date_format( date_create( "@{$future_date}" ), 'Y-m-d H:i:s' ),384 );385 386 // Insert a post and make sure the ID is OK.387 $post_id = wp_insert_post( $data );388 $this->assertIsInt( $post_id );389 $this->assertGreaterThan( 0, $post_id );390 391 // Fetch the post and make sure it matches.392 $post = get_post( $post_id );393 394 $this->assertSame( $data['post_content'], $post->post_content );395 $this->assertSame( $data['post_title'], $post->post_title );396 $this->assertSame( 'private', $post->post_status );397 $this->assertEquals( $data['post_author'], $post->post_author );398 $this->assertSame( $data['post_date'], $post->post_date );399 400 // There should be a publish_future_post hook scheduled on the future date.401 $this->assertFalse( $this->next_schedule_for_post( 'publish_future_post', $post_id ) );402 }403 404 /**405 * Insert a post with an invalid date, make sure it fails.406 *407 * @ticket 17180408 */409 public function test_vb_insert_invalid_date() {410 $data = array(411 'post_author' => self::$editor_id,412 'post_status' => 'publish',413 'post_content' => 'content',414 'post_title' => 'title',415 'post_date' => '2012-02-30 00:00:00',416 );417 418 // Test both return paths with or without WP_Error.419 $post_id = wp_insert_post( $data, true );420 $this->assertWPError( $post_id );421 $this->assertSame( 'invalid_date', $post_id->get_error_code() );422 423 $post_id = wp_insert_post( $data );424 $this->assertSame( 0, $post_id );425 }426 427 /**428 * Insert a future post, then edit and change it to private, and make sure cron gets it right.429 */430 public function test_vb_insert_future_change_to_private() {431 $future_date_1 = strtotime( '+1 day' );432 433 $data = array(434 'post_author' => self::$editor_id,435 'post_status' => 'publish',436 'post_content' => 'content',437 'post_title' => 'title',438 'post_date' => date_format( date_create( "@{$future_date_1}" ), 'Y-m-d H:i:s' ),439 );440 441 // Insert a post and make sure the ID is OK.442 $post_id = wp_insert_post( $data );443 444 // Fetch the post and make sure has the correct date and status.445 $post = get_post( $post_id );446 $this->assertSame( 'future', $post->post_status );447 $this->assertSame( $data['post_date'], $post->post_date );448 449 // Check that there's a publish_future_post job scheduled at the right time.450 $this->assertSame( $future_date_1, $this->next_schedule_for_post( 'publish_future_post', $post_id ) );451 452 // Now save it again with status set to draft.453 $data['ID'] = $post_id;454 $data['post_status'] = 'private';455 wp_update_post( $data );456 457 // Fetch the post again and make sure it has the new post_date.458 $post = get_post( $post_id );459 $this->assertSame( 'private', $post->post_status );460 $this->assertSame( $data['post_date'], $post->post_date );461 462 // And the correct date on the cron job.463 $this->assertFalse( $this->next_schedule_for_post( 'publish_future_post', $post_id ) );464 }465 466 /**467 * @ticket 5305468 */469 public function test_wp_insert_post_should_not_allow_a_bare_numeric_slug_that_might_conflict_with_a_date_archive_when_generating_from_an_empty_post_title() {470 $this->set_permalink_structure( '/%postname%/' );471 472 $post_id = wp_insert_post(473 array(474 'post_title' => '',475 'post_content' => 'test',476 'post_status' => 'publish',477 'post_type' => 'post',478 )479 );480 481 $post = get_post( $post_id );482 483 $this->assertSame( "$post_id-2", $post->post_name );484 }485 486 /**487 * @ticket 5305488 * @ticket 33392489 */490 public function test_wp_insert_post_should_invalidate_post_cache_before_generating_guid_when_post_name_is_empty_and_is_generated_from_the_post_ID() {491 register_post_type( 'wptests_pt' );492 493 $post_id = wp_insert_post(494 array(495 'post_title' => '',496 'post_type' => 'wptests_pt',497 'post_status' => 'publish',498 )499 );500 501 $post = get_post( $post_id );502 503 $this->assertStringContainsString( 'wptests_pt=' . $post_id, $post->guid );504 }505 506 /**507 * @ticket 55877508 * @covers ::wp_insert_post509 */510 public function test_wp_insert_post_should_not_trigger_warning_for_pending_posts_with_unknown_cpt() {511 $post_id = wp_insert_post(512 array(513 'post_title' => 'title',514 'post_type' => 'unknown',515 'post_status' => 'pending',516 )517 );518 519 $this->assertIsInt( $post_id );520 $this->assertGreaterThan( 0, $post_id );521 }522 523 /**524 * @ticket 20451525 */526 public function test_wp_insert_post_with_meta_input() {527 $post_id = wp_insert_post(528 array(529 'post_title' => '',530 'post_content' => 'test',531 'post_status' => 'publish',532 'post_type' => 'post',533 'meta_input' => array(534 'hello' => 'world',535 'foo' => 'bar',536 ),537 )538 );539 540 $this->assertSame( 'world', get_post_meta( $post_id, 'hello', true ) );541 $this->assertSame( 'bar', get_post_meta( $post_id, 'foo', true ) );542 }543 544 /**545 * "When I delete a future post using wp_delete_post( $post->ID ) it does not update the cron correctly."546 *547 * @ticket 5364548 */549 public function test_delete_future_post_cron() {550 $future_date = strtotime( '+1 day' );551 552 $data = array(553 'post_author' => self::$editor_id,554 'post_status' => 'publish',555 'post_content' => 'content',556 'post_title' => 'title',557 'post_date' => date_format( date_create( "@{$future_date}" ), 'Y-m-d H:i:s' ),558 );559 560 // Insert a post and make sure the ID is OK.561 $post_id = wp_insert_post( $data );562 563 // Check that there's a publish_future_post job scheduled at the right time.564 $this->assertSame( $future_date, $this->next_schedule_for_post( 'publish_future_post', $post_id ) );565 566 // Now delete the post and make sure the cron entry is removed.567 wp_delete_post( $post_id );568 569 $this->assertFalse( $this->next_schedule_for_post( 'publish_future_post', $post_id ) );570 }571 572 /**573 * Bug: permalink doesn't work if post title is empty.574 *575 * Might only fail if the post ID is greater than four characters.576 *577 * @ticket 5305578 */579 public function test_permalink_without_title() {580 $this->set_permalink_structure( '/%year%/%monthnum%/%day%/%postname%/' );581 582 $data = array(583 'post_author' => self::$editor_id,584 'post_status' => 'publish',585 'post_content' => 'content',586 'post_title' => '',587 'post_date' => '2007-10-31 06:15:00',588 );589 590 // Insert a post and make sure the ID is OK.591 $post_id = wp_insert_post( $data );592 593 // Permalink should include the post ID at the end.594 $expected = get_option( 'siteurl' ) . '/2007/10/31/' . $post_id . '/';595 $this->assertSame( $expected, get_permalink( $post_id ) );596 }597 598 /**599 * @ticket 23708600 */601 public function test_get_post_ancestors_within_loop() {602 global $post;603 604 $parent_id = self::factory()->post->create();605 $post = self::factory()->post->create_and_get(606 array(607 'post_parent' => $parent_id,608 )609 );610 611 $this->assertSame( array( $parent_id ), get_post_ancestors( 0 ) );612 }613 614 /**615 * @ticket 23474616 */617 public function test_update_invalid_post_id() {618 $post_id = self::factory()->post->create();619 $post = get_post( $post_id, ARRAY_A );620 621 $post['ID'] = 123456789;622 623 $this->assertSame( 0, wp_insert_post( $post ) );624 $this->assertSame( 0, wp_update_post( $post ) );625 626 $this->assertInstanceOf( 'WP_Error', wp_insert_post( $post, true ) );627 $this->assertInstanceOf( 'WP_Error', wp_update_post( $post, true ) );628 629 }630 631 33 public function test_parse_post_content_single_page() { 632 34 global $multipage, $pages, $numpages; … … 735 137 $this->assertSame( 1, $numpages ); 736 138 $this->assertSame( array( 'Page 0' ), $pages ); 737 }738 739 /**740 * @ticket 19373741 */742 public function test_insert_programmatic_sanitized() {743 $this->unset_current_user();744 745 register_taxonomy( 'test_tax', 'post' );746 747 $title = 'title';748 $data = array(749 'post_author' => self::$editor_id,750 'post_status' => 'publish',751 'post_content' => 'content',752 'post_title' => $title,753 'tax_input' => array(754 'test_tax' => array( 'term', 'term2', 'term3' ),755 ),756 );757 758 $post_id = wp_insert_post( $data, true, true );759 $this->assertIsInt( $post_id );760 $this->assertGreaterThan( 0, $post_id );761 762 $post = get_post( $post_id );763 $this->assertEquals( self::$editor_id, $post->post_author );764 $this->assertSame( $title, $post->post_title );765 139 } 766 140 … … 879 253 wp_set_object_terms( $post, 'foo', $tax ); 880 254 255 wp_set_current_user( self::$editor_id ); 256 881 257 $wp_tag_cloud = wp_tag_cloud( 882 258 array( … … 937 313 938 314 /** 939 * @ticket 31168940 */941 public function test_wp_insert_post_default_comment_ping_status_open() {942 $post_id = self::factory()->post->create(943 array(944 'post_author' => self::$editor_id,945 'post_status' => 'publish',946 'post_content' => 'content',947 'post_title' => 'title',948 )949 );950 $post = get_post( $post_id );951 952 $this->assertSame( 'open', $post->comment_status );953 $this->assertSame( 'open', $post->ping_status );954 }955 956 /**957 * @ticket 31168958 */959 public function test_wp_insert_post_page_default_comment_ping_status_closed() {960 $post_id = self::factory()->post->create(961 array(962 'post_author' => self::$editor_id,963 'post_status' => 'publish',964 'post_content' => 'content',965 'post_title' => 'title',966 'post_type' => 'page',967 )968 );969 $post = get_post( $post_id );970 971 $this->assertSame( 'closed', $post->comment_status );972 $this->assertSame( 'closed', $post->ping_status );973 }974 975 /**976 * @ticket 31168977 */978 public function test_wp_insert_post_cpt_default_comment_ping_status_open() {979 $post_type = rand_str( 20 );980 register_post_type( $post_type, array( 'supports' => array( 'comments', 'trackbacks' ) ) );981 982 $post_id = self::factory()->post->create(983 array(984 'post_author' => self::$editor_id,985 'post_status' => 'publish',986 'post_content' => rand_str(),987 'post_title' => rand_str(),988 'post_type' => $post_type,989 )990 );991 $post = get_post( $post_id );992 993 _unregister_post_type( $post_type );994 995 $this->assertSame( 'open', $post->comment_status );996 $this->assertSame( 'open', $post->ping_status );997 }998 999 /**1000 * @ticket 311681001 */1002 public function test_wp_insert_post_cpt_default_comment_ping_status_closed() {1003 $post_type = rand_str( 20 );1004 register_post_type( $post_type );1005 1006 $post_id = self::factory()->post->create(1007 array(1008 'post_author' => self::$editor_id,1009 'post_status' => 'publish',1010 'post_content' => rand_str(),1011 'post_title' => rand_str(),1012 'post_type' => $post_type,1013 )1014 );1015 $post = get_post( $post_id );1016 1017 _unregister_post_type( $post_type );1018 1019 $this->assertSame( 'closed', $post->comment_status );1020 $this->assertSame( 'closed', $post->ping_status );1021 }1022 1023 /**1024 315 * If a post is sticky and is updated by a user that does not have the publish_post capability, 1025 316 * it should _stay_ sticky. … … 1128 419 } 1129 420 1130 /**1131 * If a post is updated without providing a post_name param,1132 * a new slug should not be generated.1133 *1134 * @ticket 348651135 */1136 public function test_post_updates_without_slug_provided() {1137 $post_id = self::factory()->post->create(1138 array(1139 'post_title' => 'Stuff',1140 'post_status' => 'publish',1141 )1142 );1143 1144 $data = array(1145 'ID' => $post_id,1146 'post_title' => 'Stuff and Things',1147 );1148 1149 wp_insert_post( $data );1150 1151 $updated_post = get_post( $post_id );1152 // Ensure changing the post_title didn't modify the post_name.1153 $this->assertSame( 'stuff', $updated_post->post_name );1154 }1155 1156 /**1157 * @ticket 325851158 */1159 public function test_wp_insert_post_author_zero() {1160 $post_id = self::factory()->post->create( array( 'post_author' => 0 ) );1161 1162 $this->assertEquals( 0, get_post( $post_id )->post_author );1163 }1164 1165 /**1166 * @ticket 325851167 */1168 public function test_wp_insert_post_author_null() {1169 $post_id = self::factory()->post->create( array( 'post_author' => null ) );1170 1171 $this->assertEquals( self::$editor_id, get_post( $post_id )->post_author );1172 }1173 1174 /**1175 * @ticket 159461176 */1177 public function test_wp_insert_post_should_respect_post_date_gmt() {1178 $data = array(1179 'post_author' => self::$editor_id,1180 'post_status' => 'publish',1181 'post_content' => 'content',1182 'post_title' => 'title',1183 'post_date_gmt' => '2014-01-01 12:00:00',1184 );1185 1186 // Insert a post and make sure the ID is OK.1187 $post_id = wp_insert_post( $data );1188 1189 $post = get_post( $post_id );1190 1191 $this->assertSame( $data['post_content'], $post->post_content );1192 $this->assertSame( $data['post_title'], $post->post_title );1193 $this->assertEquals( $data['post_author'], $post->post_author );1194 $this->assertSame( get_date_from_gmt( $data['post_date_gmt'] ), $post->post_date );1195 $this->assertSame( $data['post_date_gmt'], $post->post_date_gmt );1196 }1197 1198 421 public function test_wp_delete_post_reassign_hierarchical_post_type() { 1199 422 $grandparent_page_id = self::factory()->post->create( array( 'post_type' => 'page' ) ); … … 1221 444 1222 445 /** 1223 * Test ensuring that the post_name (UUID) is preserved when wp_insert_post()/wp_update_post() is called.1224 *1225 * @see _wp_customize_changeset_filter_insert_post_data()1226 * @ticket 309371227 */1228 public function test_wp_insert_post_for_customize_changeset_should_not_drop_post_name() {1229 $this->assertSame( 10, has_filter( 'wp_insert_post_data', '_wp_customize_changeset_filter_insert_post_data' ) );1230 1231 $changeset_data = array(1232 'blogname' => array(1233 'value' => 'Hello World',1234 ),1235 );1236 1237 wp_set_current_user( $this->factory()->user->create( array( 'role' => 'contributor' ) ) );1238 1239 $uuid = wp_generate_uuid4();1240 $post_id = wp_insert_post(1241 array(1242 'post_type' => 'customize_changeset',1243 'post_name' => strtoupper( $uuid ),1244 'post_content' => wp_json_encode( $changeset_data ),1245 )1246 );1247 $this->assertSame( $uuid, get_post( $post_id )->post_name, 'Expected lower-case UUID4 to be inserted.' );1248 $this->assertSame( $changeset_data, json_decode( get_post( $post_id )->post_content, true ) );1249 1250 $changeset_data['blogname']['value'] = 'Hola Mundo';1251 wp_update_post(1252 array(1253 'ID' => $post_id,1254 'post_status' => 'draft',1255 'post_content' => wp_json_encode( $changeset_data ),1256 )1257 );1258 $this->assertSame( $uuid, get_post( $post_id )->post_name, 'Expected post_name to not have been dropped for drafts.' );1259 $this->assertSame( $changeset_data, json_decode( get_post( $post_id )->post_content, true ) );1260 1261 $changeset_data['blogname']['value'] = 'Hallo Welt';1262 wp_update_post(1263 array(1264 'ID' => $post_id,1265 'post_status' => 'pending',1266 'post_content' => wp_json_encode( $changeset_data ),1267 )1268 );1269 $this->assertSame( $uuid, get_post( $post_id )->post_name, 'Expected post_name to not have been dropped for pending.' );1270 $this->assertSame( $changeset_data, json_decode( get_post( $post_id )->post_content, true ) );1271 }1272 1273 /**1274 446 * Test ensuring that the post_slug can be filtered with a custom value short circuiting the built in 1275 447 * function that tries to create a unique name based on the post name. … … 1296 468 public function filter_pre_wp_unique_post_slug( $default, $slug, $post_ID, $post_status, $post_type, $post_parent ) { 1297 469 return 'override-slug-' . $post_type; 1298 }1299 1300 /**1301 * @ticket 481131302 */1303 public function test_insert_post_should_respect_date_floating_post_status_arg() {1304 register_post_status( 'floating', array( 'date_floating' => true ) );1305 1306 $post_id = self::factory()->post->create(1307 array(1308 'post_status' => 'floating',1309 'post_date' => null,1310 'post_date_gmt' => null,1311 )1312 );1313 1314 $post = get_post( $post_id );1315 self::assertSame( '0000-00-00 00:00:00', $post->post_date_gmt );1316 }1317 1318 /**1319 * @ticket 481131320 */1321 public function test_insert_post_should_respect_date_floating_post_status_arg_not_set() {1322 register_post_status( 'not-floating', array( 'date_floating' => false ) );1323 1324 $post_id = self::factory()->post->create(1325 array(1326 'post_status' => 'floating',1327 'post_date' => null,1328 'post_date_gmt' => null,1329 )1330 );1331 1332 $post = get_post( $post_id );1333 self::assertEqualsWithDelta(1334 strtotime( gmdate( 'Y-m-d H:i:s' ) ),1335 strtotime( $post->post_date_gmt ),1336 2,1337 'The dates should be equal'1338 );1339 }1340 1341 /**1342 * Test ensuring that wp_update_post() does not unintentionally modify post tags1343 * if the post has several tags with the same name but different slugs.1344 *1345 * Tags should only be modified if 'tags_input' parameter was explicitly provided,1346 * and is different from the existing tags.1347 *1348 * @ticket 451211349 */1350 public function test_update_post_should_only_modify_post_tags_if_different_tags_input_was_provided() {1351 $tag_1 = wp_insert_term( 'wp_update_post_tag', 'post_tag', array( 'slug' => 'wp_update_post_tag_1' ) );1352 $tag_2 = wp_insert_term( 'wp_update_post_tag', 'post_tag', array( 'slug' => 'wp_update_post_tag_2' ) );1353 $tag_3 = wp_insert_term( 'wp_update_post_tag', 'post_tag', array( 'slug' => 'wp_update_post_tag_3' ) );1354 1355 $post_id = self::factory()->post->create(1356 array(1357 'tags_input' => array( $tag_1['term_id'], $tag_2['term_id'] ),1358 )1359 );1360 1361 $post = get_post( $post_id );1362 1363 $tags = wp_get_post_tags( $post->ID, array( 'fields' => 'ids' ) );1364 $this->assertSameSets( array( $tag_1['term_id'], $tag_2['term_id'] ), $tags );1365 1366 wp_update_post( $post );1367 1368 $tags = wp_get_post_tags( $post->ID, array( 'fields' => 'ids' ) );1369 $this->assertSameSets( array( $tag_1['term_id'], $tag_2['term_id'] ), $tags );1370 1371 wp_update_post(1372 array(1373 'ID' => $post->ID,1374 'tags_input' => array( $tag_2['term_id'], $tag_3['term_id'] ),1375 )1376 );1377 1378 $tags = wp_get_post_tags( $post->ID, array( 'fields' => 'ids' ) );1379 $this->assertSameSets( array( $tag_2['term_id'], $tag_3['term_id'] ), $tags );1380 }1381 1382 /**1383 * @ticket 521871384 */1385 public function test_insert_empty_post_date() {1386 $post_date_gmt = '2020-12-29 10:11:45';1387 $invalid_date = '2020-12-41 14:15:27';1388 1389 // Empty post_date_gmt with floating status1390 $post_id = self::factory()->post->create(1391 array(1392 'post_status' => 'draft',1393 )1394 );1395 $post = get_post( $post_id );1396 $this->assertEqualsWithDelta(1397 strtotime( gmdate( 'Y-m-d H:i:s' ) ),1398 strtotime( $post->post_date ),1399 2,1400 'The dates should be equal'1401 );1402 $this->assertSame( '0000-00-00 00:00:00', $post->post_date_gmt );1403 1404 $post_id = self::factory()->post->create(1405 array(1406 'post_date_gmt' => '0000-00-00 00:00:00',1407 'post_status' => 'draft',1408 )1409 );1410 $post = get_post( $post_id );1411 $this->assertEqualsWithDelta(1412 strtotime( gmdate( 'Y-m-d H:i:s' ) ),1413 strtotime( $post->post_date ),1414 2,1415 'The dates should be equal'1416 );1417 $this->assertSame( '0000-00-00 00:00:00', $post->post_date_gmt );1418 1419 // Empty post_date_gmt without floating status1420 $post_id = self::factory()->post->create(1421 array(1422 'post_status' => 'publish',1423 )1424 );1425 $post = get_post( $post_id );1426 $this->assertEqualsWithDelta(1427 strtotime( gmdate( 'Y-m-d H:i:s' ) ),1428 strtotime( $post->post_date ),1429 2,1430 'The dates should be equal'1431 );1432 $this->assertEqualsWithDelta(1433 strtotime( gmdate( 'Y-m-d H:i:s' ) ),1434 strtotime( get_gmt_from_date( $post->post_date ) ),1435 2,1436 'The dates should be equal'1437 );1438 1439 $post_id = self::factory()->post->create(1440 array(1441 'post_date_gmt' => '0000-00-00 00:00:00',1442 'post_status' => 'publish',1443 )1444 );1445 $post = get_post( $post_id );1446 $this->assertEqualsWithDelta(1447 strtotime( gmdate( 'Y-m-d H:i:s' ) ),1448 strtotime( $post->post_date ),1449 2,1450 'The dates should be equal'1451 );1452 $this->assertEqualsWithDelta(1453 strtotime( gmdate( 'Y-m-d H:i:s' ) ),1454 strtotime( get_gmt_from_date( $post->post_date ) ),1455 2,1456 'The dates should be equal'1457 );1458 1459 // Valid post_date_gmt1460 $post_id = self::factory()->post->create(1461 array(1462 'post_date_gmt' => $post_date_gmt,1463 )1464 );1465 $post = get_post( $post_id );1466 $this->assertSame( get_date_from_gmt( $post_date_gmt ), $post->post_date );1467 $this->assertSame( $post_date_gmt, $post->post_date_gmt );1468 1469 // Invalid post_date_gmt1470 $post_id = self::factory()->post->create(1471 array(1472 'post_date_gmt' => $invalid_date,1473 )1474 );1475 $post = get_post( $post_id );1476 $this->assertSame( '1970-01-01 00:00:00', $post->post_date );1477 $this->assertSame( '0000-00-00 00:00:00', $post->post_date_gmt );1478 }1479 1480 /**1481 * @ticket 521871482 */1483 public function test_insert_valid_post_date() {1484 $post_date = '2020-12-28 11:26:35';1485 $post_date_gmt = '2020-12-29 10:11:45';1486 $invalid_date = '2020-12-41 14:15:27';1487 1488 // Empty post_date_gmt with floating status1489 $post_id = self::factory()->post->create(1490 array(1491 'post_date' => $post_date,1492 'post_status' => 'draft',1493 )1494 );1495 $post = get_post( $post_id );1496 $this->assertSame( $post_date, $post->post_date );1497 $this->assertSame( '0000-00-00 00:00:00', $post->post_date_gmt );1498 1499 $post_id = self::factory()->post->create(1500 array(1501 'post_date' => $post_date,1502 'post_date_gmt' => '0000-00-00 00:00:00',1503 'post_status' => 'draft',1504 )1505 );1506 $post = get_post( $post_id );1507 $this->assertSame( $post_date, $post->post_date );1508 $this->assertSame( '0000-00-00 00:00:00', $post->post_date_gmt );1509 1510 // Empty post_date_gmt without floating status1511 $post_id = self::factory()->post->create(1512 array(1513 'post_date' => $post_date,1514 'post_status' => 'publish',1515 )1516 );1517 $post = get_post( $post_id );1518 $this->assertSame( $post_date, $post->post_date );1519 $this->assertSame( get_gmt_from_date( $post_date ), $post->post_date_gmt );1520 1521 $post_id = self::factory()->post->create(1522 array(1523 'post_date' => $post_date,1524 'post_date_gmt' => '0000-00-00 00:00:00',1525 'post_status' => 'publish',1526 )1527 );1528 $post = get_post( $post_id );1529 $this->assertSame( $post_date, $post->post_date );1530 $this->assertSame( get_gmt_from_date( $post_date ), $post->post_date_gmt );1531 1532 // Valid post_date_gmt1533 $post_id = self::factory()->post->create(1534 array(1535 'post_date' => $post_date,1536 'post_date_gmt' => $post_date_gmt,1537 )1538 );1539 $post = get_post( $post_id );1540 $this->assertSame( $post_date, $post->post_date );1541 $this->assertSame( $post_date_gmt, $post->post_date_gmt );1542 1543 // Invalid post_date_gmt1544 $post_id = self::factory()->post->create(1545 array(1546 'post_date' => $post_date,1547 'post_date_gmt' => $invalid_date,1548 )1549 );1550 $post = get_post( $post_id );1551 $this->assertSame( $post_date, $post->post_date );1552 $this->assertSame( '0000-00-00 00:00:00', $post->post_date_gmt );1553 }1554 1555 /**1556 * @ticket 521871557 */1558 public function test_insert_invalid_post_date() {1559 $post_date = '2020-12-28 11:26:35';1560 $post_date_gmt = '2020-12-29 10:11:45';1561 $invalid_date = '2020-12-41 14:15:27';1562 1563 // Empty post_date_gmt with floating status1564 $post_id = self::factory()->post->create(1565 array(1566 'post_date' => $invalid_date,1567 'post_status' => 'draft',1568 )1569 );1570 $this->assertSame( 0, $post_id );1571 1572 $post_id = self::factory()->post->create(1573 array(1574 'post_date' => $invalid_date,1575 'post_date_gmt' => '0000-00-00 00:00:00',1576 'post_status' => 'draft',1577 )1578 );1579 $this->assertSame( 0, $post_id );1580 1581 // Empty post_date_gmt without floating status1582 $post_id = self::factory()->post->create(1583 array(1584 'post_date' => $invalid_date,1585 'post_status' => 'publish',1586 )1587 );1588 $this->assertSame( 0, $post_id );1589 1590 $post_id = self::factory()->post->create(1591 array(1592 'post_date' => $invalid_date,1593 'post_date_gmt' => '0000-00-00 00:00:00',1594 'post_status' => 'publish',1595 )1596 );1597 $this->assertSame( 0, $post_id );1598 1599 // Valid post_date_gmt1600 $post_id = self::factory()->post->create(1601 array(1602 'post_date' => $invalid_date,1603 'post_date_gmt' => $post_date_gmt,1604 )1605 );1606 $this->assertSame( 0, $post_id );1607 1608 // Invalid post_date_gmt1609 $post_id = self::factory()->post->create(1610 array(1611 'post_date' => $invalid_date,1612 'post_date_gmt' => $invalid_date,1613 )1614 );1615 $this->assertSame( 0, $post_id );1616 470 } 1617 471 -
trunk/tests/phpunit/tests/post/wpInsertPost.php
r52010 r53785 3 3 /** 4 4 * @group post 5 * @covers ::wp_insert_post 5 6 */ 6 7 class Tests_Post_wpInsertPost extends WP_UnitTestCase { … … 8 9 protected static $user_ids = array( 9 10 'administrator' => null, 11 'editor' => null, 10 12 'contributor' => null, 11 13 ); … … 18 20 ) 19 21 ), 22 'editor' => $factory->user->create( 23 array( 24 'role' => 'editor', 25 ) 26 ), 20 27 'contributor' => $factory->user->create( 21 28 array( … … 67 74 68 75 /** 76 * Helper function: return the timestamp(s) of cron jobs for the specified hook and post. 77 */ 78 private function next_schedule_for_post( $hook, $post_id ) { 79 return wp_next_scheduled( 'publish_future_post', array( 0 => (int) $post_id ) ); 80 } 81 82 /** 83 * Helper function, unsets current user globally. 84 */ 85 private function unset_current_user() { 86 global $current_user, $user_ID; 87 88 $current_user = null; 89 $user_ID = null; 90 } 91 92 /** 93 * Test simple valid behavior: insert and get a post. 94 * 95 * @dataProvider data_vb_insert_get_delete 96 */ 97 public function test_vb_insert_get_delete( $post_type ) { 98 register_post_type( 99 'cpt', 100 array( 101 'taxonomies' => array( 'post_tag', 'ctax' ), 102 ) 103 ); 104 register_taxonomy( 'ctax', 'cpt' ); 105 106 wp_set_current_user( self::$user_ids['editor'] ); 107 108 $data = array( 109 'post_author' => self::$user_ids['editor'], 110 'post_status' => 'publish', 111 'post_content' => "{$post_type}_content", 112 'post_title' => "{$post_type}_title", 113 'tax_input' => array( 114 'post_tag' => 'tag1,tag2', 115 'ctax' => 'cterm1,cterm2', 116 ), 117 'post_type' => $post_type, 118 ); 119 120 // Insert a post and make sure the ID is OK. 121 $post_id = wp_insert_post( $data ); 122 $this->assertIsInt( $post_id ); 123 $this->assertGreaterThan( 0, $post_id ); 124 125 // Fetch the post and make sure it matches. 126 $post = get_post( $post_id ); 127 128 $this->assertSame( $data['post_content'], $post->post_content ); 129 $this->assertSame( $data['post_title'], $post->post_title ); 130 $this->assertSame( $data['post_status'], $post->post_status ); 131 $this->assertEquals( $data['post_author'], $post->post_author ); 132 133 // Test cache state. 134 $post_cache = wp_cache_get( $post_id, 'posts' ); 135 $this->assertInstanceOf( 'stdClass', $post_cache ); 136 $this->assertSame( $post_id, $post_cache->ID ); 137 138 update_object_term_cache( $post_id, $post_type ); 139 $term_cache = wp_cache_get( $post_id, 'post_tag_relationships' ); 140 $this->assertIsArray( $term_cache ); 141 $this->assertCount( 2, $term_cache ); 142 143 $term_cache = wp_cache_get( $post_id, 'ctax_relationships' ); 144 if ( 'cpt' === $post_type ) { 145 $this->assertIsArray( $term_cache ); 146 $this->assertCount( 2, $term_cache ); 147 } else { 148 $this->assertFalse( $term_cache ); 149 } 150 151 wp_delete_post( $post_id, true ); 152 153 $this->assertFalse( wp_cache_get( $post_id, 'posts' ) ); 154 $this->assertFalse( wp_cache_get( $post_id, 'post_tag_relationships' ) ); 155 $this->assertFalse( wp_cache_get( $post_id, 'ctax_relationships' ) ); 156 157 $GLOBALS['wp_taxonomies']['post_tag']->object_type = array( 'post' ); 158 } 159 160 public function data_vb_insert_get_delete() { 161 $post_types = array( 'post', 'cpt' ); 162 163 return $this->text_array_to_dataprovider( $post_types ); 164 } 165 166 /** 167 * Insert a post with a future date, and make sure the status and cron schedule are correct. 168 */ 169 public function test_vb_insert_future() { 170 $future_date = strtotime( '+1 day' ); 171 172 $data = array( 173 'post_author' => self::$user_ids['editor'], 174 'post_status' => 'publish', 175 'post_content' => 'content', 176 'post_title' => 'title', 177 'post_date' => date_format( date_create( "@{$future_date}" ), 'Y-m-d H:i:s' ), 178 ); 179 180 // Insert a post and make sure the ID is OK. 181 $post_id = wp_insert_post( $data ); 182 $this->assertIsInt( $post_id ); 183 $this->assertGreaterThan( 0, $post_id ); 184 185 // Fetch the post and make sure it matches. 186 $post = get_post( $post_id ); 187 188 $this->assertSame( $data['post_content'], $post->post_content ); 189 $this->assertSame( $data['post_title'], $post->post_title ); 190 $this->assertSame( 'future', $post->post_status ); 191 $this->assertEquals( $data['post_author'], $post->post_author ); 192 $this->assertSame( $data['post_date'], $post->post_date ); 193 194 // There should be a publish_future_post hook scheduled on the future date. 195 $this->assertSame( $future_date, $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 196 } 197 198 /** 199 * Insert a post with a future date, and make sure the status and cron schedule are correct. 200 */ 201 public function test_vb_insert_future_over_dst() { 202 // Some magic days - one DST one not. 203 $future_date_1 = strtotime( 'June 21st +1 year' ); 204 $future_date_2 = strtotime( 'Jan 11th +1 year' ); 205 206 $data = array( 207 'post_author' => self::$user_ids['editor'], 208 'post_status' => 'publish', 209 'post_content' => 'content', 210 'post_title' => 'title', 211 'post_date' => date_format( date_create( "@{$future_date_1}" ), 'Y-m-d H:i:s' ), 212 ); 213 214 // Insert a post and make sure the ID is OK. 215 $post_id = wp_insert_post( $data ); 216 217 // Fetch the post and make sure has the correct date and status. 218 $post = get_post( $post_id ); 219 $this->assertSame( 'future', $post->post_status ); 220 $this->assertSame( $data['post_date'], $post->post_date ); 221 222 // Check that there's a publish_future_post job scheduled at the right time. 223 $this->assertSame( $future_date_1, $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 224 225 // Now save it again with a date further in the future. 226 $data['ID'] = $post_id; 227 $data['post_date'] = date_format( date_create( "@{$future_date_2}" ), 'Y-m-d H:i:s' ); 228 $data['post_date_gmt'] = null; 229 wp_update_post( $data ); 230 231 // Fetch the post again and make sure it has the new post_date. 232 $post = get_post( $post_id ); 233 $this->assertSame( 'future', $post->post_status ); 234 $this->assertSame( $data['post_date'], $post->post_date ); 235 236 // And the correct date on the cron job. 237 $this->assertSame( $future_date_2, $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 238 } 239 240 /** 241 * Future post bug: posts get published at the wrong time if you edit the timestamp. 242 * 243 * @ticket 4710 244 */ 245 public function test_vb_insert_future_edit_bug() { 246 $future_date_1 = strtotime( '+1 day' ); 247 $future_date_2 = strtotime( '+2 day' ); 248 249 $data = array( 250 'post_author' => self::$user_ids['editor'], 251 'post_status' => 'publish', 252 'post_content' => 'content', 253 'post_title' => 'title', 254 'post_date' => date_format( date_create( "@{$future_date_1}" ), 'Y-m-d H:i:s' ), 255 ); 256 257 // Insert a post and make sure the ID is OK. 258 $post_id = wp_insert_post( $data ); 259 260 // Fetch the post and make sure has the correct date and status. 261 $post = get_post( $post_id ); 262 $this->assertSame( 'future', $post->post_status ); 263 $this->assertSame( $data['post_date'], $post->post_date ); 264 265 // Check that there's a publish_future_post job scheduled at the right time. 266 $this->assertSame( $future_date_1, $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 267 268 // Now save it again with a date further in the future. 269 $data['ID'] = $post_id; 270 $data['post_date'] = date_format( date_create( "@{$future_date_2}" ), 'Y-m-d H:i:s' ); 271 $data['post_date_gmt'] = null; 272 wp_update_post( $data ); 273 274 // Fetch the post again and make sure it has the new post_date. 275 $post = get_post( $post_id ); 276 $this->assertSame( 'future', $post->post_status ); 277 $this->assertSame( $data['post_date'], $post->post_date ); 278 279 // And the correct date on the cron job. 280 $this->assertSame( $future_date_2, $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 281 } 282 283 /** 284 * Insert a draft post with a future date, and make sure no cron schedule is set. 285 */ 286 public function test_vb_insert_future_draft() { 287 $future_date = strtotime( '+1 day' ); 288 289 $data = array( 290 'post_author' => self::$user_ids['editor'], 291 'post_status' => 'draft', 292 'post_content' => 'content', 293 'post_title' => 'title', 294 'post_date' => date_format( date_create( "@{$future_date}" ), 'Y-m-d H:i:s' ), 295 ); 296 297 // Insert a post and make sure the ID is OK. 298 $post_id = wp_insert_post( $data ); 299 $this->assertIsInt( $post_id ); 300 $this->assertGreaterThan( 0, $post_id ); 301 302 // Fetch the post and make sure it matches. 303 $post = get_post( $post_id ); 304 305 $this->assertSame( $data['post_content'], $post->post_content ); 306 $this->assertSame( $data['post_title'], $post->post_title ); 307 $this->assertSame( 'draft', $post->post_status ); 308 $this->assertEquals( $data['post_author'], $post->post_author ); 309 $this->assertSame( $data['post_date'], $post->post_date ); 310 311 // There should be a publish_future_post hook scheduled on the future date. 312 $this->assertFalse( $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 313 314 } 315 316 /** 317 * Insert a future post, then edit and change it to draft, and make sure cron gets it right. 318 */ 319 public function test_vb_insert_future_change_to_draft() { 320 $future_date_1 = strtotime( '+1 day' ); 321 322 $data = array( 323 'post_author' => self::$user_ids['editor'], 324 'post_status' => 'publish', 325 'post_content' => 'content', 326 'post_title' => 'title', 327 'post_date' => date_format( date_create( "@{$future_date_1}" ), 'Y-m-d H:i:s' ), 328 ); 329 330 // Insert a post and make sure the ID is OK. 331 $post_id = wp_insert_post( $data ); 332 333 // Fetch the post and make sure has the correct date and status. 334 $post = get_post( $post_id ); 335 $this->assertSame( 'future', $post->post_status ); 336 $this->assertSame( $data['post_date'], $post->post_date ); 337 338 // Check that there's a publish_future_post job scheduled at the right time. 339 $this->assertSame( $future_date_1, $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 340 341 // Now save it again with status set to draft. 342 $data['ID'] = $post_id; 343 $data['post_status'] = 'draft'; 344 wp_update_post( $data ); 345 346 // Fetch the post again and make sure it has the new post_date. 347 $post = get_post( $post_id ); 348 $this->assertSame( 'draft', $post->post_status ); 349 $this->assertSame( $data['post_date'], $post->post_date ); 350 351 // And the correct date on the cron job. 352 $this->assertFalse( $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 353 } 354 355 /** 356 * Insert a future post, then edit and change the status, and make sure cron gets it right. 357 * 358 * @dataProvider data_vb_insert_future_change_status 359 */ 360 public function test_vb_insert_future_change_status( $status ) { 361 $future_date_1 = strtotime( '+1 day' ); 362 363 $data = array( 364 'post_author' => self::$user_ids['editor'], 365 'post_status' => 'publish', 366 'post_content' => "{$status}_content", 367 'post_title' => "{$status}_title", 368 'post_date' => date_format( date_create( "@{$future_date_1}" ), 'Y-m-d H:i:s' ), 369 ); 370 371 // Insert a post and make sure the ID is OK. 372 $post_id = wp_insert_post( $data ); 373 374 // Fetch the post and make sure has the correct date and status. 375 $post = get_post( $post_id ); 376 $this->assertSame( 'future', $post->post_status ); 377 $this->assertSame( $data['post_date'], $post->post_date ); 378 379 // Check that there's a publish_future_post job scheduled at the right time. 380 $this->assertSame( $future_date_1, $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 381 382 // Now save it again with status changed. 383 $data['ID'] = $post_id; 384 $data['post_status'] = $status; 385 wp_update_post( $data ); 386 387 // Fetch the post again and make sure it has the new post_date. 388 $post = get_post( $post_id ); 389 $this->assertSame( $status, $post->post_status ); 390 $this->assertSame( $data['post_date'], $post->post_date ); 391 392 // And the correct date on the cron job. 393 $this->assertFalse( $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 394 } 395 396 public function data_vb_insert_future_change_status() { 397 $statuses = array( 398 'draft', 399 'static', 400 'object', 401 'attachment', 402 'inherit', 403 'pending', 404 ); 405 406 return $this->text_array_to_dataprovider( $statuses ); 407 } 408 409 /** 410 * Insert a draft post with a future date, and make sure no cron schedule is set. 411 */ 412 public function test_vb_insert_future_private() { 413 $future_date = strtotime( '+1 day' ); 414 415 $data = array( 416 'post_author' => self::$user_ids['editor'], 417 'post_status' => 'private', 418 'post_content' => 'content', 419 'post_title' => 'title', 420 'post_date' => date_format( date_create( "@{$future_date}" ), 'Y-m-d H:i:s' ), 421 ); 422 423 // Insert a post and make sure the ID is OK. 424 $post_id = wp_insert_post( $data ); 425 $this->assertIsInt( $post_id ); 426 $this->assertGreaterThan( 0, $post_id ); 427 428 // Fetch the post and make sure it matches. 429 $post = get_post( $post_id ); 430 431 $this->assertSame( $data['post_content'], $post->post_content ); 432 $this->assertSame( $data['post_title'], $post->post_title ); 433 $this->assertSame( 'private', $post->post_status ); 434 $this->assertEquals( $data['post_author'], $post->post_author ); 435 $this->assertSame( $data['post_date'], $post->post_date ); 436 437 // There should be a publish_future_post hook scheduled on the future date. 438 $this->assertFalse( $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 439 } 440 441 /** 442 * Insert a post with an invalid date, make sure it fails. 443 * 444 * @ticket 17180 445 */ 446 public function test_vb_insert_invalid_date() { 447 $data = array( 448 'post_author' => self::$user_ids['editor'], 449 'post_status' => 'publish', 450 'post_content' => 'content', 451 'post_title' => 'title', 452 'post_date' => '2012-02-30 00:00:00', 453 ); 454 455 // Test both return paths with or without WP_Error. 456 $post_id = wp_insert_post( $data, true ); 457 $this->assertWPError( $post_id ); 458 $this->assertSame( 'invalid_date', $post_id->get_error_code() ); 459 460 $post_id = wp_insert_post( $data ); 461 $this->assertSame( 0, $post_id ); 462 } 463 464 /** 465 * Insert a future post, then edit and change it to private, and make sure cron gets it right. 466 */ 467 public function test_vb_insert_future_change_to_private() { 468 $future_date_1 = strtotime( '+1 day' ); 469 470 $data = array( 471 'post_author' => self::$user_ids['editor'], 472 'post_status' => 'publish', 473 'post_content' => 'content', 474 'post_title' => 'title', 475 'post_date' => date_format( date_create( "@{$future_date_1}" ), 'Y-m-d H:i:s' ), 476 ); 477 478 // Insert a post and make sure the ID is OK. 479 $post_id = wp_insert_post( $data ); 480 481 // Fetch the post and make sure has the correct date and status. 482 $post = get_post( $post_id ); 483 $this->assertSame( 'future', $post->post_status ); 484 $this->assertSame( $data['post_date'], $post->post_date ); 485 486 // Check that there's a publish_future_post job scheduled at the right time. 487 $this->assertSame( $future_date_1, $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 488 489 // Now save it again with status set to draft. 490 $data['ID'] = $post_id; 491 $data['post_status'] = 'private'; 492 wp_update_post( $data ); 493 494 // Fetch the post again and make sure it has the new post_date. 495 $post = get_post( $post_id ); 496 $this->assertSame( 'private', $post->post_status ); 497 $this->assertSame( $data['post_date'], $post->post_date ); 498 499 // And the correct date on the cron job. 500 $this->assertFalse( $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 501 } 502 503 /** 504 * @ticket 5305 505 */ 506 public function test_wp_insert_post_should_not_allow_a_bare_numeric_slug_that_might_conflict_with_a_date_archive_when_generating_from_an_empty_post_title() { 507 $this->set_permalink_structure( '/%postname%/' ); 508 509 $post_id = wp_insert_post( 510 array( 511 'post_title' => '', 512 'post_content' => 'test', 513 'post_status' => 'publish', 514 'post_type' => 'post', 515 ) 516 ); 517 518 $post = get_post( $post_id ); 519 520 $this->assertSame( "$post_id-2", $post->post_name ); 521 } 522 523 /** 524 * @ticket 5305 525 * @ticket 33392 526 */ 527 public function test_wp_insert_post_should_invalidate_post_cache_before_generating_guid_when_post_name_is_empty_and_is_generated_from_the_post_ID() { 528 register_post_type( 'wptests_pt' ); 529 530 $post_id = wp_insert_post( 531 array( 532 'post_title' => '', 533 'post_type' => 'wptests_pt', 534 'post_status' => 'publish', 535 ) 536 ); 537 538 $post = get_post( $post_id ); 539 540 $this->assertStringContainsString( 'wptests_pt=' . $post_id, $post->guid ); 541 } 542 543 /** 544 * @ticket 55877 545 * @covers ::wp_insert_post 546 */ 547 public function test_wp_insert_post_should_not_trigger_warning_for_pending_posts_with_unknown_cpt() { 548 $post_id = wp_insert_post( 549 array( 550 'post_title' => 'title', 551 'post_type' => 'unknown', 552 'post_status' => 'pending', 553 ) 554 ); 555 556 $this->assertIsInt( $post_id ); 557 $this->assertGreaterThan( 0, $post_id ); 558 } 559 560 /** 561 * @ticket 20451 562 */ 563 public function test_wp_insert_post_with_meta_input() { 564 $post_id = wp_insert_post( 565 array( 566 'post_title' => '', 567 'post_content' => 'test', 568 'post_status' => 'publish', 569 'post_type' => 'post', 570 'meta_input' => array( 571 'hello' => 'world', 572 'foo' => 'bar', 573 ), 574 ) 575 ); 576 577 $this->assertSame( 'world', get_post_meta( $post_id, 'hello', true ) ); 578 $this->assertSame( 'bar', get_post_meta( $post_id, 'foo', true ) ); 579 } 580 581 /** 582 * "When I delete a future post using wp_delete_post( $post->ID ) it does not update the cron correctly." 583 * 584 * @ticket 5364 585 * @covers ::wp_delete_post 586 */ 587 public function test_delete_future_post_cron() { 588 $future_date = strtotime( '+1 day' ); 589 590 $data = array( 591 'post_author' => self::$user_ids['editor'], 592 'post_status' => 'publish', 593 'post_content' => 'content', 594 'post_title' => 'title', 595 'post_date' => date_format( date_create( "@{$future_date}" ), 'Y-m-d H:i:s' ), 596 ); 597 598 // Insert a post and make sure the ID is OK. 599 $post_id = wp_insert_post( $data ); 600 601 // Check that there's a publish_future_post job scheduled at the right time. 602 $this->assertSame( $future_date, $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 603 604 // Now delete the post and make sure the cron entry is removed. 605 wp_delete_post( $post_id ); 606 607 $this->assertFalse( $this->next_schedule_for_post( 'publish_future_post', $post_id ) ); 608 } 609 610 /** 611 * Bug: permalink doesn't work if post title is empty. 612 * 613 * Might only fail if the post ID is greater than four characters. 614 * 615 * @ticket 5305 616 */ 617 public function test_permalink_without_title() { 618 $this->set_permalink_structure( '/%year%/%monthnum%/%day%/%postname%/' ); 619 620 $data = array( 621 'post_author' => self::$user_ids['editor'], 622 'post_status' => 'publish', 623 'post_content' => 'content', 624 'post_title' => '', 625 'post_date' => '2007-10-31 06:15:00', 626 ); 627 628 // Insert a post and make sure the ID is OK. 629 $post_id = wp_insert_post( $data ); 630 631 // Permalink should include the post ID at the end. 632 $expected = get_option( 'siteurl' ) . '/2007/10/31/' . $post_id . '/'; 633 $this->assertSame( $expected, get_permalink( $post_id ) ); 634 } 635 636 /** 637 * @ticket 23708 638 */ 639 public function test_get_post_ancestors_within_loop() { 640 global $post; 641 642 $parent_id = self::factory()->post->create(); 643 $post = self::factory()->post->create_and_get( 644 array( 645 'post_parent' => $parent_id, 646 ) 647 ); 648 649 $this->assertSame( array( $parent_id ), get_post_ancestors( 0 ) ); 650 } 651 652 /** 653 * @ticket 23474 654 * @covers ::wp_update_post 655 */ 656 public function test_update_invalid_post_id() { 657 $post_id = self::factory()->post->create(); 658 $post = get_post( $post_id, ARRAY_A ); 659 660 $post['ID'] = 123456789; 661 662 $this->assertSame( 0, wp_insert_post( $post ) ); 663 $this->assertSame( 0, wp_update_post( $post ) ); 664 665 $this->assertInstanceOf( 'WP_Error', wp_insert_post( $post, true ) ); 666 $this->assertInstanceOf( 'WP_Error', wp_update_post( $post, true ) ); 667 668 } 669 670 /** 671 * @ticket 19373 672 */ 673 public function test_insert_programmatic_sanitized() { 674 $this->unset_current_user(); 675 676 register_taxonomy( 'test_tax', 'post' ); 677 678 $title = 'title'; 679 $data = array( 680 'post_author' => self::$user_ids['editor'], 681 'post_status' => 'publish', 682 'post_content' => 'content', 683 'post_title' => $title, 684 'tax_input' => array( 685 'test_tax' => array( 'term', 'term2', 'term3' ), 686 ), 687 ); 688 689 $post_id = wp_insert_post( $data, true, true ); 690 $this->assertIsInt( $post_id ); 691 $this->assertGreaterThan( 0, $post_id ); 692 693 $post = get_post( $post_id ); 694 $this->assertEquals( self::$user_ids['editor'], $post->post_author ); 695 $this->assertSame( $title, $post->post_title ); 696 } 697 698 /** 699 * @ticket 31168 700 */ 701 public function test_wp_insert_post_default_comment_ping_status_open() { 702 $post_id = self::factory()->post->create( 703 array( 704 'post_author' => self::$user_ids['editor'], 705 'post_status' => 'publish', 706 'post_content' => 'content', 707 'post_title' => 'title', 708 ) 709 ); 710 $post = get_post( $post_id ); 711 712 $this->assertSame( 'open', $post->comment_status ); 713 $this->assertSame( 'open', $post->ping_status ); 714 } 715 716 /** 717 * @ticket 31168 718 */ 719 public function test_wp_insert_post_page_default_comment_ping_status_closed() { 720 $post_id = self::factory()->post->create( 721 array( 722 'post_author' => self::$user_ids['editor'], 723 'post_status' => 'publish', 724 'post_content' => 'content', 725 'post_title' => 'title', 726 'post_type' => 'page', 727 ) 728 ); 729 $post = get_post( $post_id ); 730 731 $this->assertSame( 'closed', $post->comment_status ); 732 $this->assertSame( 'closed', $post->ping_status ); 733 } 734 735 /** 736 * @ticket 31168 737 */ 738 public function test_wp_insert_post_cpt_default_comment_ping_status_open() { 739 $post_type = rand_str( 20 ); 740 register_post_type( $post_type, array( 'supports' => array( 'comments', 'trackbacks' ) ) ); 741 742 $post_id = self::factory()->post->create( 743 array( 744 'post_author' => self::$user_ids['editor'], 745 'post_status' => 'publish', 746 'post_content' => rand_str(), 747 'post_title' => rand_str(), 748 'post_type' => $post_type, 749 ) 750 ); 751 $post = get_post( $post_id ); 752 753 _unregister_post_type( $post_type ); 754 755 $this->assertSame( 'open', $post->comment_status ); 756 $this->assertSame( 'open', $post->ping_status ); 757 } 758 759 /** 760 * @ticket 31168 761 */ 762 public function test_wp_insert_post_cpt_default_comment_ping_status_closed() { 763 $post_type = rand_str( 20 ); 764 register_post_type( $post_type ); 765 766 $post_id = self::factory()->post->create( 767 array( 768 'post_author' => self::$user_ids['editor'], 769 'post_status' => 'publish', 770 'post_content' => rand_str(), 771 'post_title' => rand_str(), 772 'post_type' => $post_type, 773 ) 774 ); 775 $post = get_post( $post_id ); 776 777 _unregister_post_type( $post_type ); 778 779 $this->assertSame( 'closed', $post->comment_status ); 780 $this->assertSame( 'closed', $post->ping_status ); 781 } 782 783 /** 784 * If a post is updated without providing a post_name param, 785 * a new slug should not be generated. 786 * 787 * @ticket 34865 788 */ 789 public function test_post_updates_without_slug_provided() { 790 $post_id = self::factory()->post->create( 791 array( 792 'post_title' => 'Stuff', 793 'post_status' => 'publish', 794 ) 795 ); 796 797 $data = array( 798 'ID' => $post_id, 799 'post_title' => 'Stuff and Things', 800 ); 801 802 wp_insert_post( $data ); 803 804 $updated_post = get_post( $post_id ); 805 // Ensure changing the post_title didn't modify the post_name. 806 $this->assertSame( 'stuff', $updated_post->post_name ); 807 } 808 809 /** 810 * @ticket 32585 811 */ 812 public function test_wp_insert_post_author_zero() { 813 $post_id = self::factory()->post->create( array( 'post_author' => 0 ) ); 814 815 $this->assertEquals( 0, get_post( $post_id )->post_author ); 816 } 817 818 /** 819 * @ticket 32585 820 */ 821 public function test_wp_insert_post_author_null() { 822 wp_set_current_user( self::$user_ids['editor'] ); 823 824 $post_id = self::factory()->post->create( array( 'post_author' => null ) ); 825 826 $this->assertEquals( self::$user_ids['editor'], get_post( $post_id )->post_author ); 827 } 828 829 /** 830 * @ticket 15946 831 */ 832 public function test_wp_insert_post_should_respect_post_date_gmt() { 833 $data = array( 834 'post_author' => self::$user_ids['editor'], 835 'post_status' => 'publish', 836 'post_content' => 'content', 837 'post_title' => 'title', 838 'post_date_gmt' => '2014-01-01 12:00:00', 839 ); 840 841 // Insert a post and make sure the ID is OK. 842 $post_id = wp_insert_post( $data ); 843 844 $post = get_post( $post_id ); 845 846 $this->assertSame( $data['post_content'], $post->post_content ); 847 $this->assertSame( $data['post_title'], $post->post_title ); 848 $this->assertEquals( $data['post_author'], $post->post_author ); 849 $this->assertSame( get_date_from_gmt( $data['post_date_gmt'] ), $post->post_date ); 850 $this->assertSame( $data['post_date_gmt'], $post->post_date_gmt ); 851 } 852 853 /** 854 * Test ensuring that the post_name (UUID) is preserved when wp_insert_post()/wp_update_post() is called. 855 * 856 * @see _wp_customize_changeset_filter_insert_post_data() 857 * @ticket 30937 858 */ 859 public function test_wp_insert_post_for_customize_changeset_should_not_drop_post_name() { 860 $this->assertSame( 10, has_filter( 'wp_insert_post_data', '_wp_customize_changeset_filter_insert_post_data' ) ); 861 862 $changeset_data = array( 863 'blogname' => array( 864 'value' => 'Hello World', 865 ), 866 ); 867 868 wp_set_current_user( self::$user_ids['contributor'] ); 869 870 $uuid = wp_generate_uuid4(); 871 $post_id = wp_insert_post( 872 array( 873 'post_type' => 'customize_changeset', 874 'post_name' => strtoupper( $uuid ), 875 'post_content' => wp_json_encode( $changeset_data ), 876 ) 877 ); 878 $this->assertSame( $uuid, get_post( $post_id )->post_name, 'Expected lower-case UUID4 to be inserted.' ); 879 $this->assertSame( $changeset_data, json_decode( get_post( $post_id )->post_content, true ) ); 880 881 $changeset_data['blogname']['value'] = 'Hola Mundo'; 882 wp_update_post( 883 array( 884 'ID' => $post_id, 885 'post_status' => 'draft', 886 'post_content' => wp_json_encode( $changeset_data ), 887 ) 888 ); 889 $this->assertSame( $uuid, get_post( $post_id )->post_name, 'Expected post_name to not have been dropped for drafts.' ); 890 $this->assertSame( $changeset_data, json_decode( get_post( $post_id )->post_content, true ) ); 891 892 $changeset_data['blogname']['value'] = 'Hallo Welt'; 893 wp_update_post( 894 array( 895 'ID' => $post_id, 896 'post_status' => 'pending', 897 'post_content' => wp_json_encode( $changeset_data ), 898 ) 899 ); 900 $this->assertSame( $uuid, get_post( $post_id )->post_name, 'Expected post_name to not have been dropped for pending.' ); 901 $this->assertSame( $changeset_data, json_decode( get_post( $post_id )->post_content, true ) ); 902 } 903 904 /** 905 * @ticket 48113 906 */ 907 public function test_insert_post_should_respect_date_floating_post_status_arg() { 908 register_post_status( 'floating', array( 'date_floating' => true ) ); 909 910 $post_id = self::factory()->post->create( 911 array( 912 'post_status' => 'floating', 913 'post_date' => null, 914 'post_date_gmt' => null, 915 ) 916 ); 917 918 $post = get_post( $post_id ); 919 self::assertSame( '0000-00-00 00:00:00', $post->post_date_gmt ); 920 } 921 922 /** 923 * @ticket 48113 924 */ 925 public function test_insert_post_should_respect_date_floating_post_status_arg_not_set() { 926 register_post_status( 'not-floating', array( 'date_floating' => false ) ); 927 928 $post_id = self::factory()->post->create( 929 array( 930 'post_status' => 'floating', 931 'post_date' => null, 932 'post_date_gmt' => null, 933 ) 934 ); 935 936 $post = get_post( $post_id ); 937 self::assertEqualsWithDelta( 938 strtotime( gmdate( 'Y-m-d H:i:s' ) ), 939 strtotime( $post->post_date_gmt ), 940 2, 941 'The dates should be equal' 942 ); 943 } 944 945 /** 946 * Test ensuring that wp_update_post() does not unintentionally modify post tags 947 * if the post has several tags with the same name but different slugs. 948 * 949 * Tags should only be modified if 'tags_input' parameter was explicitly provided, 950 * and is different from the existing tags. 951 * 952 * @ticket 45121 953 * @covers ::wp_update_post 954 */ 955 public function test_update_post_should_only_modify_post_tags_if_different_tags_input_was_provided() { 956 $tag_1 = wp_insert_term( 'wp_update_post_tag', 'post_tag', array( 'slug' => 'wp_update_post_tag_1' ) ); 957 $tag_2 = wp_insert_term( 'wp_update_post_tag', 'post_tag', array( 'slug' => 'wp_update_post_tag_2' ) ); 958 $tag_3 = wp_insert_term( 'wp_update_post_tag', 'post_tag', array( 'slug' => 'wp_update_post_tag_3' ) ); 959 960 $post_id = self::factory()->post->create( 961 array( 962 'tags_input' => array( $tag_1['term_id'], $tag_2['term_id'] ), 963 ) 964 ); 965 966 $post = get_post( $post_id ); 967 968 $tags = wp_get_post_tags( $post->ID, array( 'fields' => 'ids' ) ); 969 $this->assertSameSets( array( $tag_1['term_id'], $tag_2['term_id'] ), $tags ); 970 971 wp_update_post( $post ); 972 973 $tags = wp_get_post_tags( $post->ID, array( 'fields' => 'ids' ) ); 974 $this->assertSameSets( array( $tag_1['term_id'], $tag_2['term_id'] ), $tags ); 975 976 wp_update_post( 977 array( 978 'ID' => $post->ID, 979 'tags_input' => array( $tag_2['term_id'], $tag_3['term_id'] ), 980 ) 981 ); 982 983 $tags = wp_get_post_tags( $post->ID, array( 'fields' => 'ids' ) ); 984 $this->assertSameSets( array( $tag_2['term_id'], $tag_3['term_id'] ), $tags ); 985 } 986 987 /** 988 * @ticket 52187 989 */ 990 public function test_insert_empty_post_date() { 991 $post_date_gmt = '2020-12-29 10:11:45'; 992 $invalid_date = '2020-12-41 14:15:27'; 993 994 // Empty post_date_gmt with floating status 995 $post_id = self::factory()->post->create( 996 array( 997 'post_status' => 'draft', 998 ) 999 ); 1000 $post = get_post( $post_id ); 1001 $this->assertEqualsWithDelta( 1002 strtotime( gmdate( 'Y-m-d H:i:s' ) ), 1003 strtotime( $post->post_date ), 1004 2, 1005 'The dates should be equal' 1006 ); 1007 $this->assertSame( '0000-00-00 00:00:00', $post->post_date_gmt ); 1008 1009 $post_id = self::factory()->post->create( 1010 array( 1011 'post_date_gmt' => '0000-00-00 00:00:00', 1012 'post_status' => 'draft', 1013 ) 1014 ); 1015 $post = get_post( $post_id ); 1016 $this->assertEqualsWithDelta( 1017 strtotime( gmdate( 'Y-m-d H:i:s' ) ), 1018 strtotime( $post->post_date ), 1019 2, 1020 'The dates should be equal' 1021 ); 1022 $this->assertSame( '0000-00-00 00:00:00', $post->post_date_gmt ); 1023 1024 // Empty post_date_gmt without floating status 1025 $post_id = self::factory()->post->create( 1026 array( 1027 'post_status' => 'publish', 1028 ) 1029 ); 1030 $post = get_post( $post_id ); 1031 $this->assertEqualsWithDelta( 1032 strtotime( gmdate( 'Y-m-d H:i:s' ) ), 1033 strtotime( $post->post_date ), 1034 2, 1035 'The dates should be equal' 1036 ); 1037 $this->assertEqualsWithDelta( 1038 strtotime( gmdate( 'Y-m-d H:i:s' ) ), 1039 strtotime( get_gmt_from_date( $post->post_date ) ), 1040 2, 1041 'The dates should be equal' 1042 ); 1043 1044 $post_id = self::factory()->post->create( 1045 array( 1046 'post_date_gmt' => '0000-00-00 00:00:00', 1047 'post_status' => 'publish', 1048 ) 1049 ); 1050 $post = get_post( $post_id ); 1051 $this->assertEqualsWithDelta( 1052 strtotime( gmdate( 'Y-m-d H:i:s' ) ), 1053 strtotime( $post->post_date ), 1054 2, 1055 'The dates should be equal' 1056 ); 1057 $this->assertEqualsWithDelta( 1058 strtotime( gmdate( 'Y-m-d H:i:s' ) ), 1059 strtotime( get_gmt_from_date( $post->post_date ) ), 1060 2, 1061 'The dates should be equal' 1062 ); 1063 1064 // Valid post_date_gmt 1065 $post_id = self::factory()->post->create( 1066 array( 1067 'post_date_gmt' => $post_date_gmt, 1068 ) 1069 ); 1070 $post = get_post( $post_id ); 1071 $this->assertSame( get_date_from_gmt( $post_date_gmt ), $post->post_date ); 1072 $this->assertSame( $post_date_gmt, $post->post_date_gmt ); 1073 1074 // Invalid post_date_gmt 1075 $post_id = self::factory()->post->create( 1076 array( 1077 'post_date_gmt' => $invalid_date, 1078 ) 1079 ); 1080 $post = get_post( $post_id ); 1081 $this->assertSame( '1970-01-01 00:00:00', $post->post_date ); 1082 $this->assertSame( '0000-00-00 00:00:00', $post->post_date_gmt ); 1083 } 1084 1085 /** 1086 * @ticket 52187 1087 */ 1088 public function test_insert_valid_post_date() { 1089 $post_date = '2020-12-28 11:26:35'; 1090 $post_date_gmt = '2020-12-29 10:11:45'; 1091 $invalid_date = '2020-12-41 14:15:27'; 1092 1093 // Empty post_date_gmt with floating status 1094 $post_id = self::factory()->post->create( 1095 array( 1096 'post_date' => $post_date, 1097 'post_status' => 'draft', 1098 ) 1099 ); 1100 $post = get_post( $post_id ); 1101 $this->assertSame( $post_date, $post->post_date ); 1102 $this->assertSame( '0000-00-00 00:00:00', $post->post_date_gmt ); 1103 1104 $post_id = self::factory()->post->create( 1105 array( 1106 'post_date' => $post_date, 1107 'post_date_gmt' => '0000-00-00 00:00:00', 1108 'post_status' => 'draft', 1109 ) 1110 ); 1111 $post = get_post( $post_id ); 1112 $this->assertSame( $post_date, $post->post_date ); 1113 $this->assertSame( '0000-00-00 00:00:00', $post->post_date_gmt ); 1114 1115 // Empty post_date_gmt without floating status 1116 $post_id = self::factory()->post->create( 1117 array( 1118 'post_date' => $post_date, 1119 'post_status' => 'publish', 1120 ) 1121 ); 1122 $post = get_post( $post_id ); 1123 $this->assertSame( $post_date, $post->post_date ); 1124 $this->assertSame( get_gmt_from_date( $post_date ), $post->post_date_gmt ); 1125 1126 $post_id = self::factory()->post->create( 1127 array( 1128 'post_date' => $post_date, 1129 'post_date_gmt' => '0000-00-00 00:00:00', 1130 'post_status' => 'publish', 1131 ) 1132 ); 1133 $post = get_post( $post_id ); 1134 $this->assertSame( $post_date, $post->post_date ); 1135 $this->assertSame( get_gmt_from_date( $post_date ), $post->post_date_gmt ); 1136 1137 // Valid post_date_gmt 1138 $post_id = self::factory()->post->create( 1139 array( 1140 'post_date' => $post_date, 1141 'post_date_gmt' => $post_date_gmt, 1142 ) 1143 ); 1144 $post = get_post( $post_id ); 1145 $this->assertSame( $post_date, $post->post_date ); 1146 $this->assertSame( $post_date_gmt, $post->post_date_gmt ); 1147 1148 // Invalid post_date_gmt 1149 $post_id = self::factory()->post->create( 1150 array( 1151 'post_date' => $post_date, 1152 'post_date_gmt' => $invalid_date, 1153 ) 1154 ); 1155 $post = get_post( $post_id ); 1156 $this->assertSame( $post_date, $post->post_date ); 1157 $this->assertSame( '0000-00-00 00:00:00', $post->post_date_gmt ); 1158 } 1159 1160 /** 1161 * @ticket 52187 1162 */ 1163 public function test_insert_invalid_post_date() { 1164 $post_date = '2020-12-28 11:26:35'; 1165 $post_date_gmt = '2020-12-29 10:11:45'; 1166 $invalid_date = '2020-12-41 14:15:27'; 1167 1168 // Empty post_date_gmt with floating status 1169 $post_id = self::factory()->post->create( 1170 array( 1171 'post_date' => $invalid_date, 1172 'post_status' => 'draft', 1173 ) 1174 ); 1175 $this->assertSame( 0, $post_id ); 1176 1177 $post_id = self::factory()->post->create( 1178 array( 1179 'post_date' => $invalid_date, 1180 'post_date_gmt' => '0000-00-00 00:00:00', 1181 'post_status' => 'draft', 1182 ) 1183 ); 1184 $this->assertSame( 0, $post_id ); 1185 1186 // Empty post_date_gmt without floating status 1187 $post_id = self::factory()->post->create( 1188 array( 1189 'post_date' => $invalid_date, 1190 'post_status' => 'publish', 1191 ) 1192 ); 1193 $this->assertSame( 0, $post_id ); 1194 1195 $post_id = self::factory()->post->create( 1196 array( 1197 'post_date' => $invalid_date, 1198 'post_date_gmt' => '0000-00-00 00:00:00', 1199 'post_status' => 'publish', 1200 ) 1201 ); 1202 $this->assertSame( 0, $post_id ); 1203 1204 // Valid post_date_gmt 1205 $post_id = self::factory()->post->create( 1206 array( 1207 'post_date' => $invalid_date, 1208 'post_date_gmt' => $post_date_gmt, 1209 ) 1210 ); 1211 $this->assertSame( 0, $post_id ); 1212 1213 // Invalid post_date_gmt 1214 $post_id = self::factory()->post->create( 1215 array( 1216 'post_date' => $invalid_date, 1217 'post_date_gmt' => $invalid_date, 1218 ) 1219 ); 1220 $this->assertSame( 0, $post_id ); 1221 } 1222 1223 /** 69 1224 * @ticket 11863 70 1225 */
Note: See TracChangeset
for help on using the changeset viewer.