Skip to content

Commit

Permalink
Tests/Build tools: Various term related test improvements.
Browse files Browse the repository at this point in the history
Modifies the tests for `get_tag_link()`, `get_term()` and `get_term_field()` to:

- use shared fixtures as possible
- improves variable names
- add `@covers` annotation as required

Props peterwilsoncc, costdev.
See #57841.


git-svn-id: https://develop.svn.wordpress.org/trunk@55924 602fd350-edb4-49c9-b593-d223f7449a82
  • Loading branch information
peterwilsoncc committed Jun 15, 2023
1 parent 8a5411b commit 9fe8cdf
Show file tree
Hide file tree
Showing 3 changed files with 166 additions and 93 deletions.
76 changes: 51 additions & 25 deletions tests/phpunit/tests/term/getTagLink.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,56 @@
* @covers ::get_tag_link
*/
class Tests_Term_GetTagLink extends WP_UnitTestCase {
public function test_success() {
$t = self::factory()->term->create(
/**
* Tag ID.
*
* @var int
*/
public static $tag_id;

/**
* Test taxonomy term ID.
*
* @var int
*/
public static $term_id;

/**
* Set up shared fixtures.
*
* @param WP_UnitTest_Factory $factory
*/
public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) {
self::$tag_id = $factory->term->create(
array(
'taxonomy' => 'post_tag',
'slug' => 'term-slug',
'slug' => 'test-tag',
)
);

$found = get_tag_link( $t );
$expected = home_url( '?tag=term-slug' );
register_taxonomy( 'wptests_tax', 'post' );
self::$term_id = self::factory()->term->create(
array(
'taxonomy' => 'wptests_tax',
'slug' => 'test-term',
)
);
}

/**
* Set up the test fixture.
*/
public function set_up() {
parent::set_up();
// Required as taxonomies are reset between tests.
register_taxonomy( 'wptests_tax', 'post' );
}

public function test_success() {
$tag_id = self::$tag_id;

$found = get_tag_link( $tag_id );
$expected = home_url( '?tag=test-tag' );

$this->assertSame( $expected, $found );
}
Expand All @@ -23,18 +63,11 @@ public function test_success() {
* @ticket 42771
*/
public function test_should_return_link_for_term_from_another_taxonomy_on_primed_cache() {
register_taxonomy( 'wptests_tax', 'post' );
$term_id = self::$term_id;

$t = self::factory()->term->create(
array(
'taxonomy' => 'wptests_tax',
'slug' => 'test-term',
)
);

$term = get_term( $t );
$term = get_term( $term_id );

$found = get_tag_link( $t );
$found = get_tag_link( $term_id );
$expected = home_url( '?wptests_tax=test-term' );

$this->assertSame( $expected, $found );
Expand All @@ -44,18 +77,11 @@ public function test_should_return_link_for_term_from_another_taxonomy_on_primed
* @ticket 42771
*/
public function test_should_return_link_for_term_from_another_taxonomy_on_empty_cache() {
register_taxonomy( 'wptests_tax', 'post' );

$t = self::factory()->term->create(
array(
'taxonomy' => 'wptests_tax',
'slug' => 'test-term',
)
);
$term_id = self::$term_id;

clean_term_cache( $t );
clean_term_cache( $term_id );

$found = get_tag_link( $t );
$found = get_tag_link( $term_id );
$expected = home_url( '?wptests_tax=test-term' );

$this->assertSame( $expected, $found );
Expand Down
103 changes: 68 additions & 35 deletions tests/phpunit/tests/term/getTerm.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,47 +2,80 @@

/**
* @group taxonomy
*
* @covers ::get_term
*/
class Tests_Term_GetTerm extends WP_UnitTestCase {
/**
* Shared terms.
*
* @var array[]
*/
public static $shared_terms = array();

/**
* Test taxonomy term object.
*
* @var WP_Term
*/
public static $term;

/**
* Set up shared fixtures.
*
* @param WP_UnitTest_Factory $factory
*/
public static function wpSetUpBeforeClass( WP_UnitTest_Factory $factory ) {
register_taxonomy( 'wptests_tax', 'post' );
self::$shared_terms = self::generate_shared_terms();

self::$term = $factory->term->create_and_get( array( 'taxonomy' => 'wptests_tax' ) );
}

/**
* Set up the test fixtures.
*/
public function set_up() {
parent::set_up();
// Required as taxonomies are reset between tests.
register_taxonomy( 'wptests_tax', 'post' );
register_taxonomy( 'wptests_tax_2', 'post' );
}

/**
* Utility function for generating two shared terms, in the 'wptests_tax' and 'wptests_tax_2' taxonomies.
*
* @return array Array of term_id/old_term_id/term_taxonomy_id triplets.
*/
protected function generate_shared_terms() {
protected static function generate_shared_terms() {
global $wpdb;

register_taxonomy( 'wptests_tax_2', 'post' );

$t1 = wp_insert_term( 'Foo', 'wptests_tax' );
$t2 = wp_insert_term( 'Foo', 'wptests_tax_2' );
$term_1 = wp_insert_term( 'Foo', 'wptests_tax' );
$term_2 = wp_insert_term( 'Foo', 'wptests_tax_2' );

// Manually modify because shared terms shouldn't naturally occur.
$wpdb->update(
$wpdb->term_taxonomy,
array( 'term_id' => $t1['term_id'] ),
array( 'term_taxonomy_id' => $t2['term_taxonomy_id'] ),
array( 'term_id' => $term_1['term_id'] ),
array( 'term_taxonomy_id' => $term_2['term_taxonomy_id'] ),
array( '%d' ),
array( '%d' )
);

clean_term_cache( $t1['term_id'] );
clean_term_cache( $term_1['term_id'] );

return array(
array(
'term_id' => $t1['term_id'],
'old_term_id' => $t1['term_id'],
'term_taxonomy_id' => $t1['term_taxonomy_id'],
'term_id' => $term_1['term_id'],
'old_term_id' => $term_1['term_id'],
'term_taxonomy_id' => $term_1['term_taxonomy_id'],
),
array(
'term_id' => $t1['term_id'],
'old_term_id' => $t2['term_id'],
'term_taxonomy_id' => $t2['term_taxonomy_id'],
'term_id' => $term_1['term_id'],
'old_term_id' => $term_2['term_id'],
'term_taxonomy_id' => $term_2['term_taxonomy_id'],
),
);
}
Expand All @@ -60,7 +93,7 @@ public function test_should_return_error_for_invalid_taxonomy() {
}

public function test_passing_term_object_should_skip_database_query_when_filter_property_is_empty() {
$term = self::factory()->term->create_and_get( array( 'taxonomy' => 'wptests_tax' ) );
$term = self::$term;
clean_term_cache( $term->term_id, 'wptests_tax' );

$num_queries = get_num_queries();
Expand All @@ -80,34 +113,34 @@ public function test_should_return_null_for_invalid_term_id() {
}

public function test_cache_should_be_populated_by_successful_fetch() {
$t = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) );
clean_term_cache( $t, 'wptests_tax' );
$term_id = self::$term->term_id;
clean_term_cache( $term_id, 'wptests_tax' );

// Prime cache.
$term_a = get_term( $t, 'wptests_tax' );
$term_a = get_term( $term_id, 'wptests_tax' );
$num_queries = get_num_queries();

// Second call shouldn't require a database query.
$term_b = get_term( $t, 'wptests_tax' );
$term_b = get_term( $term_id, 'wptests_tax' );
$this->assertSame( $num_queries, get_num_queries() );
$this->assertEquals( $term_a, $term_b );
}

public function test_output_object() {
$t = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) );
$this->assertIsObject( get_term( $t, 'wptests_tax', OBJECT ) );
$term_id = self::$term->term_id;
$this->assertIsObject( get_term( $term_id, 'wptests_tax', OBJECT ) );
}

public function test_output_array_a() {
$t = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) );
$term = get_term( $t, 'wptests_tax', ARRAY_A );
$term_id = self::$term->term_id;
$term = get_term( $term_id, 'wptests_tax', ARRAY_A );
$this->assertIsArray( $term );
$this->assertArrayHasKey( 'term_id', $term );
}

public function test_output_array_n() {
$t = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) );
$term = get_term( $t, 'wptests_tax', ARRAY_N );
$term_id = self::$term->term_id;
$term = get_term( $term_id, 'wptests_tax', ARRAY_N );
$this->assertIsArray( $term );
$this->assertArrayNotHasKey( 'term_id', $term );
foreach ( $term as $k => $v ) {
Expand All @@ -116,8 +149,8 @@ public function test_output_array_n() {
}

public function test_output_should_fall_back_to_object_for_invalid_input() {
$t = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) );
$this->assertIsObject( get_term( $t, 'wptests_tax', 'foo' ) );
$term_id = self::$term->term_id;
$this->assertIsObject( get_term( $term_id, 'wptests_tax', 'foo' ) );
}

/**
Expand All @@ -127,10 +160,10 @@ public function test_output_should_fall_back_to_object_for_invalid_input() {
public function test_numeric_properties_should_be_cast_to_ints() {
global $wpdb;

$t = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) );
$term_id = self::$term->term_id;

// Get raw data from the database.
$term_data = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->terms t JOIN $wpdb->term_taxonomy tt ON ( t.term_id = tt.term_id ) WHERE t.term_id = %d", $t ) );
$term_data = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->terms t JOIN $wpdb->term_taxonomy tt ON ( t.term_id = tt.term_id ) WHERE t.term_id = %d", $term_id ) );

$contexts = array( 'raw', 'edit', 'db', 'display', 'rss', 'attribute', 'js' );

Expand All @@ -150,15 +183,15 @@ public function test_numeric_properties_should_be_cast_to_ints() {
* @ticket 34332
*/
public function test_should_return_null_when_provided_taxonomy_does_not_match_actual_term_taxonomy() {
$term_id = self::factory()->term->create( array( 'taxonomy' => 'post_tag' ) );
$term_id = self::$term->term_id;
$this->assertNull( get_term( $term_id, 'category' ) );
}

/**
* @ticket 34533
*/
public function test_should_return_wp_error_when_term_is_shared_and_no_taxonomy_is_specified() {
$terms = $this->generate_shared_terms();
$terms = self::$shared_terms;

$found = get_term( $terms[0]['term_id'] );

Expand All @@ -169,7 +202,7 @@ public function test_should_return_wp_error_when_term_is_shared_and_no_taxonomy_
* @ticket 34533
*/
public function test_should_return_term_when_term_is_shared_and_correct_taxonomy_is_specified() {
$terms = $this->generate_shared_terms();
$terms = self::$shared_terms;

$found = get_term( $terms[0]['term_id'], 'wptests_tax' );

Expand All @@ -181,7 +214,7 @@ public function test_should_return_term_when_term_is_shared_and_correct_taxonomy
* @ticket 34533
*/
public function test_should_return_null_when_term_is_shared_and_incorrect_taxonomy_is_specified() {
$terms = $this->generate_shared_terms();
$terms = self::$shared_terms;

$found = get_term( $terms[0]['term_id'], 'post_tag' );

Expand All @@ -192,7 +225,7 @@ public function test_should_return_null_when_term_is_shared_and_incorrect_taxono
* @ticket 34533
*/
public function test_shared_term_in_cache_should_be_ignored_when_specifying_a_different_taxonomy() {
$terms = $this->generate_shared_terms();
$terms = self::$shared_terms;

// Prime cache for 'wptests_tax'.
get_term( $terms[0]['term_id'], 'wptests_tax' );
Expand All @@ -211,11 +244,11 @@ public function test_shared_term_in_cache_should_be_ignored_when_specifying_a_di
* @ticket 34533
*/
public function test_should_return_error_when_only_matching_term_is_in_an_invalid_taxonomy() {
$t = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) );
$term_id = self::$term->term_id;

_unregister_taxonomy( 'wptests_tax' );

$found = get_term( $t );
$found = get_term( $term_id );
$this->assertWPError( $found );
$this->assertSame( 'invalid_taxonomy', $found->get_error_code() );
}
Expand All @@ -224,7 +257,7 @@ public function test_should_return_error_when_only_matching_term_is_in_an_invali
* @ticket 34533
*/
public function test_term_should_be_returned_when_id_is_shared_only_with_invalid_taxonomies() {
$terms = $this->generate_shared_terms();
$terms = self::$shared_terms;

_unregister_taxonomy( 'wptests_tax' );

Expand Down
Loading

0 comments on commit 9fe8cdf

Please sign in to comment.