Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 95 additions & 0 deletions tests/phpunit/tests/general/postTypeArchiveTitle.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
<?php

/**
* Tests for the `post_type_archive_title()` function.
*
* @group general
* @group template
*
* @covers ::post_type_archive_title
*/
class Tests_General_PostTypeArchiveTitle extends WP_UnitTestCase {

const POST_TYPE = 'wptests_pt';

public function set_up() {
parent::set_up();

register_post_type(
self::POST_TYPE,
array(
'public' => true,
'has_archive' => true,
'labels' => array(
'name' => 'Custom Books',
),
)
);
}

/**
* Tests that post_type_archive_title() returns null when not on a post type archive.
*
* @ticket 65819
*/
public function test_post_type_archive_title_returns_null_outside_archive() {
$this->go_to( '/' );

$this->assertNull( post_type_archive_title( '', false ) );
}

/**
* Tests that post_type_archive_title() displays the title on a post type archive.
*
* @ticket 65819
*/
public function test_post_type_archive_title_should_display_on_archive() {
$this->go_to( '/?post_type=' . self::POST_TYPE );

$this->expectOutputString( 'Custom Books' );
post_type_archive_title();
}

/**
* Tests that post_type_archive_title() returns the title when $display is false.
*
* @ticket 65819
*/
public function test_post_type_archive_title_returns_when_display_is_false() {
$this->go_to( '/?post_type=' . self::POST_TYPE );

$this->assertSame( 'Custom Books', post_type_archive_title( '', false ) );

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one looks like a small coverage gap: the prefix is only tested when displaying, so a lost prefix in return $prefix . $title goes unnoticed. Could you add $this->assertSame( 'Archive: Custom Books', post_type_archive_title( 'Archive: ', false ) );?

}

/**
* Tests that post_type_archive_title() prepends the prefix to the title.
*
* @ticket 65819
*/
public function test_post_type_archive_title_prepends_prefix() {
$this->go_to( '/?post_type=' . self::POST_TYPE );

$this->expectOutputString( 'Archive: Custom Books' );
post_type_archive_title( 'Archive: ' );
}

/**
* Tests that post_type_archive_title() respects the post_type_archive_title filter.
*
* @ticket 65819
*/
public function test_post_type_archive_title_filter() {
$this->go_to( '/?post_type=' . self::POST_TYPE );

add_filter(
'post_type_archive_title',
static function ( $title, $post_type ) {
return 'Filtered: ' . $title . ' (' . $post_type . ')';
},
10,
2
);

$this->assertSame( 'Filtered: Custom Books (wptests_pt)', post_type_archive_title( '', false ) );

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another small gap: the is_array( $post_type ) branch isn't reached yet. A query string won't get there, because is_post_type_archive() is false for an array, but set_query_var( 'post_type', array( self::POST_TYPE, 'post' ) ) after go_to() does. Could you add a test for it?

}
}
Loading