wordpress-develop/tests/phpunit/tests/post/wpUniquePostSlug.php
Sergey Biryukov 164b22cf6a Tests: First pass at using assertSame() instead of assertEquals() in most of the unit tests.
This ensures that not only the return values match the expected results, but also that their type is the same.

Going forward, stricter type checking by using `assertSame()` should generally be preferred to `assertEquals()` where appropriate, to make the tests more reliable.

Props johnbillion, jrf, SergeyBiryukov.
See #38266.

git-svn-id: https://develop.svn.wordpress.org/trunk@48937 602fd350-edb4-49c9-b593-d223f7449a82
2020-09-02 00:35:36 +00:00

384 lines
9.8 KiB
PHP

<?php
/**
* @group post
*/
class Tests_Post_WpUniquePostSlug extends WP_UnitTestCase {
protected $post_ids = array();
/**
* @ticket 21013
*/
public function test_non_latin_slugs() {
$author_id = self::factory()->user->create( array( 'role' => 'editor' ) );
$inputs = array(
'Αρνάκι άσπρο και παχύ της μάνας του καμάρι, και άλλα τραγούδια',
'Предлагаем супер металлообрабатывающее оборудование',
);
$outputs = array(
'αρνάκι-άσπρο-και-παχύ-της-μάνας-του-κα-2',
'предлагаем-супер-металлообрабатыва-2',
);
foreach ( $inputs as $k => $post_title ) {
for ( $i = 0; $i < 2; $i++ ) {
$post = array(
'post_author' => $author_id,
'post_status' => 'publish',
'post_content' => 'Post content',
'post_title' => $post_title,
);
$id = self::factory()->post->create( $post );
$this->post_ids[] = $id;
}
$post = get_post( $id );
$this->assertSame( $outputs[ $k ], urldecode( $post->post_name ) );
}
}
/**
* @ticket 18962
*/
public function test_with_multiple_hierarchies() {
register_post_type( 'post-type-1', array( 'hierarchical' => true ) );
register_post_type( 'post-type-2', array( 'hierarchical' => true ) );
$args = array(
'post_type' => 'post-type-1',
'post_name' => 'some-slug',
'post_status' => 'publish',
);
$one = self::factory()->post->create( $args );
$args['post_type'] = 'post-type-2';
$two = self::factory()->post->create( $args );
$this->assertSame( 'some-slug', get_post( $one )->post_name );
$this->assertSame( 'some-slug', get_post( $two )->post_name );
$this->assertSame( 'some-other-slug', wp_unique_post_slug( 'some-other-slug', $one, 'publish', 'post-type-1', 0 ) );
$this->assertSame( 'some-other-slug', wp_unique_post_slug( 'some-other-slug', $one, 'publish', 'post-type-2', 0 ) );
_unregister_post_type( 'post-type-1' );
_unregister_post_type( 'post-type-2' );
}
/**
* @ticket 30339
*/
public function test_with_hierarchy() {
register_post_type( 'post-type-1', array( 'hierarchical' => true ) );
$args = array(
'post_type' => 'post-type-1',
'post_name' => 'some-slug',
'post_status' => 'publish',
);
$one = self::factory()->post->create( $args );
$args['post_name'] = 'some-slug-2';
$two = self::factory()->post->create( $args );
$this->assertSame( 'some-slug', get_post( $one )->post_name );
$this->assertSame( 'some-slug-2', get_post( $two )->post_name );
$this->assertSame( 'some-slug-3', wp_unique_post_slug( 'some-slug', 0, 'publish', 'post-type-1', 0 ) );
_unregister_post_type( 'post-type-1' );
}
/**
* @ticket 18962
*/
function test_wp_unique_post_slug_with_hierarchy_and_attachments() {
register_post_type( 'post-type-1', array( 'hierarchical' => true ) );
$args = array(
'post_type' => 'post-type-1',
'post_name' => 'some-slug',
'post_status' => 'publish',
);
$one = self::factory()->post->create( $args );
$args = array(
'post_mime_type' => 'image/jpeg',
'post_type' => 'attachment',
'post_name' => 'image',
);
$attachment = self::factory()->attachment->create_object( 'image.jpg', $one, $args );
$args = array(
'post_type' => 'post-type-1',
'post_name' => 'image',
'post_status' => 'publish',
'post_parent' => $one,
);
$two = self::factory()->post->create( $args );
$this->assertSame( 'some-slug', get_post( $one )->post_name );
$this->assertSame( 'image', get_post( $attachment )->post_name );
$this->assertSame( 'image-2', get_post( $two )->post_name );
// 'image' can be a child of image-2.
$this->assertSame( 'image', wp_unique_post_slug( 'image', 0, 'publish', 'post-type-1', $two ) );
_unregister_post_type( 'post-type-1' );
}
/**
* @dataProvider allowed_post_statuses
*/
public function test_allowed_post_statuses_should_not_be_forced_to_be_unique( $status ) {
$p1 = self::factory()->post->create(
array(
'post_type' => 'post',
'post_name' => 'foo',
)
);
$p2 = self::factory()->post->create(
array(
'post_type' => 'post',
)
);
$actual = wp_unique_post_slug( 'foo', $p2, $status, 'post', 0 );
$this->assertSame( 'foo', $actual );
}
public function allowed_post_statuses() {
return array(
array( 'draft' ),
array( 'pending' ),
array( 'auto-draft' ),
);
}
public function test_revisions_should_not_be_forced_to_be_unique() {
$p1 = self::factory()->post->create(
array(
'post_type' => 'post',
'post_name' => 'foo',
)
);
$p2 = self::factory()->post->create(
array(
'post_type' => 'post',
)
);
$actual = wp_unique_post_slug( 'foo', $p2, 'inherit', 'revision', 0 );
$this->assertSame( 'foo', $actual );
}
/**
* @ticket 5305
*/
public function test_slugs_resulting_in_permalinks_that_resemble_year_archives_should_be_suffixed() {
$this->set_permalink_structure( '/%postname%/' );
$p = self::factory()->post->create(
array(
'post_type' => 'post',
'post_name' => 'foo',
)
);
$found = wp_unique_post_slug( '2015', $p, 'publish', 'post', 0 );
$this->assertSame( '2015-2', $found );
}
/**
* @ticket 5305
*/
public function test_slugs_resulting_in_permalinks_that_resemble_year_archives_should_not_be_suffixed_for_already_published_posts() {
$this->set_permalink_structure( '/%postname%/' );
$p = self::factory()->post->create(
array(
'post_type' => 'post',
'post_name' => 'foo',
'post_status' => 'publish',
)
);
$found = wp_unique_post_slug( '2015', $p, 'publish', 'post', 0 );
$this->assertSame( '2015-2', $found );
}
/**
* @ticket 5305
*/
public function test_yearlike_slugs_should_not_be_suffixed_if_permalink_structure_does_not_result_in_a_clash_with_year_archives() {
$this->set_permalink_structure( '/%year%/%postname%/' );
$p = self::factory()->post->create(
array(
'post_type' => 'post',
'post_name' => 'foo',
)
);
$found = wp_unique_post_slug( '2015', $p, 'publish', 'post', 0 );
$this->assertSame( '2015', $found );
}
/**
* @ticket 5305
*/
public function test_slugs_resulting_in_permalinks_that_resemble_month_archives_should_be_suffixed() {
$this->set_permalink_structure( '/%year%/%postname%/' );
$p = self::factory()->post->create(
array(
'post_type' => 'post',
'post_name' => 'foo',
)
);
$found = wp_unique_post_slug( '11', $p, 'publish', 'post', 0 );
$this->assertSame( '11-2', $found );
}
/**
* @ticket 5305
*/
public function test_monthlike_slugs_should_not_be_suffixed_if_permalink_structure_does_not_result_in_a_clash_with_month_archives() {
$this->set_permalink_structure( '/%year%/foo/%postname%/' );
$p = self::factory()->post->create(
array(
'post_type' => 'post',
'post_name' => 'foo',
)
);
$found = wp_unique_post_slug( '11', $p, 'publish', 'post', 0 );
$this->assertSame( '11', $found );
}
/**
* @ticket 5305
*/
public function test_monthlike_slugs_should_not_be_suffixed_for_invalid_month_numbers() {
$this->set_permalink_structure( '/%year%/%postname%/' );
$p = self::factory()->post->create(
array(
'post_type' => 'post',
'post_name' => 'foo',
)
);
$found = wp_unique_post_slug( '13', $p, 'publish', 'post', 0 );
$this->assertSame( '13', $found );
}
/**
* @ticket 5305
*/
public function test_slugs_resulting_in_permalinks_that_resemble_day_archives_should_be_suffixed() {
$this->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
$p = self::factory()->post->create(
array(
'post_type' => 'post',
'post_name' => 'foo',
)
);
$found = wp_unique_post_slug( '30', $p, 'publish', 'post', 0 );
$this->assertSame( '30-2', $found );
}
/**
* @ticket 5305
*/
public function test_daylike_slugs_should_not_be_suffixed_if_permalink_structure_does_not_result_in_a_clash_with_day_archives() {
$this->set_permalink_structure( '/%year%/%monthnum%/%day%/%postname%/' );
$p = self::factory()->post->create(
array(
'post_type' => 'post',
'post_name' => 'foo',
)
);
$found = wp_unique_post_slug( '30', $p, 'publish', 'post', 0 );
$this->assertSame( '30', $found );
}
/**
* @ticket 5305
*/
public function test_daylike_slugs_should_not_be_suffixed_for_invalid_day_numbers() {
$this->set_permalink_structure( '/%year%/%monthnum%/%postname%/' );
$p = self::factory()->post->create(
array(
'post_type' => 'post',
'post_name' => 'foo',
)
);
$found = wp_unique_post_slug( '32', $p, 'publish', 'post', 0 );
$this->assertSame( '32', $found );
}
/**
* @ticket 34971
*/
public function test_embed_slug_should_be_suffixed_for_posts() {
$this->set_permalink_structure( '/%postname%/' );
$p = self::factory()->post->create(
array(
'post_type' => 'post',
'post_name' => 'embed',
)
);
$found = wp_unique_post_slug( 'embed', $p, 'publish', 'post', 0 );
$this->assertSame( 'embed-2', $found );
}
/**
* @ticket 34971
*/
public function test_embed_slug_should_be_suffixed_for_pages() {
$this->set_permalink_structure( '/%postname%/' );
$p = self::factory()->post->create(
array(
'post_type' => 'page',
'post_name' => 'embed',
)
);
$found = wp_unique_post_slug( 'embed', $p, 'publish', 'paage', 0 );
$this->assertSame( 'embed-2', $found );
}
/**
* @ticket 34971
*/
public function test_embed_slug_should_be_suffixed_for_attachments() {
$this->set_permalink_structure( '/%postname%/' );
$p = self::factory()->post->create(
array(
'post_type' => 'attachment',
'post_name' => 'embed',
)
);
$found = wp_unique_post_slug( 'embed', $p, 'publish', 'attachment', 0 );
$this->assertSame( 'embed-2', $found );
}
}