diff --git a/tests/phpunit/tests/term.php b/tests/phpunit/tests/term.php index 1fdbd14825..b8a4fd5aa4 100644 --- a/tests/phpunit/tests/term.php +++ b/tests/phpunit/tests/term.php @@ -491,151 +491,6 @@ class Tests_Term extends WP_UnitTestCase { $this->assertEquals( $expected_term_ids, $assigned_term_ids ); } - /** - * @ticket 22560 - */ - function test_object_term_cache() { - $post_id = self::$post_ids[0]; - - $terms_1 = array('foo', 'bar', 'baz'); - $terms_2 = array('bar', 'bing'); - - // Cache should be empty after a set. - $tt_1 = wp_set_object_terms( $post_id, $terms_1, $this->taxonomy ); - $this->assertEquals( 3, count($tt_1) ); - $this->assertFalse( wp_cache_get( $post_id, $this->taxonomy . '_relationships') ); - - // wp_get_object_terms() does not prime the cache. - wp_get_object_terms( $post_id, $this->taxonomy, array('fields' => 'names', 'orderby' => 't.term_id') ); - $this->assertFalse( wp_cache_get( $post_id, $this->taxonomy . '_relationships') ); - - // get_the_terms() does prime the cache. - $terms = get_the_terms( $post_id, $this->taxonomy ); - $cache = wp_cache_get( $post_id, $this->taxonomy . '_relationships'); - $this->assertInternalType( 'array', $cache ); - - // Cache should be empty after a set. - $tt_2 = wp_set_object_terms( $post_id, $terms_2, $this->taxonomy ); - $this->assertEquals( 2, count($tt_2) ); - $this->assertFalse( wp_cache_get( $post_id, $this->taxonomy . '_relationships') ); - } - - /** - * @ticket 24189 - */ - function test_object_term_cache_when_term_changes() { - $post_id = self::$post_ids[0]; - $tag_id = self::factory()->tag->create( array( - 'name' => 'Amaze Tag', - 'description' => 'My Amazing Tag' - ) ); - - $tt_1 = wp_set_object_terms( $post_id, $tag_id, 'post_tag' ); - - $terms = get_the_terms( $post_id, 'post_tag' ); - $this->assertEquals( $tag_id, $terms[0]->term_id ); - $this->assertEquals( 'My Amazing Tag', $terms[0]->description ); - - $_updated = wp_update_term( $tag_id, 'post_tag', array( - 'description' => 'This description is even more amazing!' - ) ); - - $_new_term = get_term( $tag_id, 'post_tag' ); - $this->assertEquals( $tag_id, $_new_term->term_id ); - $this->assertEquals( 'This description is even more amazing!', $_new_term->description ); - - $terms = get_the_terms( $post_id, 'post_tag' ); - $this->assertEquals( $tag_id, $terms[0]->term_id ); - $this->assertEquals( 'This description is even more amazing!', $terms[0]->description ); - } - - /** - * @ticket 34262 - */ - public function test_get_the_terms_should_not_cache_wp_term_objects() { - $p = self::$post_ids[0]; - register_taxonomy( 'wptests_tax', 'post' ); - $t = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) ); - wp_set_object_terms( $p, $t, 'wptests_tax' ); - - // Prime the cache. - $terms = get_the_terms( $p, 'wptests_tax' ); - - $cached = get_object_term_cache( $p, 'wptests_tax' ); - - $this->assertNotEmpty( $cached ); - $this->assertSame( $t, (int) $cached[0]->term_id ); - $this->assertNotInstanceOf( 'WP_Term', $cached[0] ); - } - - /** - * @ticket 34262 - */ - public function test_get_the_terms_should_return_wp_term_objects_from_cache() { - $p = self::$post_ids[0]; - register_taxonomy( 'wptests_tax', 'post' ); - $t = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) ); - wp_set_object_terms( $p, $t, 'wptests_tax' ); - - // Prime the cache. - get_the_terms( $p, 'wptests_tax' ); - - $cached = get_the_terms( $p, 'wptests_tax' ); - - $this->assertNotEmpty( $cached ); - $this->assertSame( $t, (int) $cached[0]->term_id ); - $this->assertInstanceOf( 'WP_Term', $cached[0] ); - } - - /** - * @ticket 31086 - */ - public function test_get_the_terms_should_return_zero_indexed_array_when_cache_is_empty() { - register_taxonomy( 'wptests_tax', 'post' ); - $p = self::$post_ids[0]; - wp_set_object_terms( $p, array( 'foo', 'bar' ), 'wptests_tax' ); - - $found = get_the_terms( $p, 'wptests_tax' ); - - $this->assertEqualSets( array( 0, 1 ), array_keys( $found ) ); - } - - /** - * @ticket 31086 - */ - public function test_get_the_terms_should_return_zero_indexed_array_when_cache_is_primed() { - register_taxonomy( 'wptests_tax', 'post' ); - $p = self::$post_ids[0]; - wp_set_object_terms( $p, array( 'foo', 'bar' ), 'wptests_tax' ); - - // Prime cache. - update_object_term_cache( array( $p ), array( 'post' ) ); - - $found = get_the_terms( $p, 'wptests_tax' ); - - $this->assertEqualSets( array( 0, 1 ), array_keys( $found ) ); - } - - /** - * @ticket 35180 - * @ticket 28922 - */ - public function test_get_the_terms_should_return_results_ordered_by_name_when_pulling_from_cache() { - register_taxonomy( 'wptests_tax', 'post' ); - $p = self::$post_ids[0]; - - $t1 = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax', 'name' => 'fff' ) ); - $t2 = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax', 'name' => 'aaa' ) ); - $t3 = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax', 'name' => 'zzz' ) ); - - wp_set_object_terms( $p, array( $t1, $t2, $t3 ), 'wptests_tax' ); - update_object_term_cache( $p, 'post' ); - - $found = get_the_terms( $p, 'wptests_tax' ); - - $this->assertSame( array( $t2, $t1, $t3 ), wp_list_pluck( $found, 'term_id' ) ); - } - /** * @ticket 19205 */ @@ -647,13 +502,4 @@ class Tests_Term extends WP_UnitTestCase { $cat_id2 = self::factory()->category->create( array( 'parent' => $cat_id1 ) ); $this->assertWPError( $cat_id2 ); } - - /** - * @ticket 34723 - */ - function test_get_the_terms_should_return_wp_error_when_taxonomy_is_unregistered() { - $p = self::$post_ids[0]; - $terms = get_the_terms( $p, 'this-taxonomy-does-not-exist' ); - $this->assertTrue( is_wp_error( $terms ) ); - } } diff --git a/tests/phpunit/tests/term/getTheTerms.php b/tests/phpunit/tests/term/getTheTerms.php new file mode 100644 index 0000000000..d7bb7fc42d --- /dev/null +++ b/tests/phpunit/tests/term/getTheTerms.php @@ -0,0 +1,173 @@ +post->create_many( 5 ); + } + + public static function wpTearDownAfterClass() { + foreach ( self::$post_ids as $post_id ) { + wp_delete_post( $post_id, true ); + } + } + + /** + * @ticket 22560 + */ + function test_object_term_cache() { + $post_id = self::$post_ids[0]; + + $terms_1 = array('foo', 'bar', 'baz'); + $terms_2 = array('bar', 'bing'); + + // Cache should be empty after a set. + $tt_1 = wp_set_object_terms( $post_id, $terms_1, $this->taxonomy ); + $this->assertEquals( 3, count($tt_1) ); + $this->assertFalse( wp_cache_get( $post_id, $this->taxonomy . '_relationships') ); + + // wp_get_object_terms() does not prime the cache. + wp_get_object_terms( $post_id, $this->taxonomy, array('fields' => 'names', 'orderby' => 't.term_id') ); + $this->assertFalse( wp_cache_get( $post_id, $this->taxonomy . '_relationships') ); + + // get_the_terms() does prime the cache. + $terms = get_the_terms( $post_id, $this->taxonomy ); + $cache = wp_cache_get( $post_id, $this->taxonomy . '_relationships'); + $this->assertInternalType( 'array', $cache ); + + // Cache should be empty after a set. + $tt_2 = wp_set_object_terms( $post_id, $terms_2, $this->taxonomy ); + $this->assertEquals( 2, count($tt_2) ); + $this->assertFalse( wp_cache_get( $post_id, $this->taxonomy . '_relationships') ); + } + + /** + * @ticket 24189 + */ + function test_object_term_cache_when_term_changes() { + $post_id = self::$post_ids[0]; + $tag_id = self::factory()->tag->create( array( + 'name' => 'Amaze Tag', + 'description' => 'My Amazing Tag' + ) ); + + $tt_1 = wp_set_object_terms( $post_id, $tag_id, 'post_tag' ); + + $terms = get_the_terms( $post_id, 'post_tag' ); + $this->assertEquals( $tag_id, $terms[0]->term_id ); + $this->assertEquals( 'My Amazing Tag', $terms[0]->description ); + + $_updated = wp_update_term( $tag_id, 'post_tag', array( + 'description' => 'This description is even more amazing!' + ) ); + + $_new_term = get_term( $tag_id, 'post_tag' ); + $this->assertEquals( $tag_id, $_new_term->term_id ); + $this->assertEquals( 'This description is even more amazing!', $_new_term->description ); + + $terms = get_the_terms( $post_id, 'post_tag' ); + $this->assertEquals( $tag_id, $terms[0]->term_id ); + $this->assertEquals( 'This description is even more amazing!', $terms[0]->description ); + } + + /** + * @ticket 34262 + */ + public function test_get_the_terms_should_not_cache_wp_term_objects() { + $p = self::$post_ids[0]; + register_taxonomy( 'wptests_tax', 'post' ); + $t = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) ); + wp_set_object_terms( $p, $t, 'wptests_tax' ); + + // Prime the cache. + $terms = get_the_terms( $p, 'wptests_tax' ); + + $cached = get_object_term_cache( $p, 'wptests_tax' ); + + $this->assertNotEmpty( $cached ); + $this->assertSame( $t, (int) $cached[0]->term_id ); + $this->assertNotInstanceOf( 'WP_Term', $cached[0] ); + } + + /** + * @ticket 34262 + */ + public function test_get_the_terms_should_return_wp_term_objects_from_cache() { + $p = self::$post_ids[0]; + register_taxonomy( 'wptests_tax', 'post' ); + $t = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax' ) ); + wp_set_object_terms( $p, $t, 'wptests_tax' ); + + // Prime the cache. + get_the_terms( $p, 'wptests_tax' ); + + $cached = get_the_terms( $p, 'wptests_tax' ); + + $this->assertNotEmpty( $cached ); + $this->assertSame( $t, (int) $cached[0]->term_id ); + $this->assertInstanceOf( 'WP_Term', $cached[0] ); + } + + /** + * @ticket 31086 + */ + public function test_get_the_terms_should_return_zero_indexed_array_when_cache_is_empty() { + register_taxonomy( 'wptests_tax', 'post' ); + $p = self::$post_ids[0]; + wp_set_object_terms( $p, array( 'foo', 'bar' ), 'wptests_tax' ); + + $found = get_the_terms( $p, 'wptests_tax' ); + + $this->assertEqualSets( array( 0, 1 ), array_keys( $found ) ); + } + + /** + * @ticket 31086 + */ + public function test_get_the_terms_should_return_zero_indexed_array_when_cache_is_primed() { + register_taxonomy( 'wptests_tax', 'post' ); + $p = self::$post_ids[0]; + wp_set_object_terms( $p, array( 'foo', 'bar' ), 'wptests_tax' ); + + // Prime cache. + update_object_term_cache( array( $p ), array( 'post' ) ); + + $found = get_the_terms( $p, 'wptests_tax' ); + + $this->assertEqualSets( array( 0, 1 ), array_keys( $found ) ); + } + + /** + * @ticket 35180 + * @ticket 28922 + */ + public function test_get_the_terms_should_return_results_ordered_by_name_when_pulling_from_cache() { + register_taxonomy( 'wptests_tax', 'post' ); + $p = self::$post_ids[0]; + + $t1 = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax', 'name' => 'fff' ) ); + $t2 = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax', 'name' => 'aaa' ) ); + $t3 = self::factory()->term->create( array( 'taxonomy' => 'wptests_tax', 'name' => 'zzz' ) ); + + wp_set_object_terms( $p, array( $t1, $t2, $t3 ), 'wptests_tax' ); + update_object_term_cache( $p, 'post' ); + + $found = get_the_terms( $p, 'wptests_tax' ); + + $this->assertSame( array( $t2, $t1, $t3 ), wp_list_pluck( $found, 'term_id' ) ); + } + + /** + * @ticket 34723 + */ + function test_get_the_terms_should_return_wp_error_when_taxonomy_is_unregistered() { + $p = self::$post_ids[0]; + $terms = get_the_terms( $p, 'this-taxonomy-does-not-exist' ); + $this->assertTrue( is_wp_error( $terms ) ); + } +}